Added Player States
This commit is contained in:
parent
11dffbd718
commit
5bc079756d
|
@ -12,10 +12,10 @@ import Walk from "./PlayerStates/Walk";
|
|||
import Debug from "../../Wolfie2D/Debug/Debug";
|
||||
|
||||
|
||||
|
||||
export enum PlayerStates {
|
||||
IDLE = "idle",
|
||||
WALK = "walk",
|
||||
RUN = "run",
|
||||
JUMP = "jump",
|
||||
FALL = "fall",
|
||||
PREVIOUS = "previous"
|
||||
|
|
0
src/shattered_sword/Player/PlayerStates/Attack.ts
Normal file
0
src/shattered_sword/Player/PlayerStates/Attack.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import GameEvent from "../../../Wolfie2D/Events/GameEvent";
|
||||
import AnimatedSprite from "../../../Wolfie2D/Nodes/Sprites/AnimatedSprite";
|
||||
import InAir from "./InAir";
|
||||
|
||||
export default class Fall extends InAir {
|
||||
owner: AnimatedSprite;
|
||||
|
||||
onEnter(options: Record<string, any>): void {
|
||||
this.owner.animation.play("FALL", true);
|
||||
}
|
||||
|
||||
onExit(): Record<string, any> {
|
||||
this.owner.animation.stop();
|
||||
return {};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
import Input from "../../../Wolfie2D/Input/Input";
|
||||
import AnimatedSprite from "../../../Wolfie2D/Nodes/Sprites/AnimatedSprite";
|
||||
import { PlayerStates } from "../PlayerController";
|
||||
import OnGround from "./OnGround";
|
||||
|
||||
export default class Idle extends OnGround {
|
||||
owner: AnimatedSprite;
|
||||
|
||||
onEnter(options: Record<string, any>): void {
|
||||
this.parent.speed = this.parent.MIN_SPEED;
|
||||
}
|
||||
|
||||
|
||||
update(deltaT: number): void {
|
||||
super.update(deltaT);
|
||||
|
||||
this.owner.animation.playIfNotAlready("IDLE", true);
|
||||
|
||||
let dir = this.getInputDirection();
|
||||
|
||||
if(!dir.isZero() && dir.y === 0){
|
||||
this.finished(PlayerStates.WALK);
|
||||
}
|
||||
|
||||
this.parent.velocity.x = 0;
|
||||
|
||||
this.owner.move(this.parent.velocity.scaled(deltaT));
|
||||
}
|
||||
|
||||
onExit(): Record<string, any> {
|
||||
this.owner.animation.stop();
|
||||
return {};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
import GameEvent from "../../../Wolfie2D/Events/GameEvent";
|
||||
import { PlayerStates } from "../PlayerController";
|
||||
import PlayerState from "./PlayerState";
|
||||
|
||||
export default abstract class InAir extends PlayerState {
|
||||
|
||||
update(deltaT: number): void {
|
||||
super.update(deltaT);
|
||||
|
||||
let dir = this.getInputDirection();
|
||||
|
||||
this.parent.velocity.x += dir.x * this.parent.speed/3.5 - 0.3*this.parent.velocity.x;
|
||||
|
||||
this.owner.move(this.parent.velocity.scaled(deltaT));
|
||||
|
||||
if(this.owner.onGround){
|
||||
this.finished(PlayerStates.PREVIOUS);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
import GameEvent from "../../../Wolfie2D/Events/GameEvent";
|
||||
import { GameEventType } from "../../../Wolfie2D/Events/GameEventType";
|
||||
import AnimatedSprite from "../../../Wolfie2D/Nodes/Sprites/AnimatedSprite";
|
||||
import { EaseFunctionType } from "../../../Wolfie2D/Utils/EaseFunctions";
|
||||
import { Player_Events } from "../../sword_enums";
|
||||
import { PlayerStates } from "../PlayerController";
|
||||
import InAir from "./InAir";
|
||||
|
||||
export default class Jump extends InAir {
|
||||
owner: AnimatedSprite;
|
||||
|
||||
onEnter(options: Record<string, any>): void {
|
||||
this.emitter.fireEvent(GameEventType.PLAY_SOUND, {key: "jump", loop: false, holdReference: false});
|
||||
}
|
||||
|
||||
|
||||
|
||||
update(deltaT: number): void {
|
||||
super.update(deltaT);
|
||||
|
||||
this.owner.animation.play("JUMP", true);
|
||||
|
||||
if(this.owner.onCeiling){
|
||||
this.parent.velocity.y = 0;
|
||||
}
|
||||
|
||||
// If we're falling, go to the fall state
|
||||
if(this.parent.velocity.y >= 0){
|
||||
this.finished(PlayerStates.FALL);
|
||||
}
|
||||
}
|
||||
|
||||
onExit(): Record<string, any> {
|
||||
this.owner.animation.stop();
|
||||
return {};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
import State from "../../../Wolfie2D/DataTypes/State/State";
|
||||
import StateMachine from "../../../Wolfie2D/DataTypes/State/StateMachine";
|
||||
import Vec2 from "../../../Wolfie2D/DataTypes/Vec2";
|
||||
import GameEvent from "../../../Wolfie2D/Events/GameEvent";
|
||||
import Input from "../../../Wolfie2D/Input/Input";
|
||||
import GameNode from "../../../Wolfie2D/Nodes/GameNode";
|
||||
import Timer from "../../../Wolfie2D/Timing/Timer";
|
||||
import { Player_Events } from "../../sword_enums";
|
||||
import PlayerController from "../PlayerController";
|
||||
|
||||
|
||||
export default abstract class PlayerState extends State {
|
||||
owner: GameNode;
|
||||
gravity: number = 1000; //TODO - can change later
|
||||
parent: PlayerController;
|
||||
positionTimer: Timer;
|
||||
|
||||
constructor(parent: StateMachine, owner: GameNode){
|
||||
super(parent);
|
||||
this.owner = owner;
|
||||
this.positionTimer = new Timer(250);
|
||||
this.positionTimer.start();
|
||||
}
|
||||
|
||||
|
||||
handleInput(event: GameEvent): void {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the inputs from the keyboard, or Vec2.Zero if nothing is being pressed
|
||||
*/
|
||||
getInputDirection(): Vec2 {
|
||||
let direction = Vec2.ZERO;
|
||||
direction.x = (Input.isPressed("left") ? -1 : 0) + (Input.isPressed("right") ? 1 : 0);
|
||||
direction.y = (Input.isJustPressed("jump") ? -1 : 0);
|
||||
return direction;
|
||||
}
|
||||
|
||||
|
||||
|
||||
update(deltaT: number): void {
|
||||
// Do gravity
|
||||
|
||||
if (this.positionTimer.isStopped()){
|
||||
this.emitter.fireEvent(Player_Events.PLAYER_MOVE, {position: this.owner.position.clone()});
|
||||
this.positionTimer.start();
|
||||
}
|
||||
this.parent.velocity.y += this.gravity*deltaT;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
import Input from "../../../Wolfie2D/Input/Input";
|
||||
import AnimatedSprite from "../../../Wolfie2D/Nodes/Sprites/AnimatedSprite";
|
||||
import { Player_Events } from "../../sword_enums";
|
||||
import { PlayerStates } from "../PlayerController";
|
||||
import OnGround from "./OnGround";
|
||||
|
||||
export default class Walk extends OnGround {
|
||||
owner: AnimatedSprite;
|
||||
|
||||
onEnter(options: Record<string, any>): void {
|
||||
this.parent.speed = this.parent.MIN_SPEED;
|
||||
}
|
||||
|
||||
|
||||
update(deltaT: number): void {
|
||||
super.update(deltaT);
|
||||
|
||||
this.owner.animation.playIfNotAlready("WALK", true);
|
||||
|
||||
let dir = this.getInputDirection();
|
||||
|
||||
if(dir.isZero()){
|
||||
this.finished(PlayerStates.IDLE);
|
||||
}
|
||||
this.parent.velocity.x = dir.x * this.parent.speed
|
||||
|
||||
this.owner.move(this.parent.velocity.scaled(deltaT));
|
||||
}
|
||||
|
||||
onExit(): Record<string, any> {
|
||||
this.owner.animation.stop();
|
||||
return {};
|
||||
}
|
||||
}
|
|
@ -25,7 +25,7 @@ export default class MainMenu extends Scene {
|
|||
|
||||
loadScene(): void {
|
||||
// Load the menu song
|
||||
//this.load.audio("menu", "hw5_assets/music/menu.mp3");
|
||||
//this.load.audio("menu", "shattered_sword_assets/music/menu.mp3");
|
||||
}
|
||||
|
||||
//TODO
|
||||
|
|
|
@ -4,7 +4,12 @@ export enum Player_Events {
|
|||
PLAYER_ATTACK = "PlayerAttack",
|
||||
PLAYER_DASH = "PlayerDash",
|
||||
PLAYER_HEAL = "PlayerHeal",
|
||||
LEVEL_START = "LevelStart",
|
||||
LEVEL_END = "LevelEnd",
|
||||
PLAYER_KILLED = "PlayerKilled",
|
||||
ENEMY_KILLED = "EnemyKilled",
|
||||
PLAYER_HIT_ENEMY = "PlayerHitEnemy",
|
||||
BOSS_KILLED = "BossKilled",
|
||||
}
|
||||
export enum Damage_Type {
|
||||
NORMAL_DAMAGE = "NormalDamage",
|
||||
|
|
Loading…
Reference in New Issue
Block a user