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";
|
import Debug from "../../Wolfie2D/Debug/Debug";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export enum PlayerStates {
|
export enum PlayerStates {
|
||||||
IDLE = "idle",
|
IDLE = "idle",
|
||||||
WALK = "walk",
|
WALK = "walk",
|
||||||
RUN = "run",
|
|
||||||
JUMP = "jump",
|
JUMP = "jump",
|
||||||
FALL = "fall",
|
FALL = "fall",
|
||||||
PREVIOUS = "previous"
|
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 {
|
loadScene(): void {
|
||||||
// Load the menu song
|
// Load the menu song
|
||||||
//this.load.audio("menu", "hw5_assets/music/menu.mp3");
|
//this.load.audio("menu", "shattered_sword_assets/music/menu.mp3");
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
|
|
|
@ -4,7 +4,12 @@ export enum Player_Events {
|
||||||
PLAYER_ATTACK = "PlayerAttack",
|
PLAYER_ATTACK = "PlayerAttack",
|
||||||
PLAYER_DASH = "PlayerDash",
|
PLAYER_DASH = "PlayerDash",
|
||||||
PLAYER_HEAL = "PlayerHeal",
|
PLAYER_HEAL = "PlayerHeal",
|
||||||
|
LEVEL_START = "LevelStart",
|
||||||
|
LEVEL_END = "LevelEnd",
|
||||||
PLAYER_KILLED = "PlayerKilled",
|
PLAYER_KILLED = "PlayerKilled",
|
||||||
|
ENEMY_KILLED = "EnemyKilled",
|
||||||
|
PLAYER_HIT_ENEMY = "PlayerHitEnemy",
|
||||||
|
BOSS_KILLED = "BossKilled",
|
||||||
}
|
}
|
||||||
export enum Damage_Type {
|
export enum Damage_Type {
|
||||||
NORMAL_DAMAGE = "NormalDamage",
|
NORMAL_DAMAGE = "NormalDamage",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user