UNPKG

@matematrolii/sketchbook

Version:

3D matematrolii playground built on three.js and cannon.js

64 lines (54 loc) 1.45 kB
import { CharacterStateBase, Falling, } from './_stateLibrary'; import { ICharacterState } from '../../interfaces/ICharacterState'; import { Character } from '../Character'; export class JumpIdle extends CharacterStateBase implements ICharacterState { private alreadyJumped: boolean; constructor(character: Character) { super(character); this.character.velocitySimulator.mass = 50; this.character.setArcadeVelocityTarget(0); //this.playAnimation('jump_idle', 0.1); this.playAnimation('jump', 0.1); this.alreadyJumped = false; } public update(timeStep: number): void { super.update(timeStep); // Move in air if (this.alreadyJumped) { this.character.setCameraRelativeOrientationTarget(); this.character.setArcadeVelocityTarget(this.anyDirection() ? 0.8 : 0); } // Physically jump if (this.timer > 0.2 && !this.alreadyJumped) { this.character.jump(); this.alreadyJumped = true; this.character.velocitySimulator.mass = 100; this.character.rotationSimulator.damping = 0.3; if (this.character.rayResult.body.velocity.length() > 0) { this.character.setArcadeVelocityInfluence(0, 0, 0); } else { this.character.setArcadeVelocityInfluence(0.3, 0, 0.3); } } else if (this.timer > 0.3 && this.character.rayHasHit) { this.setAppropriateDropState(); } else if (this.animationEnded(timeStep)) { this.character.setState(new Falling(this.character)); } } }