Merge remote-tracking branch 'origin/test' into master11
BIN
src/assets/iscs_picture/check_arrow_double_hong.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
src/assets/iscs_picture/check_arrow_double_lv.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
src/assets/iscs_picture/check_arrow_left_hong.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
src/assets/iscs_picture/check_arrow_left_lv.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
src/assets/iscs_picture/check_arrow_right_hong.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
src/assets/iscs_picture/check_arrow_right_lv.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.2 KiB |
BIN
src/assets/iscs_picture/check_sell2_hong.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
src/assets/iscs_picture/check_sell2_lv.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
src/assets/iscs_picture/check_sell3.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
@ -49,11 +49,20 @@ import iscsDibian from '@/assets/iscs_picture/iscs-dibian.png';
|
||||
import iscsPt1 from '@/assets/iscs_picture/iscs-pt1.png';
|
||||
import checkNormal from '@/assets/iscs_picture/check_normal.png';
|
||||
import checkArrowLeft from '@/assets/iscs_picture/check_arrow_left.png';
|
||||
import checkArrowLeftLv from '@/assets/iscs_picture/check_arrow_left_lv.png';
|
||||
import checkArrowLeftHong from '@/assets/iscs_picture/check_arrow_left_hong.png';
|
||||
import checkArrowRight from '@/assets/iscs_picture/check_arrow_right.png';
|
||||
import checkArrowRightLv from '@/assets/iscs_picture/check_arrow_right_lv.png';
|
||||
import checkArrowRightHong from '@/assets/iscs_picture/check_arrow_right_hong.png';
|
||||
import checkArrowDouble from '@/assets/iscs_picture/check_arrow_double.png';
|
||||
import checkArrowDoubleLv from '@/assets/iscs_picture/check_arrow_double_lv.png';
|
||||
import checkArrowDoubleHong from '@/assets/iscs_picture/check_arrow_double_hong.png';
|
||||
import checkFlowCumulative from '@/assets/iscs_picture/check_flow_cumulative.png';
|
||||
import checkSell from '@/assets/iscs_picture/check_sell.png';
|
||||
import checkSell2 from '@/assets/iscs_picture/check_sell2.png';
|
||||
import checkSell2Lv from '@/assets/iscs_picture/check_sell2_lv.png';
|
||||
import checkSell2Hong from '@/assets/iscs_picture/check_sell2_hong.png';
|
||||
import checkSell3 from '@/assets/iscs_picture/check_sell3.png';
|
||||
import bgShowRoom from '@/assets/iscs_picture/bg-showroom.jpg';
|
||||
import bgStand from '@/assets/iscs_picture/bg-stand.jpg';
|
||||
import bgFasPlatformA from '@/assets/iscs_picture/fas_platform_a_bg.png';
|
||||
@ -131,11 +140,17 @@ const pictureObj = {
|
||||
iscsPt1,
|
||||
checkNormal,
|
||||
checkArrowLeft,
|
||||
checkArrowLeftLv,
|
||||
checkArrowLeftHong,
|
||||
checkArrowRight,
|
||||
checkArrowRightLv,
|
||||
checkArrowRightHong,
|
||||
checkArrowDouble,
|
||||
checkFlowCumulative,
|
||||
checkSell,
|
||||
checkSell2,
|
||||
checkSell2Lv,
|
||||
checkSell2Hong,
|
||||
bgShowRoom,
|
||||
bgStand,
|
||||
basAnnulus,
|
||||
@ -210,6 +225,9 @@ export default class Picture extends Group {
|
||||
this.grouper.add(this.imageButton);
|
||||
this.add(this.grouper);
|
||||
}
|
||||
setStyle( style ) {
|
||||
this.imageButton.setStyle(style);
|
||||
}
|
||||
setModel(dx, dy) {
|
||||
this.model.point.x += dx;
|
||||
this.model.point.y += dy;
|
||||
|
@ -130,3 +130,19 @@ export function trainSimulationDoorControl(group, data) {
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
||||
export function trainSimulationDoorSelection(group, data) {
|
||||
return request({
|
||||
url: `/simulation/${group}/operate/Driver_Door_Selection`,
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
||||
export function trainSimulationDoorMode(group, data) {
|
||||
return request({
|
||||
url: `/simulation/${group}/operate/Driver_Door_Mode`,
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ export function JLmapDriving(dom,data,mapId,storemod,translation,routegroup,proj
|
||||
scene.add(controls3.getObject());
|
||||
|
||||
let cameracctv = new THREE.PerspectiveCamera(50, dom.clientWidth/dom.clientHeight, 0.1, 50);
|
||||
cameracctv.position.set( -3, 0,4.5 );
|
||||
cameracctv.position.set( 1, 0,4.5 );
|
||||
|
||||
cameracctv.rotation.y = -Math.PI/2;
|
||||
cameracctv.rotation.x = Math.PI/2;
|
||||
@ -387,7 +387,7 @@ export function JLmapDriving(dom,data,mapId,storemod,translation,routegroup,proj
|
||||
rails = loadrails;
|
||||
|
||||
// console.log(trainlisttest.group.children[0]);
|
||||
trainlisttest.group.children[0].getObjectByName("C3").add(cameracctv);
|
||||
trainlisttest.group.children[0].getObjectByName("C6").add(cameracctv);
|
||||
}
|
||||
|
||||
this.eventon = function() {
|
||||
|
@ -837,7 +837,6 @@ export function Jl3dDrivingNew(mixers,updatemmi,sound,translation,routegroup,dri
|
||||
}
|
||||
}else if(trainmodel.openleft != data.open && data.open == "1"){
|
||||
trainmodel.openleft = "1";
|
||||
console.log(data);
|
||||
for(let an=actions["traindoor"].top.length-1;an>=0;an--){
|
||||
actions["traindoor"].top[an].reset();
|
||||
actions["traindoor"].top[an].time = 0;
|
||||
@ -988,7 +987,7 @@ export function Jl3dDrivingNew(mixers,updatemmi,sound,translation,routegroup,dri
|
||||
}
|
||||
function standupdate(data) {
|
||||
code = data.code;
|
||||
|
||||
|
||||
if ( actions[code]) {
|
||||
if (data.open == '1') {
|
||||
actions[code].status = '1';
|
||||
|
@ -104,13 +104,17 @@ export function Lesson3dPlayer(dom,lessonData,lessonIndex) {
|
||||
// console.log(nowRole);
|
||||
// console.log(lessonData.lessonProgress[lessonIndex].roleName);
|
||||
if(lessonData.lessonProgress[lessonIndex].roleName == nowRole){
|
||||
controlManager.initControlMode(lessonIndex);
|
||||
assetModelManager.changeSceneGroup(scope.nowSceneType);
|
||||
controlManager.initRoleMode(true,nowRole);
|
||||
controlManager.initControlMode(lessonIndex);
|
||||
controlManager.changeIndexEvent(lessonData.lessonProgress[lessonIndex].action,true,assetModelManager.lessonTriggerList[scope.nowSceneType]);
|
||||
|
||||
}else{
|
||||
controlManager.initControlMode(lessonIndex);
|
||||
} else{
|
||||
if(lessonData.lessonProgress[lessonIndex].roleName == 'kong'){
|
||||
assetModelManager.changeSceneGroup(scope.nowSceneType); controlManager.initRoleMode(false,nowRole);
|
||||
}
|
||||
controlManager.initRoleMode(false,nowRole);
|
||||
controlManager.initControlMode(lessonIndex);
|
||||
controlManager.changeIndexEvent(lessonData.lessonProgress[lessonIndex].action,false,assetModelManager.lessonTriggerList[scope.nowSceneType]);
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@ export function AssetModelManager(editor,scene) {
|
||||
groupList["standstation"] = new THREE.Group();
|
||||
groupList["stopstation"] = new THREE.Group();
|
||||
groupList["device"] = new THREE.Group();
|
||||
groupList["occ"] = new THREE.Group();
|
||||
groupList["xl"] = new THREE.Group();
|
||||
groupList["dc"] = new THREE.Group();
|
||||
|
||||
@ -90,15 +91,36 @@ export function AssetModelManager(editor,scene) {
|
||||
sceneType:"stopstation",
|
||||
};
|
||||
|
||||
scope.staticAsset['occ'] = {
|
||||
modelId:'occ',
|
||||
packageName:"occ大厅",
|
||||
url:"/MODEL/2021-09-02/210-32471.FBX",
|
||||
mesh:"",
|
||||
assetType:'onlineasset',
|
||||
isUse:true,
|
||||
resourceType:"三维课程",
|
||||
sceneType:"occ",
|
||||
};
|
||||
//场景中可触发事件模型
|
||||
this.lessonTriggerList = [];
|
||||
|
||||
scope.lessonTriggerList["standstation"] = [];
|
||||
scope.lessonTriggerList["stopstation"] = [];
|
||||
scope.lessonTriggerList["device"] = [];
|
||||
scope.lessonTriggerList["occ"] = [];
|
||||
scope.lessonTriggerList["xl"] = [];
|
||||
scope.lessonTriggerList["dc"] = [];
|
||||
|
||||
this.changeSceneGroup = function(groupType){
|
||||
// console.log(groupType);
|
||||
// console.log(editor.nowSceneType);
|
||||
// console.log(scope.lessonTriggerList[editor.nowSceneType]);
|
||||
editor.nowSceneType = groupType;
|
||||
scene.remove(this.otherModel);
|
||||
this.otherModel = groupList[groupType];
|
||||
scene.add(this.otherModel);
|
||||
updateTriggerList(scope.lessonTriggerList[editor.nowSceneType]);
|
||||
}
|
||||
//加载课程资源
|
||||
this.lessonAssetsLoader = function(lessonData){
|
||||
let initlist = [];
|
||||
|
@ -84,7 +84,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
|
||||
|
||||
|
||||
let loaderObj = new THREE.OBJLoader();
|
||||
let standstationPZ,stopstationPZ;
|
||||
let standstationPZ,stopstationPZ,occPZ;
|
||||
// load a resource
|
||||
loaderObj.load(
|
||||
JL3D_LOCAL_STATIC+'/lesson3d/standstationPZ.obj',
|
||||
@ -110,6 +110,19 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
|
||||
console.log( 'An error happened' );
|
||||
}
|
||||
);
|
||||
loaderObj.load(
|
||||
JL3D_LOCAL_STATIC+'/lesson3d/occPZ.obj',
|
||||
function ( object ) {
|
||||
occPZ = object;
|
||||
},
|
||||
function ( xhr ) {
|
||||
console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
|
||||
},
|
||||
function ( error ) {
|
||||
console.log( 'An error happened' );
|
||||
}
|
||||
);
|
||||
|
||||
this.initRoleMode = function(rMode,role){
|
||||
roleMode = rMode;
|
||||
nowRole = role;
|
||||
@ -215,7 +228,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
|
||||
|
||||
|
||||
this.init = function(actions){
|
||||
worldOctree.fromGraphNode( standstationPZ );
|
||||
// worldOctree.fromGraphNode( standstationPZ );
|
||||
actionList = actions;
|
||||
}
|
||||
|
||||
@ -279,6 +292,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
|
||||
}
|
||||
|
||||
}else if(raycasterBoxs[i].type == "urgeSwitch"){
|
||||
console.log(raycasterBoxs[i]);
|
||||
if(raycasterBoxs[i].action.status == "02"){
|
||||
raycasterBoxs[i].action.status = "01";
|
||||
raycasterBoxs[i].action.action.stop();
|
||||
@ -485,16 +499,23 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
|
||||
}
|
||||
|
||||
this.initControlMode = function(nowLessonIndex){
|
||||
console.log(lessonData.lessonProgress[nowLessonIndex].progressScene);
|
||||
// console.log(lessonData.lessonProgress[nowLessonIndex].progressScene);
|
||||
|
||||
if(lessonData.lessonProgress[nowLessonIndex].progressScene == "standstation"){
|
||||
worldOctree.fromGraphNode( standstationPZ );
|
||||
}else if(lessonData.lessonProgress[nowLessonIndex].progressScene == "stopstation"){
|
||||
worldOctree.fromGraphNode( stopstationPZ );
|
||||
}else if(lessonData.lessonProgress[nowLessonIndex].progressScene == "occ"){
|
||||
worldOctree.fromGraphNode( occPZ );
|
||||
}
|
||||
|
||||
scope.controlMode = lessonData.lessonProgress[nowLessonIndex].controlMode;
|
||||
if(lessonData.lessonProgress[nowLessonIndex].changeCamera == true){
|
||||
|
||||
|
||||
|
||||
if((lessonData.lessonProgress[nowLessonIndex].changeCamera == true && lessonData.lessonProgress[nowLessonIndex].roleName == nowRole) || nowLessonIndex == 0 || lessonData.lessonProgress[nowLessonIndex].roleName== 'kong'){
|
||||
|
||||
|
||||
scope.controlMode = lessonData.lessonProgress[nowLessonIndex].controlMode;
|
||||
if(scope.controlMode == "free" || scope.controlMode == "non"){
|
||||
scope.nowCamera = orbitCamera;
|
||||
oribitControl.enabled = true;
|
||||
@ -537,11 +558,11 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
|
||||
// eventBoxs = newEventBoxs;
|
||||
raycasterBoxs = [];
|
||||
roleMode = rMode;
|
||||
console.log("---------changeIndex--------");
|
||||
console.log(actions);
|
||||
console.log(roleMode);
|
||||
console.log(eventTrigger);
|
||||
console.log("----------------------------");
|
||||
// console.log("---------changeIndex--------");
|
||||
// console.log(actions);
|
||||
// console.log(roleMode);
|
||||
// console.log(eventTrigger);
|
||||
// console.log("----------------------------");
|
||||
|
||||
|
||||
if(actions.length>0 && roleMode){
|
||||
|
238
src/jlmap3d/lesson3dedit/accident/fire.js
Normal file
@ -0,0 +1,238 @@
|
||||
export function Fire() {
|
||||
let scope = this;
|
||||
this.points = {};
|
||||
var last_time_activate = Date.now();
|
||||
|
||||
|
||||
this.createNew = function(scene,pos){
|
||||
scope.points = new Points(pos);
|
||||
scope.points.init(pos);
|
||||
scene.add(scope.points.obj);
|
||||
}
|
||||
|
||||
this.update = function(){
|
||||
var now = Date.now();
|
||||
scope.points.update();
|
||||
if (now - last_time_activate > 10) {
|
||||
|
||||
scope.points.activateMover();
|
||||
last_time_activate = Date.now();
|
||||
}
|
||||
}
|
||||
|
||||
var Mover = function() {
|
||||
this.position = new THREE.Vector3();
|
||||
this.velocity = new THREE.Vector3();
|
||||
this.acceleration = new THREE.Vector3();
|
||||
this.anchor = new THREE.Vector3();
|
||||
this.mass = 1;
|
||||
this.r = 0;
|
||||
this.g = 0;
|
||||
this.b = 0;
|
||||
this.a = 1;
|
||||
this.time = 0;
|
||||
this.is_active = false;
|
||||
};
|
||||
|
||||
Mover.prototype = {
|
||||
init: function(vector) {
|
||||
this.position = vector.clone();
|
||||
this.velocity = vector.clone();
|
||||
this.anchor = vector.clone();
|
||||
this.acceleration.set(0, 0, 0);
|
||||
this.a = 1;
|
||||
this.time = 0;
|
||||
},
|
||||
updatePosition: function() {
|
||||
this.position.copy(this.velocity);
|
||||
},
|
||||
updateVelocity: function() {
|
||||
this.acceleration.divideScalar(this.mass);
|
||||
this.velocity.add(this.acceleration);
|
||||
// if (this.velocity.distanceTo(this.position) >= 1) {
|
||||
// this.direct(this.velocity);
|
||||
// }
|
||||
},
|
||||
applyForce: function(vector) {
|
||||
this.acceleration.add(vector);
|
||||
},
|
||||
applyFriction: function() {
|
||||
var friction = friction(this.acceleration, 0.1);
|
||||
this.applyForce(friction);
|
||||
},
|
||||
applyDragForce: function(value) {
|
||||
var drag = drag(this.acceleration, value);
|
||||
this.applyForce(drag);
|
||||
},
|
||||
hook: function(rest_length, k) {
|
||||
var force = hook(this.velocity, this.anchor, rest_length, k);
|
||||
this.applyForce(force);
|
||||
},
|
||||
activate: function() {
|
||||
this.is_active = true;
|
||||
},
|
||||
inactivate: function() {
|
||||
this.is_active = false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var Points = function(pos) {
|
||||
this.movers_num = 3000;
|
||||
this.movers = [];
|
||||
this.pos = pos;
|
||||
this.geometry = null;
|
||||
this.material = null;
|
||||
this.obj = null;
|
||||
this.texture = null;
|
||||
this.antigravity = new THREE.Vector3(0, 0.1, 0);
|
||||
};
|
||||
|
||||
Points.prototype = {
|
||||
init: function(pos) {
|
||||
this.createTexture();
|
||||
this.geometry = new THREE.Geometry();
|
||||
this.material = new THREE.PointsMaterial({
|
||||
color: 0xff6633,
|
||||
size: 3,
|
||||
transparent: true,
|
||||
opacity: 0.5,
|
||||
map: this.texture,
|
||||
// depthTest: false,
|
||||
depthWrite:false,
|
||||
alphaTest: 0.1,
|
||||
blending: THREE.AdditiveBlending,
|
||||
});
|
||||
for (var i = 0; i < this.movers_num; i++) {
|
||||
var mover = new Mover();
|
||||
|
||||
mover.init(new THREE.Vector3((10*Math.random()+pos.x),pos.y, (10*Math.random()+pos.z)));
|
||||
this.movers.push(mover);
|
||||
this.geometry.vertices.push(mover.position);
|
||||
}
|
||||
this.obj = new THREE.Points(this.geometry, this.material);
|
||||
this.obj.renderOrder = 1;
|
||||
},
|
||||
update: function() {
|
||||
var points_vertices = [];
|
||||
|
||||
for (var i = 0; i < this.movers.length; i++) {
|
||||
var mover = this.movers[i];
|
||||
if (mover.is_active) {
|
||||
mover.applyForce(this.antigravity);
|
||||
mover.updateVelocity();
|
||||
mover.updatePosition();
|
||||
if (mover.position.y > (this.pos.y+5)) {
|
||||
mover.inactivate();
|
||||
}
|
||||
}
|
||||
points_vertices.push(mover.position);
|
||||
}
|
||||
this.obj.geometry.vertices = points_vertices;
|
||||
this.obj.geometry.verticesNeedUpdate = true;
|
||||
},
|
||||
activateMover: function() {
|
||||
var count = 0;
|
||||
let pos = this.pos;
|
||||
for (var i = 0; i < this.movers.length; i++) {
|
||||
var mover = this.movers[i];
|
||||
|
||||
if (mover.is_active) continue;
|
||||
var rad1 = getRadian(Math.log(getRandomInt(200, 256)) / Math.log(256) * 270);
|
||||
var rad2 = getRadian(getRandomInt(0, 360));
|
||||
var force = getSpherical(rad1, rad2, 1);
|
||||
mover.activate();
|
||||
mover.init(new THREE.Vector3((10*Math.random()+pos.x), pos.y+5, (10*Math.random()+pos.z)));
|
||||
mover.applyForce(force);
|
||||
|
||||
count++;
|
||||
if (count >= 10) break;
|
||||
}
|
||||
},
|
||||
createTexture: function() {
|
||||
var canvas = document.createElement('canvas');
|
||||
var ctx = canvas.getContext('2d');
|
||||
var grad = null;
|
||||
|
||||
canvas.width = 200;
|
||||
canvas.height = 200;
|
||||
grad = ctx.createRadialGradient(100, 100, 20, 100, 100, 100);
|
||||
grad.addColorStop(0.2, 'rgba(255, 255, 255, 1)');
|
||||
grad.addColorStop(0.5, 'rgba(255, 255, 255, 0.3)');
|
||||
grad.addColorStop(1.0, 'rgba(255, 255, 255, 0)');
|
||||
ctx.fillStyle = grad;
|
||||
ctx.arc(100, 100, 100, 0, Math.PI / 180, true);
|
||||
ctx.fill();
|
||||
this.texture = new THREE.Texture(canvas);
|
||||
this.texture.minFilter = THREE.NearestFilter;
|
||||
this.texture.needsUpdate = true;
|
||||
}
|
||||
};
|
||||
|
||||
var HemiLight = function() {
|
||||
this.rad1 = getRadian(60);
|
||||
this.rad2 = getRadian(30);
|
||||
this.range = 1000;
|
||||
this.hex1 = 0xffffff;
|
||||
this.hex2 = 0x333333;
|
||||
this.intensity = 1;
|
||||
this.obj;
|
||||
};
|
||||
|
||||
HemiLight.prototype = {
|
||||
init: function(hex1, hex2) {
|
||||
if (hex1) this.hex1 = hex1;
|
||||
if (hex2) this.hex2 = hex2;
|
||||
this.obj = new THREE.HemisphereLight(this.hex1, this.hex2, this.intensity);
|
||||
this.setPosition();
|
||||
},
|
||||
setPosition: function() {
|
||||
var points = getSpherical(this.rad1, this.rad2, this.range);
|
||||
this.obj.position.copy(points);
|
||||
}
|
||||
};
|
||||
|
||||
function getRandomInt(min, max) {
|
||||
return Math.floor(Math.random() * (max - min)) + min;
|
||||
}
|
||||
function getDegree(radian) {
|
||||
return radian / Math.PI * 180;
|
||||
}
|
||||
function getRadian(degrees) {
|
||||
return degrees * Math.PI / 180;
|
||||
}
|
||||
function getSpherical(rad1, rad2, r) {
|
||||
var x = Math.cos(rad1) * Math.cos(rad2) * r;
|
||||
var z = Math.cos(rad1) * Math.sin(rad2) * r;
|
||||
var y = Math.sin(rad1) * r;
|
||||
return new THREE.Vector3(x, y, z);
|
||||
}
|
||||
|
||||
|
||||
function friction(acceleration, mu, normal, mass) {
|
||||
var force = acceleration.clone();
|
||||
if (!normal) normal = 1;
|
||||
if (!mass) mass = 1;
|
||||
force.multiplyScalar(-1);
|
||||
force.normalize();
|
||||
force.multiplyScalar(mu);
|
||||
return force;
|
||||
}
|
||||
|
||||
function drag(acceleration, value) {
|
||||
var force = acceleration.clone();
|
||||
force.multiplyScalar(-1);
|
||||
force.normalize();
|
||||
force.multiplyScalar(acceleration.length() * value);
|
||||
return force;
|
||||
}
|
||||
|
||||
function hook(velocity, anchor, rest_length, k) {
|
||||
var force = velocity.clone().sub(anchor);
|
||||
var distance = force.length() - rest_length;
|
||||
force.normalize();
|
||||
force.multiplyScalar(-1 * k * distance);
|
||||
return force;
|
||||
}
|
||||
|
||||
}
|
@ -102,7 +102,7 @@ export function AssetModelManager(editor,scene) {
|
||||
scope.staticAsset['occ'] = {
|
||||
modelId:'occ',
|
||||
packageName:"occ大厅",
|
||||
url:"/MODEL/2021-08-23/203-65635.FBX",
|
||||
url:"/MODEL/2021-09-02/210-32471.FBX",
|
||||
mesh:"",
|
||||
assetType:'onlineasset',
|
||||
isUse:true,
|
||||
|
@ -10,7 +10,9 @@ import { OrbitControls } from '@/jlmap3d/main/control/OrbitControls';
|
||||
//骨骼动画模型辅助工具
|
||||
import { SkeletonUtils } from '@/jlmap3d/main/utils/SkeletonUtils.js';
|
||||
|
||||
import { AssetModelManager } from '@/jlmap3d/lesson3dedit/assetmodelmanager/assetmodelmanager.js';
|
||||
import { AssetModelManager } from '@/jlmap3d/lesson3dedit/manager/assetmodelmanager.js';
|
||||
|
||||
import { AccidentManager } from '@/jlmap3d/lesson3dedit/manager/accidentmanager.js';
|
||||
|
||||
import { TransformControls } from '@/jlmap3d/lesson3dedit/controls/TransformControls';
|
||||
|
||||
@ -75,6 +77,8 @@ export function Lesson3dEditor(dom,lessonData) {
|
||||
//
|
||||
scene.add(transcontrol);
|
||||
|
||||
let accidentManager = new AccidentManager(scene);
|
||||
accidentManager.initAccident();
|
||||
|
||||
let assetModelManager = new AssetModelManager(scope,scene);
|
||||
|
||||
@ -85,6 +89,11 @@ export function Lesson3dEditor(dom,lessonData) {
|
||||
}else{
|
||||
assetModelManager.lessonAssetsLoader();
|
||||
}
|
||||
|
||||
if(lessonData.accidentList){
|
||||
accidentManager.loadAccidentList(lessonData.accidentList)
|
||||
}
|
||||
|
||||
}else{
|
||||
assetModelManager.lessonAssetsLoader();
|
||||
}
|
||||
@ -98,6 +107,7 @@ export function Lesson3dEditor(dom,lessonData) {
|
||||
render();
|
||||
scope.controls.update();
|
||||
// delta = clock.getDelta();
|
||||
accidentManager.update();
|
||||
requestAnimationFrame(animate);
|
||||
|
||||
}
|
||||
@ -112,8 +122,11 @@ export function Lesson3dEditor(dom,lessonData) {
|
||||
|
||||
this.changeIndex = function(nowIndex){
|
||||
lessonIndex = nowIndex;
|
||||
console.log(lessonData.lessonProgress[lessonIndex]);
|
||||
scope.nowSceneType = lessonData.lessonProgress[lessonIndex].progressScene;
|
||||
assetModelManager.changeSceneGroup(scope.nowSceneType);
|
||||
|
||||
accidentManager.changeSceneGroup(scope.nowSceneType);
|
||||
// if(lessonData.lessonProgress[lessonIndex].roleName == nowRole){
|
||||
// controlManager.initControlMode(lessonIndex);
|
||||
// controlManager.initRoleMode(true,nowRole);
|
||||
@ -131,6 +144,7 @@ export function Lesson3dEditor(dom,lessonData) {
|
||||
console.log(value2);
|
||||
if(type == "changeScene"){
|
||||
assetModelManager.changeSceneGroup(value1);
|
||||
accidentManager.changeSceneGroup(value1);
|
||||
scope.nowSceneType = value1;
|
||||
}
|
||||
}
|
||||
@ -155,10 +169,32 @@ export function Lesson3dEditor(dom,lessonData) {
|
||||
|
||||
}
|
||||
|
||||
this.createAccident = function(accidentData,mousePos){
|
||||
var mouse = new THREE.Vector2();
|
||||
|
||||
var raycaster = new THREE.Raycaster();
|
||||
|
||||
mouse.x = ( mousePos.x / window.innerWidth ) * 2 - 1;
|
||||
|
||||
mouse.y = - ( mousePos.y / dom.offsetHeight ) * 2 + 1;
|
||||
|
||||
raycaster.setFromCamera(mouse,scope.camerass) // 也可以给构造函数传参的形式写
|
||||
|
||||
var intersects = raycaster.intersectObjects( scene.children,true );
|
||||
|
||||
if(intersects.length>0){
|
||||
accidentManager.createNewAccident(accidentData,intersects[0].point,scope.nowSceneType);
|
||||
}
|
||||
}
|
||||
|
||||
this.saveAssetModel = function(){
|
||||
return assetModelManager.saveModelList();
|
||||
}
|
||||
|
||||
this.saveAccidentModel = function(){
|
||||
return accidentManager.saveDataList();
|
||||
}
|
||||
|
||||
this.attachModel = function(selectModel){
|
||||
transcontrol.attach(selectModel);
|
||||
}
|
||||
@ -167,4 +203,8 @@ export function Lesson3dEditor(dom,lessonData) {
|
||||
transcontrol.detach();
|
||||
assetModelManager.deleteAsset(selectModel,scope.nowSceneType);
|
||||
}
|
||||
this.deleteAccident = function(selectAccident){
|
||||
accidentManager.deleteAccident(selectAccident,scope.nowSceneType);
|
||||
}
|
||||
|
||||
}
|
||||
|
146
src/jlmap3d/lesson3dedit/manager/accidentmanager.js
Normal file
@ -0,0 +1,146 @@
|
||||
// import { AssetModelManager } from '@/jlmap3d/lesson3dedit/manager/assetmodelmanager.js';
|
||||
import { Fire } from '@/jlmap3d/lesson3dedit/accident/fire.js';
|
||||
|
||||
export function AccidentManager(scene) {
|
||||
let scope = this;
|
||||
|
||||
this.accidentList = [];
|
||||
|
||||
this.accidentGroup = new THREE.Group();
|
||||
|
||||
//场景中可触发事件模型
|
||||
this.accidentList = [];
|
||||
|
||||
scope.accidentList["standstation"] = [];
|
||||
scope.accidentList["stopstation"] = [];
|
||||
|
||||
scope.accidentList["occ"] = [];
|
||||
|
||||
scope.accidentList["device"] = [];
|
||||
scope.accidentList["xl"] = [];
|
||||
scope.accidentList["dc"] = [];
|
||||
|
||||
let groupList = [];
|
||||
groupList["standstation"] = new THREE.Group();
|
||||
groupList["stopstation"] = new THREE.Group();
|
||||
groupList["occ"] = new THREE.Group();
|
||||
groupList["device"] = new THREE.Group();
|
||||
groupList["xl"] = new THREE.Group();
|
||||
groupList["dc"] = new THREE.Group();
|
||||
|
||||
let updateSceneType = "standstation";
|
||||
|
||||
scene.add(scope.accidentGroup);
|
||||
|
||||
this.initAccident = function(nowSceneType){
|
||||
let accidentData = [
|
||||
{
|
||||
id:'1',
|
||||
name:"火灾",
|
||||
type:"fire"
|
||||
}
|
||||
];
|
||||
jl3dUpdateAccidentData(accidentData);
|
||||
}
|
||||
|
||||
this.saveDataList = function(){
|
||||
let saveList = [];
|
||||
for(let g in scope.accidentList){
|
||||
for(let i=0;i<scope.accidentList[g].length;i++){
|
||||
if(scope.accidentList[g][i].showType != "default"){
|
||||
saveList.push({
|
||||
id:scope.accidentList[g][i].id,
|
||||
name:scope.accidentList[g][i].name,
|
||||
label:scope.accidentList[g][i].label,
|
||||
type:scope.accidentList[g][i].type,
|
||||
pos:{
|
||||
x:scope.accidentList[g][i].pos.x,
|
||||
y:scope.accidentList[g][i].pos.y,
|
||||
z:scope.accidentList[g][i].pos.z
|
||||
},
|
||||
showType:scope.accidentList[g][i].showType,
|
||||
sceneType:scope.accidentList[g][i].sceneType,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return saveList;
|
||||
}
|
||||
|
||||
this.changeSceneGroup = function(nowSceneType){
|
||||
if(scope.accidentGroup.children.length>0){
|
||||
scope.accidentGroup.remove(scope.accidentGroup.children[0]);
|
||||
}
|
||||
scope.accidentGroup.add(groupList[nowSceneType]);
|
||||
jl3dUpdateAccidentlist(scope.accidentList[nowSceneType]);
|
||||
updateSceneType = nowSceneType;
|
||||
}
|
||||
|
||||
this.createNewAccident = function(type,pos,nowSceneType){
|
||||
|
||||
var rand = Math.floor(Math.random () * 900) + 100;
|
||||
|
||||
let newAccident = {
|
||||
id:rand,
|
||||
name:type,
|
||||
label:type+rand,
|
||||
type:type,
|
||||
object:{},
|
||||
pos:pos,
|
||||
sceneType:nowSceneType,
|
||||
showType:"loadModel",
|
||||
};
|
||||
if(type == "fire"){
|
||||
newAccident.object = new Fire();
|
||||
newAccident.object.createNew(groupList[nowSceneType],pos);
|
||||
}
|
||||
scope.accidentList[nowSceneType].push(newAccident);
|
||||
jl3dUpdateAccidentlist(scope.accidentList[nowSceneType]);
|
||||
}
|
||||
|
||||
this.deleteAccident = function(selectAccident,nowSceneType){
|
||||
groupList[nowSceneType].remove(selectAccident.object.points.obj);
|
||||
console.log(selectAccident);
|
||||
for(let i=0;i<scope.accidentList[nowSceneType].length;i++){
|
||||
if(scope.accidentList[nowSceneType][i].id == selectAccident.id){
|
||||
scope.accidentList[nowSceneType].splice(i,1);
|
||||
jl3dUpdateAccidentlist(scope.accidentList[nowSceneType]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.loadAccidentList = function(accidentList){
|
||||
console.log(accidentList);
|
||||
for(let i=0;i<accidentList.length;i++){
|
||||
let newAccident = {
|
||||
id:accidentList[i].id,
|
||||
name:accidentList[i].name,
|
||||
label:accidentList[i].label,
|
||||
type:accidentList[i].type,
|
||||
object:{},
|
||||
pos:accidentList[i].pos,
|
||||
sceneType:accidentList[i].sceneType,
|
||||
showType:"loadModel",
|
||||
};
|
||||
if(accidentList[i].type == "fire"){
|
||||
newAccident.object = new Fire();
|
||||
newAccident.object.createNew(groupList[accidentList[i].sceneType],accidentList[i].pos);
|
||||
}
|
||||
scope.accidentList[accidentList[i].sceneType].push(newAccident);
|
||||
// jl3dUpdateAccidentlist(scope.accidentList[accidentList[i].sceneType]);
|
||||
}
|
||||
}
|
||||
|
||||
this.changeAccidentStatus = function(){
|
||||
|
||||
}
|
||||
|
||||
this.update = function(){
|
||||
for(let i=0;i<scope.accidentList[updateSceneType].length;i++){
|
||||
scope.accidentList[updateSceneType][i].object.update();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
388
src/jlmap3d/lesson3dedit/manager/assetmodelmanager.js
Normal file
@ -0,0 +1,388 @@
|
||||
import { BASE_ASSET_API } from '@/api/jlmap3d/assets3d.js';
|
||||
|
||||
import { JL3D_LOCAL_STATIC } from '@/api/jlmap3d/assets3d.js';
|
||||
|
||||
export function AssetModelManager(editor,scene) {
|
||||
let scope = this;
|
||||
|
||||
|
||||
this.assetList = [];
|
||||
|
||||
this.otherModel = new THREE.Group();
|
||||
|
||||
//场景中可触发事件模型
|
||||
this.lessonTriggerList = [];
|
||||
|
||||
scope.lessonTriggerList["standstation"] = [];
|
||||
scope.lessonTriggerList["stopstation"] = [];
|
||||
|
||||
scope.lessonTriggerList["occ"] = [];
|
||||
|
||||
scope.lessonTriggerList["device"] = [];
|
||||
scope.lessonTriggerList["xl"] = [];
|
||||
scope.lessonTriggerList["dc"] = [];
|
||||
|
||||
let groupList = [];
|
||||
groupList["standstation"] = new THREE.Group();
|
||||
groupList["stopstation"] = new THREE.Group();
|
||||
groupList["occ"] = new THREE.Group();
|
||||
groupList["device"] = new THREE.Group();
|
||||
groupList["xl"] = new THREE.Group();
|
||||
groupList["dc"] = new THREE.Group();
|
||||
|
||||
let geometryDevice = new THREE.PlaneGeometry( 100, 100, 32 );
|
||||
let materialDevice = new THREE.MeshBasicMaterial( {color: 0xffffff, side: THREE.DoubleSide} );
|
||||
let planeDevice = new THREE.Mesh( geometryDevice, materialDevice );
|
||||
planeDevice.rotation.x = -Math.PI/2;
|
||||
groupList["device"].add(planeDevice);
|
||||
|
||||
let geometryXl = new THREE.PlaneGeometry( 100, 100, 32 );
|
||||
let materialXl = new THREE.MeshBasicMaterial( {color: 0xffffff, side: THREE.DoubleSide} );
|
||||
let planeXl = new THREE.Mesh( geometryXl, materialXl );
|
||||
planeXl.rotation.x = -Math.PI/2;
|
||||
groupList["xl"].add(planeXl);
|
||||
|
||||
|
||||
this.loadAsset = [];
|
||||
|
||||
this.staticAsset = [];
|
||||
scope.staticAsset['station'] = {
|
||||
modelId:'station',
|
||||
packageName:"车站",
|
||||
url:JL3D_LOCAL_STATIC+"/lesson3d/station.FBX",
|
||||
mesh:"",
|
||||
assetType:'static',
|
||||
isUse:true,
|
||||
resourceType:"三维课程",
|
||||
sceneType:"standstation",
|
||||
};
|
||||
|
||||
scope.staticAsset['FTDH'] = {
|
||||
modelId:'FTDH',
|
||||
packageName:"电扶梯",
|
||||
url:JL3D_LOCAL_STATIC+"/lesson3d/FTDH.FBX",
|
||||
mesh:"",
|
||||
assetType:'static',
|
||||
isUse:true,
|
||||
resourceType:"三维课程",
|
||||
sceneType:"standstation",
|
||||
};
|
||||
|
||||
scope.staticAsset['IN'] = {
|
||||
modelId:'IN',
|
||||
packageName:"进闸机",
|
||||
url:JL3D_LOCAL_STATIC+"/lesson3d/IN.FBX",
|
||||
mesh:"",
|
||||
assetType:'static',
|
||||
isUse:true,
|
||||
resourceType:"三维课程",
|
||||
sceneType:"standstation",
|
||||
};
|
||||
|
||||
scope.staticAsset['OUT'] = {
|
||||
modelId:'OUT',
|
||||
packageName:"出闸机",
|
||||
url:JL3D_LOCAL_STATIC+"/lesson3d/OUT.FBX",
|
||||
mesh:"",
|
||||
assetType:'static',
|
||||
isUse:true,
|
||||
resourceType:"三维课程",
|
||||
sceneType:"standstation",
|
||||
};
|
||||
|
||||
scope.staticAsset['PBMDH'] = {
|
||||
modelId:'PBMDH',
|
||||
packageName:"屏蔽门",
|
||||
url:JL3D_LOCAL_STATIC+"/lesson3d/PBMDH.FBX",
|
||||
mesh:"",
|
||||
assetType:'static',
|
||||
isUse:true,
|
||||
resourceType:"三维课程",
|
||||
sceneType:"standstation",
|
||||
};
|
||||
scope.staticAsset['wxc'] = {
|
||||
modelId:'wxc',
|
||||
packageName:"维修厂",
|
||||
url:"/MODEL/2021-08-12/196-43574.FBX",
|
||||
mesh:"",
|
||||
assetType:'onlineasset',
|
||||
isUse:true,
|
||||
resourceType:"三维课程",
|
||||
sceneType:"stopstation",
|
||||
};
|
||||
|
||||
scope.staticAsset['occ'] = {
|
||||
modelId:'occ',
|
||||
packageName:"occ大厅",
|
||||
url:"/MODEL/2021-09-02/210-32471.FBX",
|
||||
mesh:"",
|
||||
assetType:'onlineasset',
|
||||
isUse:true,
|
||||
resourceType:"三维课程",
|
||||
sceneType:"occ",
|
||||
};
|
||||
|
||||
|
||||
|
||||
this.changeSceneGroup = function(groupType){
|
||||
// console.log(groupType);
|
||||
// console.log(editor.nowSceneType);
|
||||
// console.log(scope.lessonTriggerList[editor.nowSceneType]);
|
||||
editor.nowSceneType = groupType;
|
||||
scene.remove(this.otherModel);
|
||||
this.otherModel = groupList[groupType];
|
||||
scene.add(this.otherModel);
|
||||
updateTriggerList(scope.lessonTriggerList[editor.nowSceneType]);
|
||||
}
|
||||
|
||||
this.saveModelList = function(){
|
||||
let modelList = {
|
||||
assetList:[],
|
||||
modelList:[],
|
||||
};
|
||||
|
||||
for(let k in scope.loadAsset){
|
||||
modelList.assetList.push({
|
||||
modelId:scope.loadAsset[k].modelId,
|
||||
packageName:scope.loadAsset[k].packageName,
|
||||
url:scope.loadAsset[k].url,
|
||||
assetType:scope.loadAsset[k].assetType,
|
||||
isUse:scope.loadAsset[k].isUse,
|
||||
resourceType:scope.loadAsset[k].resourceType,
|
||||
sceneType:scope.loadAsset[k].sceneType,
|
||||
});
|
||||
}
|
||||
|
||||
for(let g in scope.lessonTriggerList){
|
||||
for(let i=0;i<scope.lessonTriggerList[g].length;i++){
|
||||
if(scope.lessonTriggerList[g][i].showType != "default"){
|
||||
modelList.modelList.push({
|
||||
name:scope.lessonTriggerList[g][i].name,
|
||||
modelId:scope.lessonTriggerList[g][i].modelId,
|
||||
label:scope.lessonTriggerList[g][i].label,
|
||||
pos:{
|
||||
x:scope.lessonTriggerList[g][i].position.x,
|
||||
y:scope.lessonTriggerList[g][i].position.y,
|
||||
z:scope.lessonTriggerList[g][i].position.z
|
||||
},
|
||||
rot:{
|
||||
x:scope.lessonTriggerList[g][i].rotation.x,
|
||||
y:scope.lessonTriggerList[g][i].rotation.y,
|
||||
z:scope.lessonTriggerList[g][i].rotation.z
|
||||
},
|
||||
showType:scope.lessonTriggerList[g][i].showType,
|
||||
visible:scope.lessonTriggerList[g][i].visible,
|
||||
sceneType:scope.lessonTriggerList[g][i].sceneType,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
console.log(modelList);
|
||||
return modelList;
|
||||
}
|
||||
|
||||
//加载课程资源
|
||||
this.lessonAssetsLoader = function(lessonData){
|
||||
let initlist = [];
|
||||
if(lessonData){
|
||||
// scene.remove(this.otherModel);
|
||||
this.otherModel = groupList[lessonData.lessonProgress[0].progressScene];
|
||||
scene.add(this.otherModel);
|
||||
|
||||
let assetList = lessonData.assetList;
|
||||
for(let i = 0;i<assetList.length;i++){
|
||||
assetList[i].mesh = "";
|
||||
// assetList[i].sceneType = "standstation";
|
||||
if(assetList[i].modelId == "default1"){
|
||||
|
||||
}else{
|
||||
scope.loadAsset[assetList[i].modelId] = assetList[i];
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.otherModel = groupList["standstation"];
|
||||
scene.add(this.otherModel);
|
||||
}
|
||||
|
||||
for(let k in scope.staticAsset){
|
||||
initlist.push(fbxpromise(scope.staticAsset[k]));
|
||||
}
|
||||
|
||||
for(let k in scope.loadAsset){
|
||||
initlist.push(fbxpromise(scope.loadAsset[k]));
|
||||
}
|
||||
return new Promise(function(resolve, reject){
|
||||
Promise.all(initlist).then((result) => {
|
||||
|
||||
initTriggerList();
|
||||
if(lessonData){
|
||||
let modelList = lessonData.modelList;
|
||||
for(let i=0;i<modelList.length;i++){
|
||||
let newModelTrigger = scope.loadAsset[modelList[i].modelId].mesh.clone(true);
|
||||
// modelList[i].sceneType = "standstation";
|
||||
newModelTrigger.showType = "loadModel";
|
||||
newModelTrigger.label = modelList[i].label;
|
||||
newModelTrigger.modelId = modelList[i].modelId;
|
||||
newModelTrigger.visible = modelList[i].visible;
|
||||
newModelTrigger.position.x = modelList[i].pos.x;
|
||||
newModelTrigger.position.y = modelList[i].pos.y;
|
||||
newModelTrigger.position.z = modelList[i].pos.z;
|
||||
newModelTrigger.rotation.x = modelList[i].rot.x;
|
||||
newModelTrigger.rotation.y = modelList[i].rot.y;
|
||||
newModelTrigger.rotation.z = modelList[i].rot.z;
|
||||
newModelTrigger.sceneType = modelList[i].sceneType;
|
||||
scope.lessonTriggerList[modelList[i].sceneType].push(newModelTrigger);
|
||||
groupList[modelList[i].sceneType].add(newModelTrigger);
|
||||
|
||||
}
|
||||
}
|
||||
editor.changeIndex(0);
|
||||
updateTriggerList(scope.lessonTriggerList[editor.nowSceneType]);
|
||||
|
||||
resolve("loaderassets"); //['成功了', 'success']
|
||||
}).catch((error) => {
|
||||
//console.log(error);
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
this.deleteAsset = function(selectModel,nowSceneType){
|
||||
scope.otherModel.remove(selectModel);
|
||||
for(let i=0;i<scope.lessonTriggerList[nowSceneType].length;i++){
|
||||
if(scope.lessonTriggerList[nowSceneType][i].uuid == selectModel.uuid){
|
||||
scope.lessonTriggerList[nowSceneType].splice(i,1);
|
||||
updateTriggerList(scope.lessonTriggerList[nowSceneType]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// <el-option label="车站" value="standstation"></el-option>
|
||||
// <el-option label="停车场" value="stopstation"></el-option>
|
||||
// <el-option label="单体设备" value="device"></el-option>
|
||||
// <el-option label="线路" value="xl"></el-option>
|
||||
// <el-option label="道岔" value="dc"></el-option>
|
||||
//FT 扶梯
|
||||
//FTAN 扶梯按钮(急停)
|
||||
//FTD 扶梯灯
|
||||
//FTKG 扶梯开关(钥匙孔)
|
||||
//FTTJ 扶梯台阶
|
||||
function initTriggerList(){
|
||||
scope.staticAsset['station'].mesh.getObjectByName("FTAN").showType = "default";
|
||||
scope.staticAsset['station'].mesh.getObjectByName("FTAN").label = "扶梯急停按钮";
|
||||
scope.lessonTriggerList["standstation"].push(scope.staticAsset['station'].mesh.getObjectByName("FTAN"));
|
||||
|
||||
scope.staticAsset['station'].mesh.getObjectByName("FTKG").showType = "default";
|
||||
scope.staticAsset['station'].mesh.getObjectByName("FTKG").label = "扶梯钥匙孔";
|
||||
scope.lessonTriggerList["standstation"].push(scope.staticAsset['station'].mesh.getObjectByName("FTKG"));
|
||||
|
||||
scope.staticAsset['station'].mesh.getObjectByName("spbmkg").showType = "default";
|
||||
scope.staticAsset['station'].mesh.getObjectByName("spbmkg").label = "屏蔽门开关";
|
||||
scope.lessonTriggerList["standstation"].push(scope.staticAsset['station'].mesh.getObjectByName("spbmkg"));
|
||||
|
||||
|
||||
|
||||
// console.log(scope.loadAsset['default1'].mesh.getObjectByName("FTKG"));
|
||||
}
|
||||
|
||||
//动态加载资源
|
||||
this.lessonAssetsNewLoader = function(assetData,pos,nowSceneType){
|
||||
let isLoaded = false;
|
||||
var rand = Math.floor(Math.random () * 900) + 100;
|
||||
if(scope.loadAsset[assetData.id]){
|
||||
let newModelTrigger = scope.loadAsset[assetData.id].mesh.clone(true);
|
||||
newModelTrigger.modelId = assetData.id;
|
||||
newModelTrigger.showType = "loadModel";
|
||||
newModelTrigger.label = assetData.packageName +rand;
|
||||
newModelTrigger.position.copy(pos);
|
||||
newModelTrigger.sceneType = nowSceneType;
|
||||
|
||||
scope.lessonTriggerList[nowSceneType].push(newModelTrigger);
|
||||
groupList[nowSceneType].add(newModelTrigger);
|
||||
|
||||
updateTriggerList(scope.lessonTriggerList[nowSceneType]);
|
||||
}else{
|
||||
scope.loadAsset[assetData.id] = {
|
||||
modelId:assetData.id,
|
||||
packageName:assetData.packageName +rand,
|
||||
url:assetData.url,
|
||||
mesh:"",
|
||||
assetType:'loadModel',
|
||||
isUse:true,
|
||||
resourceType:"三维课程",
|
||||
sceneType:nowSceneType,
|
||||
};
|
||||
console.log("new");
|
||||
|
||||
fbxpromise(scope.loadAsset[assetData.id]).then(function(object){
|
||||
|
||||
console.log(scope.loadAsset[assetData.id].mesh);
|
||||
|
||||
let newModelTrigger = scope.loadAsset[assetData.id].mesh.clone(true);
|
||||
newModelTrigger.showType = "loadModel";
|
||||
newModelTrigger.modelId = assetData.id;
|
||||
newModelTrigger.label = assetData.packageName+rand;
|
||||
newModelTrigger.position.copy(pos);
|
||||
newModelTrigger.sceneType = nowSceneType;
|
||||
|
||||
scope.lessonTriggerList[nowSceneType].push(newModelTrigger);
|
||||
groupList[nowSceneType].add(newModelTrigger);
|
||||
|
||||
updateTriggerList(scope.lessonTriggerList[nowSceneType]);
|
||||
// resolve("loadednew");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//fbx模型加载
|
||||
function fbxpromise(asset){
|
||||
return new Promise(function(resolve, reject){
|
||||
var loader = new THREE.FBXLoader();
|
||||
// console.log(asset);
|
||||
// console.log(asset.url);
|
||||
if(asset.assetType == "static"){
|
||||
loader.load( asset.url, function ( object ) {
|
||||
if(asset.sceneType){
|
||||
object.sceneType = asset.sceneType;
|
||||
}
|
||||
asset.mesh = object;
|
||||
groupList[asset.sceneType].add(object);
|
||||
// scope.otherModel.add(object);
|
||||
resolve();
|
||||
} );
|
||||
}else if(asset.assetType == "onlineasset"){
|
||||
loader.load( BASE_ASSET_API+asset.url, function ( object ) {
|
||||
if(asset.sceneType){
|
||||
object.sceneType = asset.sceneType;
|
||||
}
|
||||
asset.mesh = object;
|
||||
groupList[asset.sceneType].add(object);
|
||||
|
||||
resolve();
|
||||
} );
|
||||
}else{
|
||||
loader.load( BASE_ASSET_API+asset.url, function ( object ) {
|
||||
if(asset.sceneType){
|
||||
object.sceneType = asset.sceneType;
|
||||
}
|
||||
asset.mesh = object;
|
||||
if(asset.assetType == "default"){
|
||||
|
||||
console.log(object);
|
||||
// scene.add(object);
|
||||
}else if(asset.assetType == 'loadModel'){
|
||||
|
||||
}
|
||||
|
||||
resolve();
|
||||
} );
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
@ -9,6 +9,7 @@ export function LessonData() {
|
||||
this.lessonData = {
|
||||
//资源列表
|
||||
assetList:[],
|
||||
accidentList:[],
|
||||
setup:{
|
||||
examMode:"",
|
||||
checkedRole:"",
|
||||
@ -32,7 +33,7 @@ export function LessonData() {
|
||||
roleName:"",
|
||||
roleUse:true,
|
||||
score:0,
|
||||
progressScene:"",
|
||||
progressScene:"standstation",
|
||||
nextCode:"",
|
||||
nextNode:"",
|
||||
triggerType:"",
|
||||
|
@ -102,7 +102,7 @@ export function DriverLoadNew(data,scope,netdata,mapdata,sectionlist,signallist,
|
||||
.then(function(data){
|
||||
//console.log(data);
|
||||
//console.log(assetloader);
|
||||
console.log(stationstandlist);
|
||||
// console.log(stationstandlist);
|
||||
return tdt.initTdt(stationstandlist.list,mapdata.sectionList,rails.sectionrail,sceneload);
|
||||
})
|
||||
.then(function(data){
|
||||
|
@ -36,11 +36,11 @@ export function TdtList() {
|
||||
let pos = stationData[k].mesh.position;
|
||||
if(stationData[k].stands[i].right == true){
|
||||
newmesh.rotation.y = -Math.PI/2;
|
||||
newmesh.position.set(pos.x+75,0,pos.z+14.8);
|
||||
newmesh.position.set(pos.x+75,0,pos.z+12.8);
|
||||
|
||||
}else{
|
||||
newmesh.rotation.y = Math.PI/2;
|
||||
newmesh.position.set(pos.x-75,0,pos.z-14.8);
|
||||
newmesh.position.set(pos.x-75,0,pos.z-12.8);
|
||||
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,9 @@ class Jlmap {
|
||||
// 设备数据
|
||||
this.mapDevice = {};
|
||||
|
||||
// 大屏配置
|
||||
this.splitList = [];
|
||||
|
||||
// 默认状态
|
||||
this.defaultStateDict = this.loadDefaultState();
|
||||
|
||||
@ -143,6 +146,7 @@ class Jlmap {
|
||||
setOptions(opts) {
|
||||
const options = this.pullBack(opts);
|
||||
if (this.screenFlag) {
|
||||
this.$options.update(options);
|
||||
this.$painter.updateScreen(options);
|
||||
} else {
|
||||
this.$options.update(options);
|
||||
@ -216,8 +220,6 @@ class Jlmap {
|
||||
setUpdateScreen(opts) {
|
||||
this.setRecover({ scaleRate: 1, offsetX: 0, offsetY: 0 });
|
||||
this.screenFlag = true;
|
||||
const screenList = [];
|
||||
const rectList = [];
|
||||
let rect = '';
|
||||
for (const i in this.mapDevice) {
|
||||
const element = this.mapDevice[i];
|
||||
@ -233,31 +235,56 @@ class Jlmap {
|
||||
opts.offsetList = [];
|
||||
}
|
||||
const screenSplit = opts.list.length ? opts.list : Vue.prototype.$theme.loadPropConvert(this.lineCode).screenSplit;
|
||||
const screenDifference = Vue.prototype.$theme.loadPropConvert(this.lineCode).screenDifference || 160;
|
||||
const splitList = JSON.parse(JSON.stringify(screenSplit));
|
||||
this.splitList = JSON.parse(JSON.stringify(screenSplit));
|
||||
const num = screenSplit.length + 1;
|
||||
const offsetY = (opts.height - 100) / num; // 高度差
|
||||
const maxWidth = rect.width;
|
||||
splitList.push(maxWidth);
|
||||
this.splitList.push(maxWidth);
|
||||
const scaleX = Math.floor((((opts.width - 200) * num) / rect.width) * 100) / 100;
|
||||
const scaleY = Math.floor(((opts.height - 100) / (rect.height * num)) * 100) / 100;
|
||||
const scale = Math.min(scaleX, scaleY);
|
||||
this.screenScale = Math.min(scaleX, scaleY);
|
||||
|
||||
for (let i = 0; i < splitList.length; i++) {
|
||||
this.optsWidth = opts.width;
|
||||
this.optsHeight = opts.height;
|
||||
this.optsOffsetList = opts.offsetList;
|
||||
|
||||
const scaleBili = this.screenScale;
|
||||
|
||||
this.$options.scaleRate = this.screenScale || 1;
|
||||
this.$options.scaleIndex = 0;
|
||||
this.$options.offsetX = 0;
|
||||
this.$options.offsetY = 0;
|
||||
// 更新视图大小
|
||||
// this.$painter.updateTransform({ scaleRate: this.$options.scaleRate, offsetX: this.$options.offsetX, offsetY: this.$options.offsetY });
|
||||
|
||||
const {screenList, rectList} = this.calculateScreenPosition(scaleBili);
|
||||
this.$painter.updateTransform1(screenList, rectList);
|
||||
}
|
||||
|
||||
calculateScreenPosition(scaleBili) {
|
||||
const screenList = [];
|
||||
const rectList = [];
|
||||
const screenDifference = Vue.prototype.$theme.loadPropConvert(this.lineCode).screenDifference || 160;
|
||||
const bili = scaleBili / this.screenScale;
|
||||
const offsetY = (this.optsHeight - 100) / this.splitList.length; // 高度差
|
||||
|
||||
for (let i = 0; i < this.splitList.length; i++) {
|
||||
let offsetX = '';
|
||||
if (i == 0) {
|
||||
offsetX = -(opts.width - splitList[0] * scale) / 2;
|
||||
offsetX = -(this.optsWidth - this.splitList[0] * scaleBili) / 2;
|
||||
} else {
|
||||
const dx = (opts.width - (splitList[i] - splitList[i - 1]) * scale) / 2; // 居中计算偏移值
|
||||
offsetX = splitList[i - 1] * scale - dx;
|
||||
const dx = (this.optsWidth - (this.splitList[i] - this.splitList[i - 1]) * scaleBili) / 2; // 居中计算偏移值
|
||||
offsetX = this.splitList[i - 1] * scaleBili - dx;
|
||||
}
|
||||
const offset = opts.offsetList[i] || 0;
|
||||
const param = { scaleRateX: scale, scaleRateY: scale, offsetX: offsetX, offsetY: -screenDifference - (offsetY * i) - offset };
|
||||
const offset = this.optsOffsetList[i] || 0;
|
||||
const param = { scaleRateX: scaleBili, scaleRateY: scaleBili, offsetX: offsetX, offsetY: (-screenDifference - (offsetY * i) - offset) * bili };
|
||||
screenList.push(param);
|
||||
const rect = {x: 0, y: 0, width: Number(splitList[i]) + 5, height: opts.height};
|
||||
const rect = {x: 0, y: 0, width: Number(this.splitList[i]) + 5, height: this.optsHeight};
|
||||
rectList.push(rect);
|
||||
}
|
||||
this.$painter.updateTransform1(screenList, rectList);
|
||||
return {
|
||||
screenList,
|
||||
rectList
|
||||
};
|
||||
}
|
||||
|
||||
setLevelVisible(list) {
|
||||
|
@ -225,6 +225,11 @@ class Painter {
|
||||
this.screenFlag = true;
|
||||
this.$transformHandleScreen.updateTransform(list, opts);
|
||||
}
|
||||
|
||||
updateScreenZoom(bili) {
|
||||
return this.$jmap.calculateScreenPosition(bili);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新zrender尺寸
|
||||
* @param {*} opt
|
||||
|
@ -1,9 +1,24 @@
|
||||
|
||||
import {createTransform1, createBoundingRect} from './utils/parser';
|
||||
|
||||
class TransformHandle {
|
||||
constructor(painter) {
|
||||
this.$painter = painter;
|
||||
|
||||
this.scale = '';
|
||||
this.scaleIndex = 0;
|
||||
this.scaleList = [
|
||||
0.2, 0.4, 0.6, 0.8, 0.9,
|
||||
1, 1.2, 1.4, 1.6, 1.8,
|
||||
2, 2.2, 2.4, 2.6, 2.8,
|
||||
3, 3.2, 3.4, 3.6, 3.8,
|
||||
4, 4.2, 4.4, 4.6, 4.8,
|
||||
5, 5.2, 5.4, 5.6, 5.8,
|
||||
6, 6.2, 6.4, 6.6, 6.8,
|
||||
7, 7.2, 7.4, 7.6, 7.8,
|
||||
8
|
||||
];
|
||||
|
||||
this.parentLevel = painter.getParentLevel();
|
||||
|
||||
this.rect = { x: 0, y: 0, width: 0, height: 0 };
|
||||
@ -79,6 +94,7 @@ class TransformHandle {
|
||||
// 更新偏移量
|
||||
updateTransform(list, rectList) {
|
||||
this.rectList = rectList;
|
||||
// this.scale = list[0].scaleRateX;
|
||||
this.transform = [];
|
||||
list.forEach(item => {
|
||||
this.transform.push(createTransform1(item));
|
||||
@ -87,10 +103,24 @@ class TransformHandle {
|
||||
this.transformAll();
|
||||
}
|
||||
updataOffset(opt) {
|
||||
this.transform.forEach(item => {
|
||||
item[4] = item[4] + opt.dx;
|
||||
item[5] = item[5] + opt.dy;
|
||||
});
|
||||
if (opt.scale) {
|
||||
if (opt.scale <= 0) {
|
||||
this.scaleIndex = this.scaleIndex <= 0 ? 0 : this.scaleIndex - 1;
|
||||
} else {
|
||||
this.scaleIndex = this.scaleIndex >= 40 ? 40 : this.scaleIndex + 1;
|
||||
}
|
||||
const {screenList, rectList} = this.$painter.updateScreenZoom(this.scaleList[this.scaleIndex]);
|
||||
this.rectList = rectList;
|
||||
this.transform = [];
|
||||
screenList.forEach(item => {
|
||||
this.transform.push(createTransform1(item));
|
||||
});
|
||||
} else {
|
||||
this.transform.forEach(item => {
|
||||
item[4] = item[4] + opt.dx;
|
||||
item[5] = item[5] + opt.dy;
|
||||
});
|
||||
}
|
||||
this.transformAll1();
|
||||
}
|
||||
updataOffsetNum(opts) {
|
||||
|
@ -2,10 +2,10 @@ export function getBaseUrl() {
|
||||
let BASE_API;
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// BASE_API = 'https://joylink.club/jlcloud';
|
||||
// BASE_API = 'https://test.joylink.club/jlcloud';
|
||||
BASE_API = 'https://test.joylink.club/jlcloud';
|
||||
// BASE_API = 'http://192.168.8.107:9000'; // 袁琪
|
||||
// BASE_API = 'http://192.168.2.175:9000'; // 旭强 有线
|
||||
BASE_API = 'http://192.168.8.167:9000'; // 旭强 无线
|
||||
// BASE_API = 'http://192.168.8.167:9000'; // 旭强 无线
|
||||
// BASE_API = 'http://192.168.2.183:9000'; // 张赛
|
||||
// BASE_API = 'http://192.168.8.140:9000'; // 杜康
|
||||
// BASE_API = 'http://b29z135112.zicp.vip';
|
||||
|
@ -62,7 +62,7 @@ export default {
|
||||
},
|
||||
'$store.state.map.mapViewLoadedCount':function() {
|
||||
this.$store.dispatch('map/setTrainWindowShow', false);
|
||||
this.$jlmap.off('zoom');
|
||||
// this.$jlmap.off('zoom');
|
||||
this.handleUpdateScreen();
|
||||
if (this.$route.query.group && !this.$route.path.includes('displayIscs')) {
|
||||
this.subscribe();
|
||||
|
@ -101,13 +101,13 @@ export default {
|
||||
{ name: '抵挡图', value: 'iscsDangwei' },
|
||||
{ name: '地变图', value: 'iscsDibian' },
|
||||
{ name: 'PT1', value: 'iscsPt1' },
|
||||
{ name: '受检左侧箭头', value: 'checkArrowLeft' },
|
||||
{ name: '受检右侧箭头', value: 'checkArrowRight' },
|
||||
{ name: '受检两侧箭头', value: 'checkArrowDouble' },
|
||||
{ name: '受检流量累计', value: 'checkFlowCumulative' },
|
||||
{ name: '受检正常', value: 'checkNormal' },
|
||||
{ name: '受检售票', value: 'checkSell' },
|
||||
{ name: '受检售票2', value: 'checkSell2' },
|
||||
{ name: '售检左侧箭头', value: 'checkArrowLeft' },
|
||||
{ name: '售检右侧箭头', value: 'checkArrowRight' },
|
||||
{ name: '售检两侧箭头', value: 'checkArrowDouble' },
|
||||
{ name: '售检流量累计', value: 'checkFlowCumulative' },
|
||||
{ name: '售检正常', value: 'checkNormal' },
|
||||
{ name: '售检售票', value: 'checkSell' },
|
||||
{ name: '售检售票2', value: 'checkSell2' },
|
||||
{ name: '站厅背景', value: 'bgShowRoom' },
|
||||
{ name: '站台背景', value: 'bgStand' },
|
||||
{ name: '站台A端背景', value: 'bgFasPlatformA' },
|
||||
|
@ -103,14 +103,6 @@
|
||||
<div class="buttontext">{{ $t('jlmap3d.removalATP') }}</div>
|
||||
</div>
|
||||
|
||||
<!-- <div id="staymode" class="panebutton2" style="bottom:6%;left:80%;">
|
||||
<img class="buttonimg2" :src="zuoimg" />
|
||||
<img class="buttonimg2" :src="niuimg" :style="{transform:toutransform}" @touchstart='stopmodetouchstart' @touchmove='stopmodetouchmove' @touchend='stopmodetouchend'/>
|
||||
<div class="tfbutton" style="top:25px;left:1px;">{{ $t('jlmap3d.infliction') }}</div>
|
||||
<div class="tfbutton" style="top:8px;left:25px;">{{ $t('jlmap3d.mesoPosition') }}</div>
|
||||
<div class="tfbutton" style="top:25px;left:50px;">{{ $t('jlmap3d.remission') }}</div>
|
||||
<div class="buttontext2">{{ $t('jlmap3d.parkingBrakeMode') }}</div>
|
||||
</div> -->
|
||||
<div id="dropen" class="panebutton" style="bottom:6%;left:45%;" @click="droclick">
|
||||
<img class="buttonimg" :src="redlimg" />
|
||||
<div class="buttontext">{{ $t('jlmap3d.openRightDoor') }}</div>
|
||||
@ -123,14 +115,23 @@
|
||||
<img class="buttonimg" :style="urgestopStyle" :src="urgestopimg" />
|
||||
<div class="buttontext">{{ $t('jlmap3d.emergencyBraking') }}</div>
|
||||
</div>
|
||||
<!-- <div id="doorpick" class="panebutton2" style="bottom:6%;left:85%;">
|
||||
<img class="buttonimg2" :src="zuoimg" />
|
||||
<img class="buttonimg2" :src="niuimg" :style="{transform:doordirecttou}" @touchstart='doordirecttouchstart' @touchmove='doordirecttouchmove' @touchend='doordirecttouchend'/>
|
||||
<div class="tfbutton" style="font-size:1px;top:13px;left:5px;">{{ $t('jlmap3d.leftSide') }}</div>
|
||||
<div class="tfbutton" style="font-size:1px;top:8px;left:33px;">{{ $t('jlmap3d.location0') }}</div>
|
||||
<div class="tfbutton" style="font-size:1px;top:13px;left:50px;">{{ $t('jlmap3d.rightSide') }}</div>
|
||||
<div id="doorpick" class="panebutton2" style="top:6%;left:85%;">
|
||||
<img class="buttonimg2" :src="zuoimg" @mouseout='doorModeOut'/>
|
||||
<img id="doormodeniu" class="buttonimg2" :src="niuimg" :style="{transform:doormodetou}" @mousedown='doormodetouchstart'/>
|
||||
<div class="tfbutton" style="font-size:8px;top:11px;left:18px;">AA</div>
|
||||
<div class="tfbutton" style="font-size:8px;top:8px;left:33px;">AM</div>
|
||||
<div class="tfbutton" style="font-size:8px;top:11px;left:48px;">MM</div>
|
||||
<div class="buttontext2">{{ $t('jlmap3d.doorModel') }}</div>
|
||||
</div>
|
||||
|
||||
<div id="doorpick" class="panebutton2" style="bottom:6%;left:85%;">
|
||||
<img class="buttonimg2" :src="zuoimg" @mouseout='doorSelectionOut'/>
|
||||
<img id="doorpickniu" class="buttonimg2" :src="niuimg" :style="{transform:doordirecttou}" @mousedown='doordirecttouchstart'/>
|
||||
<div class="tfbutton" style="font-size:8px;top:11px;left:18px;">{{ $t('jlmap3d.leftSide') }}</div>
|
||||
<div class="tfbutton" style="font-size:8px;top:8px;left:33px;">{{ $t('jlmap3d.location0') }}</div>
|
||||
<div class="tfbutton" style="font-size:8px;top:11px;left:48px;">{{ $t('jlmap3d.rightSide') }}</div>
|
||||
<div class="buttontext2">{{ $t('jlmap3d.doorSideChoose') }}</div>
|
||||
</div> -->
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
@ -140,7 +141,17 @@
|
||||
<script>
|
||||
import Vue from 'vue';
|
||||
// import { sendSimulationCommand } from '@/api/simulation.js';
|
||||
import { trainSimulationDriveMode, trainSimulationAto ,trainSimulationAtp,trainSimulationChangeHead,trainSimulationDoorControl,trainSimulationEb } from '@/jlmap3d/jl3ddrive/drivecontrol/simulation.js';
|
||||
import {
|
||||
trainSimulationDriveMode,
|
||||
trainSimulationAto ,
|
||||
trainSimulationAtp,
|
||||
trainSimulationChangeHead,
|
||||
trainSimulationDoorControl,
|
||||
trainSimulationEb,
|
||||
trainSimulationDoorSelection,
|
||||
trainSimulationDoorMode
|
||||
} from '@/jlmap3d/jl3ddrive/drivecontrol/simulation.js';
|
||||
|
||||
|
||||
import { JL3D_LOCAL_STATIC } from '@/api/jlmap3d/assets3d.js';
|
||||
|
||||
@ -166,7 +177,7 @@
|
||||
greenimg:JL3D_LOCAL_STATIC+"/jl3d/control/green.png",
|
||||
urgestopimg:JL3D_LOCAL_STATIC+"/jl3d/control/urgestop.png",
|
||||
iconrotate:0,
|
||||
doordirecttou:"rotate(0deg)",
|
||||
doordirecttou:"rotate(415deg)",
|
||||
doormodetou:"rotate(0deg)",
|
||||
watertou:"rotate(0deg)",
|
||||
washtou:"rotate(0deg)",
|
||||
@ -198,6 +209,14 @@
|
||||
jgl:JL3D_LOCAL_STATIC+"/jl3d/control/redz.png",
|
||||
sgd:JL3D_LOCAL_STATIC+"/jl3d/control/greenz.png",
|
||||
jgd:JL3D_LOCAL_STATIC+"/jl3d/control/redz.png",
|
||||
angleoffset: {
|
||||
x: null,
|
||||
y: null
|
||||
},
|
||||
oldDoorMode:"",
|
||||
oldDoorSelection:"",
|
||||
doorModePut:true,
|
||||
doorSelectionPut:true,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@ -253,32 +272,118 @@
|
||||
};
|
||||
setTimeout( callback.bind(this),2000);
|
||||
},
|
||||
stopmodetouchstart:function(e){
|
||||
// let command ={
|
||||
// code:this.traincode,
|
||||
// operation:"607",
|
||||
// type:"07",
|
||||
// param:""
|
||||
// };
|
||||
// command.param = this.touchstate;
|
||||
// sendSimulationCommand(this.group,command).then(netdata => {
|
||||
// if(netdata.data == true){
|
||||
this.touchcontrol = true;
|
||||
// }
|
||||
// });
|
||||
doormodetouchstart:function(e){
|
||||
|
||||
|
||||
let domoffset = document.getElementById("doormodeniu").getBoundingClientRect();
|
||||
// movelimit
|
||||
this.angleoffset.x = domoffset.x;
|
||||
this.angleoffset.y = domoffset.y;
|
||||
|
||||
e.preventDefault();
|
||||
this.doorModePut = true;
|
||||
document.getElementById("doormodeniu").onmousemove = this.doormodetouchmove;
|
||||
document.getElementById("doormodeniu").onmouseup = this.doormodetouchend;
|
||||
|
||||
},
|
||||
stopmodetouchmove:function(e){//finger move 触发
|
||||
if(this.touchcontrol == true){
|
||||
this.getAngle(e.changedTouches[0].clientX,e.changedTouches[0].clientY);
|
||||
}
|
||||
doormodetouchmove:function(e){//finger move 触发
|
||||
this.getModeAngle(e.pageX-this.angleoffset.x ,e.pageY-this.angleoffset.y);
|
||||
|
||||
},
|
||||
stopmodetouchend:function(e){
|
||||
this.touchcontrol = false;
|
||||
doormodetouchend:function(e){
|
||||
document.getElementById("doormodeniu").onmousemove = null;
|
||||
document.getElementById("doormodeniu").onmouseup = null;
|
||||
},
|
||||
getAngle:function(mx,my){
|
||||
doordirecttouchstart:function(e){
|
||||
|
||||
|
||||
let domoffset = document.getElementById("doorpickniu").getBoundingClientRect();
|
||||
// movelimit
|
||||
this.angleoffset.x = domoffset.x;
|
||||
this.angleoffset.y = domoffset.y;
|
||||
|
||||
e.preventDefault();
|
||||
this.doorSelectionPut = true;
|
||||
document.getElementById("doorpickniu").onmousemove = this.doordirecttouchmove;
|
||||
document.getElementById("doorpickniu").onmouseup = this.doordirecttouchend;
|
||||
},
|
||||
doordirecttouchmove:function(e){//finger move 触发
|
||||
this.getDirectAngle(e.pageX-this.angleoffset.x ,e.pageY-this.angleoffset.y);
|
||||
|
||||
},
|
||||
doordirecttouchend:function(e){
|
||||
document.getElementById("doorpickniu").onmousemove = null;
|
||||
document.getElementById("doorpickniu").onmouseup = null;
|
||||
},
|
||||
getModeAngle:function(mx,my){
|
||||
//圆心坐标
|
||||
let px=140;
|
||||
let py=510;
|
||||
// console.log(mx);
|
||||
// console.log(my);
|
||||
let px=30;
|
||||
let py=30;
|
||||
let command ={
|
||||
groupNumber:this.groupNum,
|
||||
doorMode:""
|
||||
};
|
||||
let angle = this.transAngle(px,py,mx,my);
|
||||
if(angle<250 && angle>122){
|
||||
if(angle<160 && angle>122){
|
||||
command.doorMode = "AA";
|
||||
}else if(angle<210 && angle>=160){
|
||||
command.doorMode = "AM";
|
||||
}else if(angle<250 && angle>=210){
|
||||
command.doorMode = "MM";
|
||||
}
|
||||
|
||||
if(this.doorModePut == true && this.oldDoorMode != command.doorMode){
|
||||
this.doorModePut = false;
|
||||
this.oldDoorMode = command.doorMode;
|
||||
trainSimulationDoorMode(this.group,command).then(netdata => {
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
getDirectAngle:function(mx,my){
|
||||
//圆心坐标
|
||||
// console.log(mx);
|
||||
// console.log(my);
|
||||
let px=30;
|
||||
let py=30;
|
||||
let angle = this.transAngle(px,py,mx,my);
|
||||
let command ={
|
||||
groupNumber:this.groupNum,
|
||||
doorSelection:""
|
||||
};
|
||||
if(angle<250 && angle>122){
|
||||
if(angle<160 && angle>122){
|
||||
command.doorSelection = "L";
|
||||
}else if(angle<210 && angle>=160){
|
||||
command.doorSelection = "Z";
|
||||
}else if(angle<250 && angle>=210){
|
||||
command.doorSelection = "R";
|
||||
}
|
||||
if(this.doorSelectionPut == true && this.oldDoorSelection != command.doorSelection ){
|
||||
this.doorSelectionPut = false;
|
||||
this.oldDoorSelection = command.doorSelection;
|
||||
trainSimulationDoorSelection(this.group,command).then(netdata => {
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
doorSelectionOut: function(event){
|
||||
document.getElementById("doorpickniu").onmousemove = null;
|
||||
document.getElementById("doorpickniu").onmouseup = null;
|
||||
},
|
||||
doorModeOut: function(event){
|
||||
document.getElementById("doormodeniu").onmousemove = null;
|
||||
document.getElementById("doormodeniu").onmouseup = null;
|
||||
},
|
||||
transAngle: function(px,py,mx,my){
|
||||
let x = Math.abs(px-mx);
|
||||
let y = Math.abs(py-my);
|
||||
let z = Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
|
||||
@ -309,50 +414,7 @@
|
||||
if(mx<px&&my<py){//鼠标在第二象限
|
||||
angle = 360 - angle;
|
||||
}
|
||||
if(angle<338 && angle>219){
|
||||
|
||||
if(angle<245 && angle>219){
|
||||
this.toutransform = "rotate(305deg)";
|
||||
}else if(angle<295 && angle>245){
|
||||
this.toutransform = "rotate(359deg)";
|
||||
}else if(angle<338 && angle>295){
|
||||
this.toutransform = "rotate(412deg)";
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
doordirecttouchstart:function(e){
|
||||
// let command ={
|
||||
// code:this.traincode,
|
||||
// operation:"607",
|
||||
// type:"07",
|
||||
// param:""
|
||||
// };
|
||||
// command.param = this.touchstate;
|
||||
// sendSimulationCommand(this.group,command).then(netdata => {
|
||||
// if(netdata.data == true){
|
||||
this.touchcontrol = true;
|
||||
// }
|
||||
// });
|
||||
},
|
||||
doordirecttouchmove:function(e){//finger move 触发
|
||||
if(this.touchcontrol == true){
|
||||
let px=230;
|
||||
let py=180;
|
||||
let angle = this.getAngle(px,py,e.changedTouches[0].clientX,e.changedTouches[0].clientY);
|
||||
if(angle<338 && angle>219){
|
||||
if(angle<245 && angle>219){
|
||||
this.doordirecttou = "rotate(305deg)";
|
||||
}else if(angle<295 && angle>245){
|
||||
this.doordirecttou = "rotate(359deg)";
|
||||
}else if(angle<338 && angle>295){
|
||||
this.doordirecttou = "rotate(412deg)";
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
doordirecttouchend:function(e){
|
||||
this.touchcontrol = false;
|
||||
return angle;
|
||||
},
|
||||
sgclink: function (e){
|
||||
//console.log("升弓");
|
||||
@ -441,7 +503,7 @@
|
||||
};
|
||||
trainSimulationDoorControl(this.group,data).then(netdata => {
|
||||
// console.log(netdata);
|
||||
this.doorleftimg = this.greenimg;
|
||||
// this.doorleftimg = this.greenimg;
|
||||
});
|
||||
},
|
||||
|
||||
@ -463,7 +525,7 @@
|
||||
};
|
||||
trainSimulationDoorControl(this.group,data).then(netdata => {
|
||||
// console.log(netdata);
|
||||
this.doorrightimg = this.greenimg;
|
||||
// this.doorrightimg = this.greenimg;
|
||||
});
|
||||
},
|
||||
atoaclick: function (e){
|
||||
@ -485,6 +547,7 @@
|
||||
// console.log(netdata);
|
||||
});
|
||||
},
|
||||
|
||||
updatabuttonlight: function (data){
|
||||
// console.log(data);
|
||||
// if(data.runLevel){
|
||||
@ -495,6 +558,7 @@
|
||||
// this.cbtcbuttonimg = this.greenimg;
|
||||
// }
|
||||
// }
|
||||
// console.log(data);
|
||||
if(data.driveMode){
|
||||
|
||||
// this.driveMode = data.driveMode;
|
||||
@ -524,6 +588,32 @@
|
||||
}
|
||||
}
|
||||
|
||||
if(data.doorMode){
|
||||
this.oldDoorMode = data.doorMode;
|
||||
if(data.doorMode == "AA"){
|
||||
this.doormodetou = "rotate(305deg)";
|
||||
}
|
||||
if(data.doorMode == "AM"){
|
||||
this.doormodetou = "rotate(359deg)";
|
||||
}
|
||||
if(data.doorMode == "MM"){
|
||||
this.doormodetou = "rotate(50deg)";
|
||||
}
|
||||
}
|
||||
|
||||
if(data.doorSelection){
|
||||
this.oldDoorSelection = data.doorSelection;
|
||||
if(data.doorSelection == "R"){
|
||||
this.doordirecttou = "rotate(50deg)";
|
||||
}
|
||||
if(data.doorSelection == "Z"){
|
||||
this.doordirecttou = "rotate(359deg)";
|
||||
}
|
||||
if(data.doorSelection == "L"){
|
||||
this.doordirecttou = "rotate(305deg)";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
}
|
||||
|
@ -237,6 +237,10 @@ export default {
|
||||
// this.updatemmidrivemode(newdata.driveMode);
|
||||
//
|
||||
// this.updatemmiatoatp(newdata.atoOn,newdata.atpOn);
|
||||
if(newdata.doorMode){
|
||||
this.updateM7(newdata.doorMode);
|
||||
}
|
||||
|
||||
if(newdata.nextStation){
|
||||
this.updateMmiNextStation(newdata.nextStation);
|
||||
}
|
||||
@ -359,6 +363,17 @@ export default {
|
||||
this.m4image = this.images.m4['none'];
|
||||
}
|
||||
},
|
||||
updateM7(newdata){
|
||||
if(newdata == "AA"){
|
||||
this.m7image = this.images.m7['aoac'];
|
||||
}
|
||||
if(newdata == "AM"){
|
||||
this.m7image = this.images.m7['aomc'];
|
||||
}
|
||||
if(newdata == "MM"){
|
||||
this.m7image = this.images.m7['momc'];
|
||||
}
|
||||
},
|
||||
updateTiaoting(newdata){
|
||||
|
||||
if(newdata.jump != undefined){
|
||||
|
@ -28,6 +28,18 @@
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="场景特效管理" name="accidentlist" >
|
||||
<div class="progressdiv"
|
||||
v-for="(elementaccident,indexaccident) in accidentlist" :key="elementaccident.label">
|
||||
|
||||
<div class="progressdivtext" >{{elementaccident.label}}</div>
|
||||
<div class="progressassetimg"
|
||||
:style="{'background-image': 'url('+localstatic+'/lesson3d/box.png)'}"/>
|
||||
<div class="delprogressdiv" @click="deleteAccident(elementaccident)" >删除</div>
|
||||
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
||||
</el-tabs>
|
||||
|
||||
</div>
|
||||
@ -44,7 +56,7 @@
|
||||
|
||||
export default {
|
||||
name: 'LessonProgress',
|
||||
props:['lessonData','triggerList'],
|
||||
props:['lessonData','triggerList','accidentlist'],
|
||||
components: {
|
||||
draggable
|
||||
},
|
||||
@ -97,6 +109,9 @@
|
||||
deleteModel(selectedModel){
|
||||
this.$emit('deleteModel',selectedModel);
|
||||
},
|
||||
deleteAccident(selectAccident){
|
||||
this.$emit('deleteAccident',selectAccident);
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
@ -27,6 +27,19 @@
|
||||
</div>
|
||||
</draggable>
|
||||
</el-tab-pane>
|
||||
|
||||
|
||||
<el-tab-pane label="特效资源" name="spritTrigger">
|
||||
<draggable v-model="accidentDataList" group="accidentDataList" @start="drag=true" @end="drag=false" >
|
||||
<div class="progressdiv" v-for="(item,index) in accidentDataList"@dragend="createAccident($event,item,index)">
|
||||
<div class="progressdivimg"
|
||||
:style="{'background-image': 'url('+localstatic+'/lesson3d/box.png)'}"/>
|
||||
<div class="progressdivtext">{{item.name}}</div>
|
||||
|
||||
</div>
|
||||
</draggable>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="图片资源列表" name="picasset">
|
||||
|
||||
<el-tabs v-model="activeName" class="activediv" type="card" @tab-click="handleClick" >
|
||||
@ -82,6 +95,7 @@
|
||||
activeName: 'lessoncomponent',
|
||||
lessonAssetList:[],
|
||||
picAssetList:[],
|
||||
accidentDataList:[],
|
||||
triggerList:[
|
||||
{},
|
||||
{},
|
||||
@ -98,6 +112,7 @@
|
||||
|
||||
},
|
||||
mounted() {
|
||||
window.jl3dUpdateAccidentData = this.jl3dUpdateAccidentData;
|
||||
this.localstatic = JL3D_LOCAL_STATIC;
|
||||
console.log(this.localstatic);
|
||||
getMap3dModelData("三维课程").then(netdata => {
|
||||
@ -147,7 +162,13 @@
|
||||
// console.log(event);
|
||||
this.$emit('createModel',item,{x:event.clientX,y:event.clientY});
|
||||
},
|
||||
createAccident(event,item, index){
|
||||
|
||||
this.$emit('createAccident',item.type,{x:event.clientX,y:event.clientY});
|
||||
},
|
||||
jl3dUpdateAccidentData(accidentData){
|
||||
this.accidentDataList = accidentData;
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
|
@ -216,11 +216,12 @@
|
||||
<!-- <el-button @click="updateData">保存修改</el-button> -->
|
||||
</el-form>
|
||||
|
||||
<el-form ref="form" class="camerapropertydiv" label-width="130px" size="mini" v-if="selectType == 'modelproperty'">
|
||||
<el-form ref="form" class="camerapropertydiv" v-if="selectType == 'modelproperty'">
|
||||
<el-form-item label="模型名称:" v-if="selected.label">
|
||||
<el-input v-model="selected.label" ></el-input>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-select v-model="selected.visible" >
|
||||
<el-option label="显示" :value=true></el-option>
|
||||
<el-option label="隐藏" :value=false></el-option>
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
<LessonTools-Manager
|
||||
@createModel='createModel'
|
||||
@createAccident='createAccident'
|
||||
:lessonTools='lessonTools'
|
||||
></LessonTools-Manager>
|
||||
|
||||
@ -62,11 +63,13 @@
|
||||
<Lesson-Progress
|
||||
:lessonData='lessonData'
|
||||
:triggerList='triggerList'
|
||||
:accidentlist='accidentlist'
|
||||
@addProgress="addProgress"
|
||||
@changeProgressView="changeProgressView"
|
||||
@removeProgress="removeProgress"
|
||||
@selectModel="selectModel"
|
||||
@deleteModel="deleteModel"
|
||||
@deleteAccident="deleteAccident"
|
||||
>
|
||||
</Lesson-Progress>
|
||||
|
||||
@ -163,6 +166,7 @@
|
||||
data:{},
|
||||
},
|
||||
triggerList:[],
|
||||
accidentlist:[],
|
||||
lessonData:{
|
||||
lessonData:{
|
||||
lessonProgress:[
|
||||
@ -209,6 +213,7 @@
|
||||
},
|
||||
mounted() {
|
||||
window.updateTriggerList = this.updateTriggerList;
|
||||
window.jl3dUpdateAccidentlist = this.jl3dUpdateAccidentlist;
|
||||
window.editAction = this.editAction;
|
||||
|
||||
this.init(this.$route.query.lessonId);
|
||||
@ -257,6 +262,11 @@
|
||||
let assetModelData = this.jl3d.saveAssetModel();
|
||||
saveData.assetList = assetModelData.assetList;
|
||||
saveData.modelList = assetModelData.modelList;
|
||||
|
||||
let accidentData = this.jl3d.saveAccidentModel();
|
||||
|
||||
saveData.accidentList = accidentData;
|
||||
|
||||
saveData.setup.examMode = this.examMode;
|
||||
saveData.setup.checkedRole = this.checkedRole;
|
||||
this.netData.data = JSON.stringify(saveData);
|
||||
@ -291,6 +301,9 @@
|
||||
deleteModel(selectedModel){
|
||||
this.jl3d.deleteModel(selectedModel);
|
||||
},
|
||||
deleteAccident(selectedAccident){
|
||||
this.jl3d.deleteAccident(selectedAccident);
|
||||
},
|
||||
setupclick(){
|
||||
|
||||
this.showSetup = true;
|
||||
@ -298,11 +311,16 @@
|
||||
createModel(assetData,mousePos){
|
||||
this.jl3d.createModelTrigger(assetData,mousePos);
|
||||
},
|
||||
|
||||
createAccident(accidentData,mousePos){
|
||||
this.jl3d.createAccident(accidentData,mousePos);
|
||||
},
|
||||
updateTriggerList(newTriggerList){
|
||||
this.triggerList = newTriggerList;
|
||||
console.log(this.triggerList);
|
||||
},
|
||||
jl3dUpdateAccidentlist(newAccidentlist){
|
||||
this.accidentlist = newAccidentlist;
|
||||
},
|
||||
editAction(type,value1,value2){
|
||||
this.jl3d.editActionManager(type,value1,value2);
|
||||
},
|
||||
|
@ -45,22 +45,23 @@
|
||||
<Step-Tips
|
||||
:lessonData='lessonData'
|
||||
:lessonPlayIndex='lessonPlayIndex'
|
||||
v-show="lessonTools[0].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'">
|
||||
:nowRole ='nowRole'
|
||||
v-show="lessonTools[0].isShow"
|
||||
@jumpEvent="jumpEvent">
|
||||
</Step-Tips>
|
||||
|
||||
<Process-Log
|
||||
:lessonData='lessonData'
|
||||
:lessonPlayIndex='lessonPlayIndex'
|
||||
ref="processlog"
|
||||
v-show="lessonTools[1].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'">
|
||||
v-show="lessonTools[1].isShow">
|
||||
</Process-Log>
|
||||
|
||||
<Explain-Pane
|
||||
:lessonData='lessonData'
|
||||
:lessonPlayIndex='lessonPlayIndex'
|
||||
:nowRole ='nowRole'
|
||||
v-show="lessonTools[2].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'"
|
||||
@jumpEvent="jumpEvent">
|
||||
v-show="lessonTools[2].isShow && !examMode"
|
||||
>
|
||||
</Explain-Pane>
|
||||
|
||||
<Job-Pane
|
||||
@ -69,11 +70,11 @@
|
||||
:lessonPlayIndex='lessonPlayIndex'
|
||||
:nowRole='nowRole'
|
||||
ref="jobpane"
|
||||
v-show="lessonTools[3].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'">
|
||||
v-show="lessonTools[3].isShow">
|
||||
</Job-Pane>
|
||||
|
||||
<Tool-Bar
|
||||
v-show="lessonTools[4].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'"
|
||||
v-show="lessonTools[4].isShow "
|
||||
@changeCameraPos="changeCameraPos">
|
||||
</Tool-Bar>
|
||||
|
||||
@ -273,7 +274,7 @@
|
||||
this.selectJobList = loadData.setup.checkedRole;
|
||||
this.jobPaneData.dataList = loadData.toolJobPane;
|
||||
this.$refs.jobpane.initJobList(this.jobPaneData.dataList);
|
||||
|
||||
console.log(loadData.lessonTools);
|
||||
this.lessonTools = loadData.lessonTools;
|
||||
this.lessonData.loadLessonProgress(loadData.lessonProgress);
|
||||
|
||||
|
@ -3,19 +3,16 @@
|
||||
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex]"
|
||||
|
||||
:style="{'background-image': 'url('+lessonbg+')'}">
|
||||
<!-- <div class="explainpanetittle" >
|
||||
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.tittle}}
|
||||
</div> -->
|
||||
<div class="explainpanepic" :style="{'background-image': 'url('+localStatic+lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.picurl+')'}" >
|
||||
<div class="explainpanetittle" >
|
||||
操作提示
|
||||
</div>
|
||||
<div v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.picurl != 'url'" class="explainpanepic" :style="{'background-image': 'url('+localStatic+lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.picurl+')'}" >
|
||||
|
||||
</div>
|
||||
<div class="explainpanetext" >
|
||||
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.text}}
|
||||
</div>
|
||||
<div class="nextbuttondiv"
|
||||
:style="{'background-image': 'url('+staticImg+'/lesson3d/nextbutton.png)'}"
|
||||
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.explainPaneType=='jump'|| (lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.explainPaneType == 'limitjump' && !(lessonData.lessonData.lessonProgress[lessonPlayIndex].roleName == nowRole)) "
|
||||
@click="explainJump"></div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
@ -26,7 +23,7 @@
|
||||
|
||||
export default {
|
||||
name: 'ExplainPane',
|
||||
props:['lessonData','lessonPlayIndex','nowRole'],
|
||||
props:['lessonData','lessonPlayIndex'],
|
||||
components: {
|
||||
|
||||
},
|
||||
@ -53,12 +50,7 @@
|
||||
// selectTool(){
|
||||
// lesson3dSelect('toolproperty','explainpane');
|
||||
// },
|
||||
explainJump(){
|
||||
|
||||
if(this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.explainPaneType == "jump" || (this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.explainPaneType == "limitjump")){
|
||||
this.$emit('jumpEvent','jump',this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane);
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
|
@ -54,9 +54,10 @@
|
||||
handler: function (newVal, oldVal) {
|
||||
|
||||
if (newVal != oldVal) {
|
||||
this.logTexts.push(this.lessonData.lessonData.lessonProgress[oldVal].stepTipsData);
|
||||
this.processTexts.push(this.lessonData.lessonData.lessonProgress[oldVal].stepTipsData);
|
||||
this.nowProcessText = this.lessonData.lessonData.lessonProgress[newVal].stepTipsData.text;
|
||||
console.log(this.lessonData.lessonData.lessonProgress[oldVal]);
|
||||
this.logTexts.push(this.lessonData.lessonData.lessonProgress[oldVal].explainPane);
|
||||
this.processTexts.push(this.lessonData.lessonData.lessonProgress[oldVal].explainPane);
|
||||
this.nowProcessText = this.lessonData.lessonData.lessonProgress[newVal].explainPane.text;
|
||||
var div1 = document.getElementById('tabdiv1');
|
||||
// div.scrollIntoView();
|
||||
div1.scrollTop = div1.scrollHeight;
|
||||
@ -75,7 +76,7 @@
|
||||
},
|
||||
methods: {
|
||||
startLog(){
|
||||
this.nowProcessText = this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].stepTipsData.text;
|
||||
this.nowProcessText = this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.text;
|
||||
},
|
||||
|
||||
},
|
||||
|
@ -1,14 +1,18 @@
|
||||
<template>
|
||||
<div class="stepstipsdiv"
|
||||
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex]"
|
||||
@click="selectTool"
|
||||
:style="{'background-image': 'url('+lessonbg+')'}">
|
||||
<div class="stepstipstittle" >
|
||||
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].stepTipsData.tittle}}
|
||||
当前情况
|
||||
<!-- {{lessonData.lessonData.lessonProgress[lessonPlayIndex].stepTipsData.tittle}} -->
|
||||
</div>
|
||||
<div class="stepstipstext" >
|
||||
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].stepTipsData.text}}
|
||||
</div>
|
||||
<div class="nextbuttondiv"
|
||||
:style="{'background-image': 'url('+staticImg+'/lesson3d/nextbutton.png)'}"
|
||||
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.explainPaneType=='jump'|| (lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.explainPaneType == 'limitjump' && !(lessonData.lessonData.lessonProgress[lessonPlayIndex].roleName == nowRole)) "
|
||||
@click="explainJump"></div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
@ -18,13 +22,14 @@
|
||||
//步骤提示
|
||||
export default {
|
||||
name: 'StepTips',
|
||||
props:['lessonData','lessonPlayIndex'],
|
||||
props:['lessonData','lessonPlayIndex','nowRole'],
|
||||
components: {
|
||||
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
lessonbg:JL3D_LOCAL_STATIC+"/lesson3d/lessonbg.png",
|
||||
staticImg:JL3D_LOCAL_STATIC,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -41,10 +46,12 @@
|
||||
},
|
||||
methods: {
|
||||
|
||||
selectTool(){
|
||||
lesson3dSelect('toolproperty','stepTips');
|
||||
},
|
||||
explainJump(){
|
||||
|
||||
if(this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.explainPaneType == "jump" || (this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.explainPaneType == "limitjump")){
|
||||
this.$emit('jumpEvent','jump',this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
@ -76,5 +83,13 @@
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.nextbuttondiv{
|
||||
width:30px;
|
||||
height:30px;
|
||||
background-size: 100%;
|
||||
position: absolute;
|
||||
right:0;
|
||||
bottom:0;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@ -1,10 +1,10 @@
|
||||
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
|
||||
# File Created: 23.08.2021 10:51:05
|
||||
# File Created: 02.09.2021 15:20:35
|
||||
|
||||
mtllib OCCpengzhuang.mtl
|
||||
mtllib OCCpengzhuang0902.mtl
|
||||
|
||||
#
|
||||
# object occpengzhuang
|
||||
# object Object2667
|
||||
#
|
||||
|
||||
v 18.8555 11.4708 3.7985
|
||||
@ -784,7 +784,7 @@ vt 0.4688 0.5903 0.0000
|
||||
vt 0.4068 0.6711 0.0000
|
||||
# 180 texture coords
|
||||
|
||||
g occpengzhuang
|
||||
g Object2667
|
||||
usemtl 06___Default
|
||||
s 2
|
||||
f 1/1/1 2/2/1 3/3/1 4/4/1
|
||||
|