Skip to content

Commit

Permalink
Merge pull request #7 from oguzeroglu/new-jump
Browse files Browse the repository at this point in the history
Simply jump description logic
  • Loading branch information
oguzeroglu authored Aug 1, 2020
2 parents 2f0b927 + 4c277fd commit 30ae2bf
Show file tree
Hide file tree
Showing 12 changed files with 39 additions and 96 deletions.
2 changes: 0 additions & 2 deletions js/steering/JumpDescriptor.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ var mathUtils = new MathUtils();
var JumpDescriptor = function(parameters){
this.takeoffPosition = parameters.takeoffPosition.clone();
this.landingPosition = parameters.landingPosition.clone();
this.runupSatisfactionRadius = parameters.runupSatisfactionRadius;
this.takeoffPositionSatisfactionRadius = parameters.takeoffPositionSatisfactionRadius;
this.takeoffVelocitySatisfactionRadius = parameters.takeoffVelocitySatisfactionRadius;

this.delta = this.landingPosition.clone().sub(this.takeoffPosition);

Expand Down
2 changes: 1 addition & 1 deletion js/steering/Steerable.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ Steerable.prototype.update = function(){

if (this.isJumpInitiated && !this.isJumpTakenOff && !this.isJumpReady){
var distToTakeoffPosition = vectorPool.get().copy(this.position).sub(this.jumpDescriptor.takeoffPosition).getLength();
if (distToTakeoffPosition < this.jumpDescriptor.runupSatisfactionRadius){
if (distToTakeoffPosition < this.jumpDescriptor.takeoffPositionSatisfactionRadius){
logger.log(LOGGER_COMPONENT_NAME, LOG_JUMP_READY, this.id);
this.onJumpReady();
}
Expand Down
21 changes: 5 additions & 16 deletions js/steering/behavior/JumpBehavior.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,26 +41,15 @@ JumpBehavior.prototype.compute = function(steerable){
}

var targetVelocity = vectorPool.get().set(equationResult.vx, 0, equationResult.vz);

var posDiff = vectorPool.get().copy(steerable.position).sub(jumpDescriptor.takeoffPosition).getLength();
if (posDiff <= jumpDescriptor.takeoffPositionSatisfactionRadius){
var velocityDiff = vectorPool.get().copy(steerable.velocity).sub(targetVelocity).getLength();
if (velocityDiff <= jumpDescriptor.takeoffVelocitySatisfactionRadius){
steerable.onJumpTakeOff();
logger.log(LOGGER_COMPONENT_NAME, LOG_TAKING_OFF, steerable.id);
return this.result;
}
if (steerable.velocity.eql(targetVelocity)){
steerable.onJumpTakeOff();
logger.log(LOGGER_COMPONENT_NAME, LOG_TAKING_OFF, steerable.id);
return this.result;
}

logger.log(LOGGER_COMPONENT_NAME, LOG_MATCHING_VELOCITY, steerable.id);

return this.matchVelocity(equationResult.time, targetVelocity, steerable);
}

JumpBehavior.prototype.matchVelocity = function(time, targetVelocity, steerable){
var linear = this.result.linear;
targetVelocity.sub(steerable.velocity).multiplyScalar(1 / time);
linear.copy(targetVelocity);
steerable.velocity.copy(targetVelocity);
return this.result;
}

Expand Down
2 changes: 1 addition & 1 deletion js/steering/behavior/PathFollowingBehavior.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ PathFollowingBehavior.prototype.isJumpNeeded = function(steerable){
for (var i = 0; i < path.jumpDescriptorLength; i ++){
var jumpDescriptor = jumpDescriptors[i];
var distToTakeoffPosition = vectorPool.get().copy(steerable.position).sub(jumpDescriptor.takeoffPosition).getLength();
if (distToTakeoffPosition < jumpDescriptor.runupSatisfactionRadius){
if (distToTakeoffPosition < jumpDescriptor.takeoffPositionSatisfactionRadius){
var quadraticEquationResult = jumpDescriptor.solveQuadraticEquation(steerable);
if (quadraticEquationResult){
return jumpDescriptor;
Expand Down
3 changes: 1 addition & 2 deletions test/core/AStarTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -267,8 +267,7 @@ describe("AStar", function(){

var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: vertex2, landingPosition: vertex3,
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

graph.addVertex(vertex1);
Expand Down
11 changes: 3 additions & 8 deletions test/core/GraphTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,7 @@ describe("Graph", function(){

var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: vertex, landingPosition: vertex2,
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

expect(graph.addJumpDescriptor(jumpDescriptor)).to.eql(false);
Expand Down Expand Up @@ -249,9 +248,7 @@ describe("Graph", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: vertex,
landingPosition: vertex2,
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

graph.addJumpDescriptor(jumpDescriptor);
Expand Down Expand Up @@ -365,9 +362,7 @@ describe("Graph", function(){
var jd = new Kompute.JumpDescriptor({
takeoffPosition: vec1,
landingPosition: vec3,
runupSatisfactionRadius: 50,
takeoffPositionSatisfactionRadius: 50,
takeoffVelocitySatisfactionRadius: 50
takeoffPositionSatisfactionRadius: 50
});

graph.addJumpDescriptor(jd);
Expand Down
24 changes: 8 additions & 16 deletions test/core/PathTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,14 +101,12 @@ describe("Path", function(){

var jd1 = new Kompute.JumpDescriptor({
takeoffPosition: vp1, landingPosition: vp2,
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

var jd2 = new Kompute.JumpDescriptor({
takeoffPosition: vp2, landingPosition: vp3,
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

path.insertJumpDescriptor(jd1);
Expand Down Expand Up @@ -342,26 +340,22 @@ describe("Path", function(){

var jumpDescriptor1 = new Kompute.JumpDescriptor({
takeoffPosition: wp1, landingPosition: wp2,
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

var jumpDescriptor2 = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(500, 500, 500), landingPosition: wp2,
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

var jumpDescriptor3 = new Kompute.JumpDescriptor({
takeoffPosition: wp1, landingPosition: new Kompute.Vector3D(500, 500, 500),
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

var jumpDescriptor4 = new Kompute.JumpDescriptor({
takeoffPosition: wp2, landingPosition: wp1,
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

expect(path.addJumpDescriptor(jumpDescriptor1)).to.eql(true);
Expand Down Expand Up @@ -428,8 +422,7 @@ describe("Path", function(){

var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(0, 10, 20), landingPosition: new Kompute.Vector3D(20, 40, 50),
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

path.insertJumpDescriptor(jumpDescriptor);
Expand All @@ -445,8 +438,7 @@ describe("Path", function(){

jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(0, 10, 20), landingPosition: new Kompute.Vector3D(20, 40, 50),
runupSatisfactionRadius: 100, takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

path.addJumpDescriptor(jumpDescriptor);
Expand Down
4 changes: 1 addition & 3 deletions test/debug/DebugHelperTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -502,9 +502,7 @@ describe("DebugHelper", function(){
var jd = new Kompute.JumpDescriptor({
takeoffPosition: takeoffPosition,
landingPosition: landingPosition,
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 100,
takeoffVelocitySatisfactionRadius: 100
takeoffPositionSatisfactionRadius: 100
});

var threeInstance = mockThreeInstance();
Expand Down
18 changes: 4 additions & 14 deletions test/steering/JumpDescriptorTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,14 @@ describe("JumpDescriptor", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(100, 0, 0),
landingPosition: new Kompute.Vector3D(150, 100, 0),
runupSatisfactionRadius: 50,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 20
takeoffPositionSatisfactionRadius: 35
});

expect(jumpDescriptor.takeoffPosition).to.eql(new Kompute.Vector3D(100, 0, 0));
expect(jumpDescriptor.landingPosition).to.eql(new Kompute.Vector3D(150, 100, 0));
expect(jumpDescriptor.runupSatisfactionRadius).to.eql(50);
expect(jumpDescriptor.delta).to.eql(new Kompute.Vector3D(50, 100, 0));
expect(jumpDescriptor.checkTimeResult).to.eql({ vx: 0, vz: 0, isAchievable: false });
expect(jumpDescriptor.takeoffPositionSatisfactionRadius).to.eql(35);
expect(jumpDescriptor.takeoffVelocitySatisfactionRadius).to.eql(20);
expect(jumpDescriptor._internalID).to.exist;
});

Expand All @@ -28,9 +24,7 @@ describe("JumpDescriptor", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(),
landingPosition: new Kompute.Vector3D(),
runupSatisfactionRadius: 0,
takeoffPositionSatisfactionRadius: 0,
takeoffVelocitySatisfactionRadius: 0
takeoffPositionSatisfactionRadius: 0
});

jumpDescriptor.delta = new Kompute.Vector3D(10, 20, 30);
Expand Down Expand Up @@ -62,9 +56,7 @@ describe("JumpDescriptor", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(),
landingPosition: new Kompute.Vector3D(10, 20, 30),
runupSatisfactionRadius: 0,
takeoffPositionSatisfactionRadius: 0,
takeoffVelocitySatisfactionRadius: 0
takeoffPositionSatisfactionRadius: 0
});

var result = jumpDescriptor.solveQuadraticEquation(steerable);
Expand Down Expand Up @@ -102,9 +94,7 @@ describe("JumpDescriptor", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(),
landingPosition: new Kompute.Vector3D(10, 20, 30),
runupSatisfactionRadius: 0,
takeoffPositionSatisfactionRadius: 0,
takeoffVelocitySatisfactionRadius: 0
takeoffPositionSatisfactionRadius: 0
});

var cached = jumpDescriptor.getEquationResult(steerable);
Expand Down
34 changes: 9 additions & 25 deletions test/steering/SteerableTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -422,9 +422,7 @@ describe("Steerable", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(100, 200, 300),
landingPosition: new Kompute.Vector3D(400, 500, 600),
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 20
takeoffPositionSatisfactionRadius: 35
});

entity.jumpTime = 999;
Expand Down Expand Up @@ -458,9 +456,7 @@ describe("Steerable", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(100, 200, 300),
landingPosition: new Kompute.Vector3D(400, 500, 600),
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 20
takeoffPositionSatisfactionRadius: 35
});

jumpDescriptor.setCache(entity, { vx: 100, vz: -100, time: (1/60) * 5 });
Expand Down Expand Up @@ -496,9 +492,7 @@ describe("Steerable", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(100, 200, 300),
landingPosition: new Kompute.Vector3D(400, 500, 600),
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 20
takeoffPositionSatisfactionRadius: 35
});

Kompute.logger.enable();
Expand All @@ -510,7 +504,7 @@ describe("Steerable", function(){
expect(loggedMsgs).to.eql(['[Steerable]: Equation cannot be solved. (steerable1)']);
});

it("should trigger onJumpReady if position within run-up radius", function(){
it("should trigger onJumpReady if position within takeoff position satisfaction radius", function(){
var center = new Kompute.Vector3D(0, 0, 0);
var size = new Kompute.Vector3D(50, 60, 70);
var entity = new Kompute.Steerable("steerable1", center, size);
Expand All @@ -522,9 +516,7 @@ describe("Steerable", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(10, 10, 10),
landingPosition: new Kompute.Vector3D(400, 500, 600),
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 20
takeoffPositionSatisfactionRadius: 35
});

var called = false;
Expand Down Expand Up @@ -555,9 +547,7 @@ describe("Steerable", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(500, 500, 500),
landingPosition: new Kompute.Vector3D(400, 500, 600),
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 20
takeoffPositionSatisfactionRadius: 35
});

var called = false;
Expand All @@ -584,9 +574,7 @@ describe("Steerable", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(10, 10, 10),
landingPosition: new Kompute.Vector3D(400, 500, 600),
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 20
takeoffPositionSatisfactionRadius: 35
});

var called = false;
Expand Down Expand Up @@ -614,9 +602,7 @@ describe("Steerable", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(10, 10, 10),
landingPosition: new Kompute.Vector3D(400, 500, 600),
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 20
takeoffPositionSatisfactionRadius: 35
});

var called = false;
Expand Down Expand Up @@ -695,9 +681,7 @@ describe("Steerable", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(10, 10, 10),
landingPosition: new Kompute.Vector3D(400, 500, 600),
runupSatisfactionRadius: 100,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 20
takeoffPositionSatisfactionRadius: 35
});

entity.jumpDescriptor = jumpDescriptor;
Expand Down
10 changes: 5 additions & 5 deletions test/steering/behavior/JumpBehaviorTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,7 @@ describe("JumpBehavior", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: new Kompute.Vector3D(10, 0, 10),
landingPosition: new Kompute.Vector3D(150, 100, 0),
runupSatisfactionRadius: 50,
takeoffPositionSatisfactionRadius: 35,
takeoffVelocitySatisfactionRadius: 10
takeoffPositionSatisfactionRadius: 35
});

var world = new Kompute.World(1000, 1000, 1000, 10);
Expand All @@ -95,6 +93,8 @@ describe("JumpBehavior", function(){
Kompute.logger.enable();

expect(steerable.isJumpTakenOff).to.eql(false);

steerable.velocity.set(jumpDescriptor.getEquationResult(steerable).vx, 0, jumpDescriptor.getEquationResult(steerable).vz);
var result = jumpBehavior.compute(steerable);
expect(result.linear).to.eql(new Kompute.Vector3D());
expect(steerable.isJumpTakenOff).to.eql(true);
Expand All @@ -110,7 +110,6 @@ describe("JumpBehavior", function(){

steerable.jumpDescriptor = {
takeoffPosition: new Kompute.Vector3D(0, 0, 0),
takeoffVelocitySatisfactionRadius: 0,
takeoffPositionSatisfactionRadius: 10000,
getEquationResult: function(){
return { time: 2, vx: 30, vz: 60 };
Expand All @@ -123,7 +122,8 @@ describe("JumpBehavior", function(){

var result = jumpBehavior.compute(steerable);

expect(result.linear).to.eql(new Kompute.Vector3D(15, 0, 30));
expect(result.linear).to.eql(new Kompute.Vector3D(0, 0, 0));
expect(steerable.velocity).to.eql(new Kompute.Vector3D(30, 0, 60));
expect(loggedMsg).to.eql("[JumpBehavior]: Matching velocity. (steerable1)");
});
});
4 changes: 1 addition & 3 deletions test/steering/behavior/PathFollowingBehaviorTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,7 @@ describe("PathFollowingBehavior", function(){
var jumpDescriptor = new Kompute.JumpDescriptor({
takeoffPosition: wp2,
landingPosition: wp3,
runupSatisfactionRadius: 50,
takeoffPositionSatisfactionRadius: 5,
takeoffVelocitySatisfactionRadius: 200
takeoffPositionSatisfactionRadius: 50
});

path.addJumpDescriptor(jumpDescriptor);
Expand Down

0 comments on commit 30ae2bf

Please sign in to comment.