Pārlūkot izejas kodu

add finish message

xyh 1 gadu atpakaļ
vecāks
revīzija
19c2b2f96a
1 mainītis faili ar 99 papildinājumiem un 45 dzēšanām
  1. 99 45
      src/views/simulation/index.vue

+ 99 - 45
src/views/simulation/index.vue

@@ -48,6 +48,18 @@
       </div>
     </el-row>
     <!-- <TimeLine :showLayers="showLayers" :timeDataArray="timeDataArray" class="TimeLine"></TimeLine> -->
+    <div>
+      <el-dialog title="模拟消息列表" :visible.sync="dialogVisible" width="50%">
+        <el-table :data="messageList">
+          <el-table-column label="序号" prop="order" width="50px"></el-table-column>
+          <el-table-column label="时间" align="center" prop="time"></el-table-column>
+          <el-table-column label="消息" align="center" prop="context"></el-table-column>
+        </el-table>
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="dialogVisible = false">关闭</el-button>
+        </div>
+      </el-dialog>
+    </div>
   </div>
 </template>
 <script>
@@ -58,7 +70,6 @@ import axios from "axios";
 import satelliteModel from 'public/static/model/satelite1.glb';
 import TimeLine from '@/components/TimeLine/index.vue';
 import missileModel from 'public/static/model/basic_missle.glb';
-import thaadModel from 'public/static/model/anti-aircraft_gun_fire_control_radar_vehicle.glb';
 import centerModel from 'public/static/model/the_white_house.glb';
 import radarModel from 'public/static/model/radar.glb'
 import { mapGetters } from "vuex";
