63 lines
2.2 KiB
TypeScript
63 lines
2.2 KiB
TypeScript
import ControllerAI from "../Wolfie2D/AI/ControllerAI";
|
|
import AI from "../Wolfie2D/DataTypes/Interfaces/AI";
|
|
import Emitter from "../Wolfie2D/Events/Emitter";
|
|
import GameEvent from "../Wolfie2D/Events/GameEvent";
|
|
import { GameEventType } from "../Wolfie2D/Events/GameEventType";
|
|
import Input from "../Wolfie2D/Input/Input";
|
|
import AnimatedSprite from "../Wolfie2D/Nodes/Sprites/AnimatedSprite";
|
|
|
|
export default class PlayerController extends ControllerAI {
|
|
public owner: AnimatedSprite;
|
|
protected jumpSoundKey: string;
|
|
protected emitter: Emitter;
|
|
|
|
initializeAI(owner: AnimatedSprite, options: Record<string, any>): void {
|
|
this.owner = owner;
|
|
this.jumpSoundKey = options.jumpSoundKey;
|
|
this.emitter = new Emitter();
|
|
}
|
|
|
|
activate(options: Record<string, any>): void {}
|
|
|
|
handleEvent(event: GameEvent): void {
|
|
// Do nothing for now
|
|
}
|
|
|
|
update(deltaT: number): void {
|
|
// Get the direction from key presses
|
|
const x = (Input.isPressed("left") ? -1 : 0) + (Input.isPressed("right") ? 1 : 0);
|
|
|
|
// Get last velocity and override x
|
|
const velocity = this.owner.getLastVelocity();
|
|
velocity.x = x * 100 * deltaT;
|
|
|
|
// Check for jump condition
|
|
if(this.owner.onGround && Input.isJustPressed("jump")){
|
|
// We are jumping
|
|
velocity.y = -250*deltaT;
|
|
|
|
// Loop our jump animation
|
|
this.owner.animation.play("JUMP", true);
|
|
|
|
// Play the jump sound
|
|
this.emitter.fireEvent(GameEventType.PLAY_SOUND, {key: this.jumpSoundKey, loop: false});
|
|
} else {
|
|
velocity.y += 10*deltaT;
|
|
}
|
|
|
|
if(this.owner.onGround && !Input.isJustPressed("jump")){
|
|
// If we're on the ground, but aren't jumping, show walk animation
|
|
if(velocity.x === 0){
|
|
this.owner.animation.playIfNotAlready("IDLE", true);
|
|
} else {
|
|
console.log("walking anim");
|
|
this.owner.animation.playIfNotAlready("WALK", true);
|
|
}
|
|
}
|
|
|
|
// If we're walking left, flip the sprite
|
|
this.owner.invertX = velocity.x < 0;
|
|
|
|
this.owner.move(velocity);
|
|
}
|
|
} |