ShatteredSword/src/demos/PlatformerPlayerController.ts
2022-04-11 16:28:58 -04:00

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);
}
}