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 Vec2 from "../../Wolfie2D/DataTypes/Vec2";
 | 
				
			||||||
import Sprite from "../../Wolfie2D/Nodes/Sprites/Sprite";
 | 
					import Sprite from "../../Wolfie2D/Nodes/Sprites/Sprite";
 | 
				
			||||||
import OrthogonalTilemap from "../../Wolfie2D/Nodes/Tilemaps/OrthogonalTilemap";
 | 
					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 {
 | 
					export enum BuffType {
 | 
				
			||||||
    ATK = "attack",
 | 
					    ATK = "attack",
 | 
				
			||||||
| 
						 | 
					@ -22,6 +39,9 @@ type Buffs = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class PlayerController extends StateMachineAI {
 | 
					export default class PlayerController extends StateMachineAI {
 | 
				
			||||||
    protected owner: GameNode;
 | 
					    protected owner: GameNode;
 | 
				
			||||||
 | 
					    velocity: Vec2 = Vec2.ZERO;
 | 
				
			||||||
 | 
						speed: number = 200;
 | 
				
			||||||
 | 
						MIN_SPEED: number = 200;
 | 
				
			||||||
    MAX_SPEED: number = 300;
 | 
					    MAX_SPEED: number = 300;
 | 
				
			||||||
    BASE_HP: number = 100;
 | 
					    BASE_HP: number = 100;
 | 
				
			||||||
    MAX_HP: number = 100;
 | 
					    MAX_HP: number = 100;
 | 
				
			||||||
| 
						 | 
					@ -32,6 +52,7 @@ export default class PlayerController extends StateMachineAI {
 | 
				
			||||||
    BASE_DEF: number = 100;
 | 
					    BASE_DEF: number = 100;
 | 
				
			||||||
    MAX_DEF: number = 100;
 | 
					    MAX_DEF: number = 100;
 | 
				
			||||||
    CURRENT_DEF: number = 100;
 | 
					    CURRENT_DEF: number = 100;
 | 
				
			||||||
 | 
					    tilemap: OrthogonalTilemap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CURRENT_BUFFS: {
 | 
					    CURRENT_BUFFS: {
 | 
				
			||||||
        atk: 0;
 | 
					        atk: 0;
 | 
				
			||||||
| 
						 | 
					@ -39,8 +60,8 @@ export default class PlayerController extends StateMachineAI {
 | 
				
			||||||
        def: 0;
 | 
					        def: 0;
 | 
				
			||||||
        speed: 0;
 | 
					        speed: 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    velocity: Vec2 = Vec2.ZERO;
 | 
					    
 | 
				
			||||||
    tilemap: OrthogonalTilemap;
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Returns three legal random generate buffs based on current state
 | 
						 * Returns three legal random generate buffs based on current state
 | 
				
			||||||
| 
						 | 
					@ -58,4 +79,55 @@ export default class PlayerController extends StateMachineAI {
 | 
				
			||||||
    setBuff(buff: Buff): void {
 | 
					    setBuff(buff: Buff): void {
 | 
				
			||||||
        // TODO
 | 
					        // 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