Browse Source

Merge pull request #7447 from CedricGuillemet/navTeleportAgentParams

recastjs update with agent parameters update and teleport
David Catuhe 5 years ago
parent
commit
7cd366c591

File diff suppressed because it is too large
+ 24 - 9
dist/preview release/recast.js


+ 14 - 0
src/Navigation/INavigationEngine.ts

@@ -146,6 +146,20 @@ export interface ICrowd {
     agentGoto(index: number, destination: Vector3): void;
 
     /**
+     * Teleport the agent to a new position
+     * @param index agent index returned by addAgent
+     * @param destination targeted world position
+     */
+    agentTeleport(index: number, destination: Vector3): void;
+
+    /**
+     * Update agent parameters
+     * @param index agent index returned by addAgent
+     * @param parameters agent parameters
+     */
+    updateAgentParameters(index: number, parameters: IAgentParameters): void;
+
+    /**
      * Set the Bounding box extent for doing spatial queries (getClosestPoint, getRandomPointAround, ...)
      * The queries will try to find a solution within those bounds
      * default is (1,1,1)

+ 42 - 0
src/Navigation/Plugins/recastJSPlugin.ts

@@ -368,6 +368,48 @@ export class RecastJSCrowd implements ICrowd {
     }
 
     /**
+     * Teleport the agent to a new position
+     * @param index agent index returned by addAgent
+     * @param destination targeted world position
+     */
+    agentTeleport(index: number, destination: Vector3): void {
+        this.recastCrowd.agentTeleport(index, new this.bjsRECASTPlugin.bjsRECAST.Vec3(destination.x, destination.y, destination.z));
+    }
+
+    /**
+     * Update agent parameters
+     * @param index agent index returned by addAgent
+     * @param parameters agent parameters
+     */
+    updateAgentParameters(index: number, parameters: IAgentParameters): void {
+        var agentParams = this.recastCrowd.getAgentParameters(index);
+
+        if (parameters.radius !== undefined) {
+            agentParams.radius = parameters.radius;
+        }
+        if (parameters.height !== undefined) {
+            agentParams.height = parameters.height;
+        }
+        if (parameters.maxAcceleration !== undefined) {
+            agentParams.maxAcceleration = parameters.maxAcceleration;
+        }
+        if (parameters.maxSpeed !== undefined) {
+            agentParams.maxSpeed = parameters.maxSpeed;
+        }
+        if (parameters.collisionQueryRange !== undefined) {
+            agentParams.collisionQueryRange = parameters.collisionQueryRange;
+        }
+        if (parameters.pathOptimizationRange !== undefined) {
+            agentParams.pathOptimizationRange = parameters.pathOptimizationRange;
+        }
+        if (parameters.separationWeight !== undefined) {
+            agentParams.separationWeight = parameters.separationWeight;
+        }
+
+        this.recastCrowd.setAgentParameters(index, agentParams);
+    }
+
+    /**
      * remove a particular agent previously created
      * @param index agent index returned by addAgent
      */