Added Player States
This commit is contained in:
parent
9b335ba6ea
commit
87ff0d5ec7
|
@ -3,6 +3,23 @@ import GameNode, { TweenableProperties } from "../../Wolfie2D/Nodes/GameNode";
|
|||
import Vec2 from "../../Wolfie2D/DataTypes/Vec2";
|
||||
import Sprite from "../../Wolfie2D/Nodes/Sprites/Sprite";
|
||||
import OrthogonalTilemap from "../../Wolfie2D/Nodes/Tilemaps/OrthogonalTilemap";
|
||||
import { Player_Events } from "../sword_enums";
|
||||
import Fall from "./PlayerStates/Fall";
|
||||
import Idle from "./PlayerStates/Idle";
|
||||
import InAir from "./PlayerStates/InAir";
|
||||
import Jump from "./PlayerStates/Jump";
|
||||
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"
|
||||
}
|
||||
|
||||
export enum BuffType {
|
||||
ATK = "attack",
|
||||
|
@ -22,6 +39,9 @@ type Buffs = [
|
|||
|
||||
export default class PlayerController extends StateMachineAI {
|
||||
protected owner: GameNode;
|
||||
velocity: Vec2 = Vec2.ZERO;
|
||||
speed: number = 200;
|
||||
MIN_SPEED: number = 200;
|
||||
MAX_SPEED: number = 300;
|
||||
BASE_HP: number = 100;
|
||||
MAX_HP: number = 100;
|
||||
|
@ -32,6 +52,7 @@ export default class PlayerController extends StateMachineAI {
|
|||
BASE_DEF: number = 100;
|
||||
MAX_DEF: number = 100;
|
||||
CURRENT_DEF: number = 100;
|
||||
tilemap: OrthogonalTilemap;
|
||||
|
||||
CURRENT_BUFFS: {
|
||||
atk: 0;
|
||||
|
@ -39,8 +60,8 @@ export default class PlayerController extends StateMachineAI {
|
|||
def: 0;
|
||||
speed: 0;
|
||||
}
|
||||
velocity: Vec2 = Vec2.ZERO;
|
||||
tilemap: OrthogonalTilemap;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Returns three legal random generate buffs based on current state
|
||||
|
@ -58,4 +79,55 @@ export default class PlayerController extends StateMachineAI {
|
|||
setBuff(buff: Buff): void {
|
||||
// TODO
|
||||
}
|
||||
|
||||
//TODO - get the correct tilemap
|
||||
initializeAI(owner: GameNode, options: Record<string, any>){
|
||||
this.owner = owner;
|
||||
|
||||
this.initializePlatformer();
|
||||
|
||||
this.tilemap = this.owner.getScene().getTilemap(options.tilemap) as OrthogonalTilemap;
|
||||
|
||||
|
||||
}
|
||||
|
||||
initializePlatformer(): void {
|
||||
this.speed = 400;
|
||||
|
||||
let idle = new Idle(this, this.owner);
|
||||
this.addState(PlayerStates.IDLE, idle);
|
||||
let walk = new Walk(this, this.owner);
|
||||
this.addState(PlayerStates.WALK, walk);
|
||||
let jump = new Jump(this, this.owner);
|
||||
this.addState(PlayerStates.JUMP, jump);
|
||||
let fall = new Fall(this, this.owner);
|
||||
this.addState(PlayerStates.FALL, fall);
|
||||
|
||||
this.initialize(PlayerStates.IDLE);
|
||||
}
|
||||
|
||||
changeState(stateName: string): void {
|
||||
// If we jump or fall, push the state so we can go back to our current state later
|
||||
// unless we're going from jump to fall or something
|
||||
if((stateName === PlayerStates.JUMP || stateName === PlayerStates.FALL) && !(this.stack.peek() instanceof InAir)){
|
||||
this.stack.push(this.stateMap.get(stateName));
|
||||
}
|
||||
|
||||
super.changeState(stateName);
|
||||
}
|
||||
|
||||
update(deltaT: number): void {
|
||||
super.update(deltaT);
|
||||
|
||||
if(this.currentState instanceof Jump){
|
||||
Debug.log("playerstate", "Player State: Jump");
|
||||
} else if (this.currentState instanceof Walk){
|
||||
Debug.log("playerstate", "Player State: Walk");
|
||||
} else if (this.currentState instanceof Idle){
|
||||
Debug.log("playerstate", "Player State: Idle");
|
||||
} else if(this.currentState instanceof Fall){
|
||||
Debug.log("playerstate", "Player State: Fall");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
0
src/shattered_sword/Player/PlayerStates/Fall.ts
Normal file
0
src/shattered_sword/Player/PlayerStates/Fall.ts
Normal file
0
src/shattered_sword/Player/PlayerStates/Idle.ts
Normal file
0
src/shattered_sword/Player/PlayerStates/Idle.ts
Normal file
0
src/shattered_sword/Player/PlayerStates/InAir.ts
Normal file
0
src/shattered_sword/Player/PlayerStates/InAir.ts
Normal file
0
src/shattered_sword/Player/PlayerStates/Jump.ts
Normal file
0
src/shattered_sword/Player/PlayerStates/Jump.ts
Normal file
35
src/shattered_sword/Player/PlayerStates/OnGround.ts
Normal file
35
src/shattered_sword/Player/PlayerStates/OnGround.ts
Normal file
|
@ -0,0 +1,35 @@
|
|||
import GameEvent from "../../../Wolfie2D/Events/GameEvent";
|
||||
import Input from "../../../Wolfie2D/Input/Input";
|
||||
import Sprite from "../../../Wolfie2D/Nodes/Sprites/Sprite";
|
||||
import MathUtils from "../../../Wolfie2D/Utils/MathUtils";
|
||||
import PlayerState from "./PlayerState";
|
||||
|
||||
export default class OnGround extends PlayerState {
|
||||
onEnter(options: Record<string, any>): void {}
|
||||
|
||||
update(deltaT: number): void {
|
||||
if(this.parent.velocity.y > 0){
|
||||
this.parent.velocity.y = 0;
|
||||
}
|
||||
super.update(deltaT);
|
||||
|
||||
let direction = this.getInputDirection();
|
||||
|
||||
if(direction.x !== 0){
|
||||
(<Sprite>this.owner).invertX = MathUtils.sign(direction.x) < 0;
|
||||
}
|
||||
|
||||
// If we jump, move to the Jump state, give a burst of upwards velocity
|
||||
if(Input.isJustPressed("jump")){
|
||||
this.finished("jump");
|
||||
this.parent.velocity.y = -500;
|
||||
|
||||
} else if(!this.owner.onGround){
|
||||
this.finished("fall");
|
||||
}
|
||||
}
|
||||
|
||||
onExit(): Record<string, any> {
|
||||
return {};
|
||||
}
|
||||
}
|
0
src/shattered_sword/Player/PlayerStates/Walk.ts
Normal file
0
src/shattered_sword/Player/PlayerStates/Walk.ts
Normal file
Loading…
Reference in New Issue
Block a user