Selaa lähdekoodia

feat:车辆功能完善

zouwuqiang 1 vuosi sitten
vanhempi
commit
d8254a94aa

+ 6 - 11
assets/script/game/account/bll/AccountInit.ts

@@ -18,11 +18,15 @@ export class AccountInitSystem extends ecs.ComblockSystem implements ecs.IEntity
     }
 
     entityEnter(e: Account): void {
-
-        const data =
+        let data =
         {
             lv: 1,
         }
+        const localData = oops.storage.get("account")
+        if (localData) {
+            data.lv = Number(localData)
+        }
+
         this.createLevel(e, data);
         e.remove(AccountInitComp);
     }
@@ -34,15 +38,6 @@ export class AccountInitSystem extends ecs.ComblockSystem implements ecs.IEntity
         // 关卡等级数据
         level.upgrade(data.lv);
 
-
-        // 关卡数据
-        level.CheckpointModel.vmAdd();
-
-        // 关卡等级数据
-        level.CheckpointModelLevel.vmAdd();
-
-        // 添加关卡到场景
-        level.load(oops.game.root, v3(0, 0, 0));
         e.checkpoint = level;
         e.addChild(level)
     }

+ 36 - 4
assets/script/game/checkpoint/bll/InitCheckpoint.ts

@@ -13,6 +13,9 @@ import { Puppet } from "../../puppet/puppet";
 import { PuppetModelComp } from "../../puppet/model/PuppetModelComp";
 import { ObstacleModelComp } from "../../obstacle/model/ObstacleModelComp";
 import { PathFindComp } from "../../common/ecs/path/PathFind";
+import { oops } from "../../../../../extensions/oops-plugin-framework/assets/core/Oops";
+import { Vehicle } from "../../vehicle/Vehicle";
+import { VehicleModelComp } from "../../vehicle/model/VehicleModelComp";
 
 /** 初始化游戏公共资源 */
 @ecs.register('InitCheckpoint')
@@ -27,13 +30,30 @@ export class InitCheckpointSystem extends ecs.ComblockSystem implements ecs.IEnt
 
     entityEnter(e: Checkpoint): void {
         const levelConfig = e.get(CheckpointModelLevelComp)?.rtluCurrent
-        const { gridCount, levelColor, peopleCount, levelObstacle, obstacleCount } = levelConfig
+        const { gridCount, levelColor, peopleCount, levelObstacle, obstacleCount, stationCount } = levelConfig
 
+        this.resetCheckpoint(e)
+
+        // 关卡数据
+        e.CheckpointModel.vmAdd();
+
+        // 添加关卡到场景
+        e.load(oops.game.root, v3(0, 0, 0));
         this.createGrid(e, gridCount, gridCount, levelColor, levelObstacle, peopleCount, obstacleCount)
-        this.createStation(e, levelConfig.stationCount)
+        this.createStation(e, stationCount)
+        this.createVehicle(e, peopleCount,levelColor)
         e.remove(InitCheckpointComp)
     }
 
+    resetCheckpoint(e: Checkpoint) {
+        e.remove(CheckpointViewComp);
+        e.add(CheckpointModelComp, true)
+        e.children.forEach(child => {
+            e.removeChild(child);
+            child.destroy();
+        });
+    }
+
     // 生成棋盘相关
     createGrid(e: Checkpoint, row: number, col: number, colors: string[], obstacles: number[], peopleCount: number, obstacleCount: number) {
         const checkpoint_root = e.get(CheckpointViewComp).node
@@ -126,8 +146,20 @@ export class InitCheckpointSystem extends ecs.ComblockSystem implements ecs.IEnt
     }
 
     // 生成交通工具