@@ -75,19 +86,21 @@ export default {
   data() {
     return {
       save: false,
-      messageList:[],
+      messageList: [],
       situation: [],
       nameIdList: [],
       satelliteRange: [],
-      missileList:{},
-      thaadList:{},
+      missileList: {},
+      thaadList: {},
       websocket: null,
+      centerPosition: null,
       leftwidth: 12,
       unit: [],
+      dialogVisible: false,
       satellite: [],
       center: [],
       move_data: {},
-      order : 1,
+      order: 1,
       _viewer2D: null,
       _viewer3D: null,
       mousevalue: null,
@@ -152,7 +165,7 @@ export default {
       this.order = 1;
       this.messageList = [];
       this.nameIdList = [];
-     this.satelliteRange = [];
+      this.satelliteRange = [];
       this.missileList = {};
       this.thaadList = {};
       let redunit = [];
@@ -574,6 +587,7 @@ export default {
       else if (type == 'center') {
         color = 'Blue'
         modelUrl = centerModel
+        this.centerPosition = position
       }
       else if (type == 'satelite') {
         color = 'Blue'
@@ -774,8 +788,8 @@ export default {
       this.$data._viewer2D.clock.clockRange = this.Cesium.ClockRange.LOOP_STOP;
       this.$data._viewer3D.clock.clockRange = this.Cesium.ClockRange.LOOP_STOP;
       this.messageList.push({
-        order : this.order++,
-        time : startTime,
+        order: this.order++,
+        time: startTime,
         context: "开始模拟!!!"
       })
       this.$data._viewer2D.clock.onTick.addEventListener(clock => {
@@ -947,27 +961,28 @@ export default {
               this.modelEntityMoveByIDAndLocation(this.$data._viewer2D, this.nameIdList[i].id, data[this.nameIdList[i].name].x, data[this.nameIdList[i].name].y, data[this.nameIdList[i].name].z)
             }
           }
-          for(let i = 0; i < this.nameIdList.length; i++) {
-            if (this.thaadList[this.nameIdList[i].name] != null || this.thaadList[this.nameIdList[i].name] != undefined){
+          for (let i = 0; i < this.nameIdList.length; i++) {
+            if (this.thaadList[this.nameIdList[i].name] != null || this.thaadList[this.nameIdList[i].name] != undefined) {
               //查看在雷达原侦察范围内有几颗导弹
-              let missileNum = this.howManyMissile(this.$data._viewer2D,this.thaadList[this.nameIdList[i].name].id,this.nameIdList[i].name)
+              let missileNum = this.howManyMissile(this.$data._viewer2D, this.thaadList[this.nameIdList[i].name].id, this.nameIdList[i].name)
               let health = 100.0
-              for(let j=0;j<missileNum;j++){
-                health = health*0.8
+              for (let j = 0; j < missileNum; j++) {
+                health = health * 0.8
               }
-              if(this.thaadList[this.nameIdList[i].name].health != health){
+              if (this.thaadList[this.nameIdList[i].name].health != health) {
                 //修改健康值并修改范围
                 let mark = true
-                if(health>this.thaadList[this.nameIdList[i].name].health)
-                {
+                if (health > this.thaadList[this.nameIdList[i].name].health) {
                   mark = false
                 }
                 this.thaadList[this.nameIdList[i].name].health = health
-                this.changeRange(this.$data._viewer2D,this.thaadList[this.nameIdList[i].name].id,this.thaadList[this.nameIdList[i].name].range,this.thaadList[this.nameIdList[i].name].health,newTimeString,this.nameIdList[i].name,mark)
+                this.changeRange(this.$data._viewer2D, this.thaadList[this.nameIdList[i].name].id, this.thaadList[this.nameIdList[i].name].range, this.thaadList[this.nameIdList[i].name].health, newTimeString, this.nameIdList[i].name, mark)
               }
             }
           }
-          this.judgeMissile(this.$data._viewer2D,newTimeString);
+          this.judgeMissile(this.$data._viewer2D, newTimeString);
+          //判断攻防是否结束
+          this.ifFinish(this.$data._viewer2D, newTimeString)
           //更新模型位置
           // this.modelEntityMoveByIDAndLocation(this.$data._viewer2D,"1654426964397658112",res.data[1].data.W1.x,res.data[1].data.W1.y,res.data[1].data.W1.z)
         })
@@ -991,30 +1006,36 @@ export default {
               this.modelEntityMoveByIDAndLocation(this.$data._viewer3D, this.nameIdList[i].id, data[this.nameIdList[i].name].x, data[this.nameIdList[i].name].y, data[this.nameIdList[i].name].z)
             }
           }
-          for(let i = 0; i < this.nameIdList.length; i++) {
-            if (this.thaadList[this.nameIdList[i].name] != null || this.thaadList[this.nameIdList[i].name] != undefined){
+          for (let i = 0; i < this.nameIdList.length; i++) {
+            if (this.thaadList[this.nameIdList[i].name] != null || this.thaadList[this.nameIdList[i].name] != undefined) {
               //查看在雷达原侦察范围内有几颗导弹
-              let missileNum = this.howManyMissile(this.$data._viewer3D,this.thaadList[this.nameIdList[i].name].id,this.nameIdList[i].name)
+              let missileNum = this.howManyMissile(this.$data._viewer3D, this.thaadList[this.nameIdList[i].name].id, this.nameIdList[i].name)
               let health = 100.0
               //变化健康值
-              for(let j=0;j<missileNum;j++){
-                health = health*0.8
+              for (let j = 0; j < missileNum; j++) {
+                health = health * 0.8
               }
-              if(this.thaadList[this.nameIdList[i].name].health != health){
+              if (this.thaadList[this.nameIdList[i].name].health != health) {
                 //修改健康值并修改范围
                 let mark = true
-                if(health>this.thaadList[this.nameIdList[i].name].health)
-                {
+                if (health > this.thaadList[this.nameIdList[i].name].health) {
                   mark = false
                 }
                 this.thaadList[this.nameIdList[i].name].health = health
-                this.changeRange(this.$data._viewer3D,this.thaadList[this.nameIdList[i].name].id,this.thaadList[this.nameIdList[i].name].range,this.thaadList[this.nameIdList[i].name].health,newTimeString,this.nameIdList[i].name,mark)
+                this.changeRange(this.$data._viewer3D, this.thaadList[this.nameIdList[i].name].id, this.thaadList[this.nameIdList[i].name].range, this.thaadList[this.nameIdList[i].name].health, newTimeString, this.nameIdList[i].name, mark)
               }
-              
+
             }
           }
           //判断是否有导弹被拦截
-          this.judgeMissile(this.$data._viewer3D,newTimeString);
+          this.judgeMissile(this.$data._viewer3D, newTimeString);
+          //判断攻防是否结束
+          if (this.ifFinish(this.$data._viewer3D, newTimeString)) {
+            // 停止时间轴动画
+            this.$data._viewer3D.clock.shouldAnimate = false;
+
+          }
+
           //更新模型位置
           //  this.modelEntityMoveByIDAndLocation(this.$data._viewer3D,viewer,"1654426964397658112",res.data[1].data.W1.x,res.data[1].data.W1.y,res.data[1].data.W1.z)  
         })
@@ -1055,31 +1076,31 @@ export default {
       this.markSatelliteLine(oldPosition, position, 'Blue', viewer)
     },
     //计算有多少个导弹进入了雷达的原始范围
-    howManyMissile(viewer,id,name){
+    howManyMissile(viewer, id, name) {
       let radar = viewer.entities.getById(id)
       let radarPos = radar.position._value
       let num = 0
-      for(let key in this.missileList){
+      for (let key in this.missileList) {
         let missilePos = viewer.entities.getById(this.missileList[key].id).position._value
-        if(this.Cesium.Cartesian3.distance(radarPos,missilePos)<=this.thaadList[name].range){//距离小于range
+        if (this.Cesium.Cartesian3.distance(radarPos, missilePos) <= this.thaadList[name].range) {//距离小于range
           num++
         }
       }
       return num;
     },
     //判断导弹是否被拦截
-    judgeMissile(viewer,time){
-      for(let key in this.missileList){
+    judgeMissile(viewer, time) {
+      for (let key in this.missileList) {
         let missile = viewer.entities.getById(this.missileList[key].id)
         let missilePos = viewer.entities.getById(this.missileList[key].id).position._value
-        for(let item in this.thaadList){
+        for (let item in this.thaadList) {
           let radarPos = viewer.entities.getById(this.thaadList[item].id).position._value
-          if(this.Cesium.Cartesian3.distance(radarPos,missilePos)<=this.thaadList[item].range*this.thaadList[item].health*0.01){
+          if (this.Cesium.Cartesian3.distance(radarPos, missilePos) <= this.thaadList[item].range * this.thaadList[item].health * 0.01) {
             // 导弹进入了被干扰后的雷达探测范围,判断被拦截 移除实体,删除信息
             this.messageList.push({
-              order : this.order++,
+              order: this.order++,
               time: time,
-              context : '导弹'+key+'被雷达'+item+'拦截!!!'
+              context: '导弹' + key + '被雷达' + item + '拦截!!!'
             })
             viewer.entities.remove(missile)
             this.nameIdList = this.nameIdList.filter(item => item.id !== this.missileList[key].id);
@@ -1090,19 +1111,52 @@ export default {
       }
     },
     //修改雷达的显示范围
-    changeRange(viewer,id,range,health,time,name,mark){
-      let context = '雷达'+name+'受到干扰!健康值变化为: '+health
-      if(!mark){
-        context = '雷达'+name+'恢复健康值,健康值变化为: '+health
+    changeRange(viewer, id, range, health, time, name, mark) {
+      let context = '雷达' + name + '受到干扰!健康值变化为: ' + health
+      if (!mark) {
+        context = '雷达' + name + '恢复健康值,健康值变化为: ' + health
       }
       this.messageList.push({
-        order : this.order++,
-        time : time,
+        order: this.order++,
+        time: time,
         context: context
       })
       let radar = viewer.entities.getById(id)
-      let newRange = range*health*0.01
+      let newRange = range * health * 0.01
       radar.ellipsoid.radii = new this.Cesium.Cartesian3(newRange, newRange, newRange);
+    },
+    isObjectEmpty(obj) {
+  for (let key in obj) {
+    if (obj.hasOwnProperty(key)) {
+      return false; // 如果对象有任何属性,返回 false
+    }
+  }
+  return true; // 如果对象没有任何属性,返回 true
+},
+    //判断攻防是否完成
+    ifFinish(viewer, time) {
+      if (this.isObjectEmpty(this.missileList)) {
+        this.messageList.push({
+          order: this.order,
+          time: time,
+          context: '全部导弹被拦截,红方进攻失败,蓝方防守成功!!!'
+        })
+        return true
+      }
+      else {
+        for (let key in this.missileList) {
+          let missilePos = viewer.entities.getById(this.messageList[key].id).position._value
+          if (this.Cesium.Cartesian3.distance(this.centerPosition, missilePos) <= 100) {
+            this.messageList.push({
+              order: this.order,
+              time: time,
+              context: '导弹' + key + '成功摧毁蓝方指挥中心!!!'
+            })
+            return true
+          }
+        }
+      }
+      return false
     }
 
   }