-    createVehicle(e: Checkpoint) {
-
+    createVehicle(e: Checkpoint, peopleCount: number, colors: string[]) {
+        const checkpoint_root = e.get(CheckpointViewComp).node
+        const checkpoint_model = e.get(CheckpointModelComp)
+        const start_point = v3(0, 0, -5)
+        const vechicleCount = Math.ceil(peopleCount / 3)
+        for (let index = 0; index < vechicleCount; index++) {
+            const vehicle = ecs.getEntity<Vehicle>(Vehicle);
+            const vehicleModel = vehicle.get(VehicleModelComp)
+            vehicleModel.color = colors[index % 3]
+            // 添加车到场景
+            vehicle.load(checkpoint_root, vehicleModel.color, start_point);
+            e.addChild(vehicle)
+            checkpoint_model.vehicles.push(vehicle)
+        }
     }
 
     // 生成人物

+ 5 - 1
assets/script/game/checkpoint/model/CheckpointModel.ts

@@ -82,11 +82,15 @@ export class CheckpointModelComp extends ecs.Comp {
     }
 
     vmRemove() {
-        this.vm.reset();
         VM.remove("Checkpoint");
     }
 
     reset() {
+        this.grids = []
+        this.path_grid = []
+        this.cells = []
+        this.stations = []
+        this.vehicles = []
         this.vmRemove();
     }
 }

+ 1 - 1
assets/script/game/common/ecs/path/MoveToPath.ts

@@ -89,7 +89,7 @@ export class MoveToPathSystem extends ecs.ComblockSystem<ecs.Entity> implements
             let trans = Vec3Util.mul(move.velocity, move.speed * this.dt);
             let start = move.ns == Node.NodeSpace.WORLD ? move.node.worldPosition : move.node.position;
             let end = Vec3Util.add(start, trans)
-            if (Vec3Util.sub(end, mtv.start).length() > mtv.distance) {
+            if (Vec3Util.sub(end, mtv.start).length() > mtv.distance||mtv.timer.update(this.dt)) {
                 this.finishMovement(e, move, mtv);
                 mtv.isComplete = true
             } else {

+ 33 - 3
assets/script/game/vehicle/Vehicle.ts

@@ -1,4 +1,4 @@
-import { Vec3, Node } from "cc";
+import { Vec3, Node, MeshRenderer, RenderableComponent, Color } from "cc";
 import { ViewUtil } from "../../../../extensions/oops-plugin-framework/assets/core/utils/ViewUtil";
 import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
 import { VehicleModelComp } from "./model/VehicleModelComp";
@@ -26,9 +26,39 @@ export class Vehicle extends ecs.Entity {
         super.destroy();
     }
 
-    /** 加载关卡显示对象(cc.Component在创建后,添加到ECS框架中,使实体上任何一个ECS组件都可以通过 ECS API 获取到视图层对象 */
-    load(parent: Node, pos: Vec3 = Vec3.ZERO) {
+    /** 加载车辆显示对象(cc.Component在创建后,添加到ECS框架中,使实体上任何一个ECS组件都可以通过 ECS API 获取到视图层对象 */
+    load(parent: Node,color:string,pos: Vec3 = Vec3.ZERO) {
         var node = ViewUtil.createPrefabNode("game/prefab/car");
+          // 获取MeshRenderer组件
+          let rendererComponet = node.getComponentInChildren(MeshRenderer) as RenderableComponent
+          debugger
+          if (rendererComponet) {
+              // 获取材质实例
+              let materialIns = rendererComponet.material
+  
+              if (materialIns) {
+                  // 修改材质实例的颜色
+  
+                  let colorStr;
+                  switch (color.toLowerCase()) {
+                      case "red":
+                          colorStr = Color.RED;
+                          break;
+                      case "blue":
+                          colorStr = Color.BLUE;
+                          break;
+                      case "yellow":
+                          colorStr = Color.YELLOW;
+                          break;
+                      default:
+                          colorStr = Color.WHITE; // 默认颜色
+                  }
+  
+                  materialIns.setProperty('mainColor', colorStr);
+  
+                  rendererComponet.material = materialIns
+              }
+          }
         var mv = node.getComponent(VehicleViewComp)!;
         this.add(mv);
         node.parent = parent;