Merge remote-tracking branch 'github/master'
This commit is contained in:
		
						commit
						a3009dcbbf
					
				| 
						 | 
					@ -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
									
								
							
							
								
								
									
										229
									
								
								src/shattered_sword/Scenes/GameLevel.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										229
									
								
								src/shattered_sword/Scenes/GameLevel.ts
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,229 @@
 | 
				
			||||||
 | 
					import AABB from "../../Wolfie2D/DataTypes/Shapes/AABB";
 | 
				
			||||||
 | 
					import Vec2 from "../../Wolfie2D/DataTypes/Vec2";
 | 
				
			||||||
 | 
					import Debug from "../../Wolfie2D/Debug/Debug";
 | 
				
			||||||
 | 
					import { GameEventType } from "../../Wolfie2D/Events/GameEventType";
 | 
				
			||||||
 | 
					import Input from "../../Wolfie2D/Input/Input";
 | 
				
			||||||
 | 
					import { TweenableProperties } from "../../Wolfie2D/Nodes/GameNode";
 | 
				
			||||||
 | 
					import { GraphicType } from "../../Wolfie2D/Nodes/Graphics/GraphicTypes";
 | 
				
			||||||
 | 
					import Point from "../../Wolfie2D/Nodes/Graphics/Point";
 | 
				
			||||||
 | 
					import Rect from "../../Wolfie2D/Nodes/Graphics/Rect";
 | 
				
			||||||
 | 
					import AnimatedSprite from "../../Wolfie2D/Nodes/Sprites/AnimatedSprite";
 | 
				
			||||||
 | 
					import Label from "../../Wolfie2D/Nodes/UIElements/Label";
 | 
				
			||||||
 | 
					import { UIElementType } from "../../Wolfie2D/Nodes/UIElements/UIElementTypes";
 | 
				
			||||||
 | 
					import Scene from "../../Wolfie2D/Scene/Scene";
 | 
				
			||||||
 | 
					import Timer from "../../Wolfie2D/Timing/Timer";
 | 
				
			||||||
 | 
					import Color from "../../Wolfie2D/Utils/Color";
 | 
				
			||||||
 | 
					import { EaseFunctionType } from "../../Wolfie2D/Utils/EaseFunctions";
 | 
				
			||||||
 | 
					import PlayerController from "../Player/PlayerController";
 | 
				
			||||||
 | 
					import MainMenu from "./MainMenu";
 | 
				
			||||||
 | 
					import { Player_Events } from "../sword_enums";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//  TODO
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Add in some level music.
 | 
				
			||||||
 | 
					 * This can be done here in the base GameLevel class or individual level files
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export default class GameLevel extends Scene {
 | 
				
			||||||
 | 
					    // Every level will have a player, which will be an animated sprite
 | 
				
			||||||
 | 
					    protected playerSpawn: Vec2;
 | 
				
			||||||
 | 
					    protected player: AnimatedSprite;
 | 
				
			||||||
 | 
					    protected respawnTimer: Timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Labels for the UI
 | 
				
			||||||
 | 
					    protected static livesCount: number = 3;
 | 
				
			||||||
 | 
					    protected livesCountLabel: Label;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Stuff to end the level and go to the next level
 | 
				
			||||||
 | 
					    protected levelEndArea: Rect;
 | 
				
			||||||
 | 
					    protected nextLevel: new (...args: any) => GameLevel;
 | 
				
			||||||
 | 
					    protected levelEndTimer: Timer;
 | 
				
			||||||
 | 
					    protected levelEndLabel: Label;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // Screen fade in/out for level start and end
 | 
				
			||||||
 | 
					    protected levelTransitionTimer: Timer;
 | 
				
			||||||
 | 
					    protected levelTransitionScreen: Rect;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    startScene(): void {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Do the game level standard initializations
 | 
				
			||||||
 | 
					        this.initLayers();
 | 
				
			||||||
 | 
					        this.initViewport();
 | 
				
			||||||
 | 
					        this.initPlayer();
 | 
				
			||||||
 | 
					        this.subscribeToEvents();
 | 
				
			||||||
 | 
					        this.addUI();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Initialize the timers
 | 
				
			||||||
 | 
					        this.respawnTimer = new Timer(1000, () => {
 | 
				
			||||||
 | 
					            if(GameLevel.livesCount === 0){
 | 
				
			||||||
 | 
					                this.sceneManager.changeToScene(MainMenu);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                this.respawnPlayer();
 | 
				
			||||||
 | 
					                this.player.enablePhysics();
 | 
				
			||||||
 | 
					                this.player.unfreeze();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        this.levelTransitionTimer = new Timer(500);
 | 
				
			||||||
 | 
					        this.levelEndTimer = new Timer(3000, () => {
 | 
				
			||||||
 | 
					            // After the level end timer ends, fade to black and then go to the next scene
 | 
				
			||||||
 | 
					            this.levelTransitionScreen.tweens.play("fadeIn");
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Start the black screen fade out
 | 
				
			||||||
 | 
					        this.levelTransitionScreen.tweens.play("fadeOut");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Initially disable player movement
 | 
				
			||||||
 | 
					        Input.disableInput();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    updateScene(deltaT: number){
 | 
				
			||||||
 | 
					        // Handle events and update the UI if needed
 | 
				
			||||||
 | 
					        while(this.receiver.hasNextEvent()){
 | 
				
			||||||
 | 
					            let event = this.receiver.getNextEvent();
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            switch(event.type){
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Initialzes the layers
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected initLayers(): void {
 | 
				
			||||||
 | 
					        // Add a layer for UI
 | 
				
			||||||
 | 
					        this.addUILayer("UI");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Add a layer for players and enemies
 | 
				
			||||||
 | 
					        this.addLayer("primary", 1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Initializes the viewport
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected initViewport(): void {
 | 
				
			||||||
 | 
					        this.viewport.setZoomLevel(2);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Handles all subscriptions to events
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected subscribeToEvents(){
 | 
				
			||||||
 | 
					        this.receiver.subscribe([
 | 
				
			||||||
 | 
					            Player_Events.PLAYER_HIT_ENEMY,
 | 
				
			||||||
 | 
					            Player_Events.ENEMY_KILLED,
 | 
				
			||||||
 | 
					            Player_Events.LEVEL_START,
 | 
				
			||||||
 | 
					            Player_Events.LEVEL_END,
 | 
				
			||||||
 | 
					            Player_Events.PLAYER_KILLED
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO - 
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Adds in any necessary UI to the game
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected addUI(){
 | 
				
			||||||
 | 
					        // In-game labels
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // End of level label (start off screen)
 | 
				
			||||||
 | 
					        this.levelEndLabel = <Label>this.add.uiElement(UIElementType.LABEL, "UI", {position: new Vec2(-300, 200), text: "Level Complete"});
 | 
				
			||||||
 | 
					        this.levelEndLabel.size.set(1200, 60);
 | 
				
			||||||
 | 
					        this.levelEndLabel.borderRadius = 0;
 | 
				
			||||||
 | 
					        this.levelEndLabel.backgroundColor = new Color(34, 32, 52);
 | 
				
			||||||
 | 
					        this.levelEndLabel.textColor = Color.WHITE;
 | 
				
			||||||
 | 
					        this.levelEndLabel.fontSize = 48;
 | 
				
			||||||
 | 
					        this.levelEndLabel.font = "PixelSimple";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Add a tween to move the label on screen
 | 
				
			||||||
 | 
					        this.levelEndLabel.tweens.add("slideIn", {
 | 
				
			||||||
 | 
					            startDelay: 0,
 | 
				
			||||||
 | 
					            duration: 1000,
 | 
				
			||||||
 | 
					            effects: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    property: TweenableProperties.posX,
 | 
				
			||||||
 | 
					                    start: -300,
 | 
				
			||||||
 | 
					                    end: 300,
 | 
				
			||||||
 | 
					                    ease: EaseFunctionType.OUT_SINE
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Initializes the player
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected initPlayer(): void {
 | 
				
			||||||
 | 
					        // Add the player
 | 
				
			||||||
 | 
					        this.player = this.add.animatedSprite("player", "primary");
 | 
				
			||||||
 | 
					        this.player.scale.set(2, 2);
 | 
				
			||||||
 | 
					        if(!this.playerSpawn){
 | 
				
			||||||
 | 
					            console.warn("Player spawn was never set - setting spawn to (0, 0)");
 | 
				
			||||||
 | 
					            this.playerSpawn = Vec2.ZERO;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        this.player.position.copy(this.playerSpawn);
 | 
				
			||||||
 | 
					        this.player.addPhysics(new AABB(Vec2.ZERO, new Vec2(14, 14)));
 | 
				
			||||||
 | 
					        this.player.colliderOffset.set(0, 2);
 | 
				
			||||||
 | 
					        this.player.addAI(PlayerController, {playerType: "platformer", tilemap: "Main"});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.player.setGroup("player");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.viewport.follow(this.player);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //TODO - 
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Adds an Enemy into the game
 | 
				
			||||||
 | 
					     * @param spriteKey The key of the Enemy sprite
 | 
				
			||||||
 | 
					     * @param tilePos The tilemap position to add the Enemy to
 | 
				
			||||||
 | 
					     * @param aiOptions The options for the Enemy AI
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    protected addEnemy(spriteKey: string, tilePos: Vec2, aiOptions: Record<string, any>): void {
 | 
				
			||||||
 | 
					        let enemy = this.add.animatedSprite(spriteKey, "primary");
 | 
				
			||||||
 | 
					        enemy.position.set(tilePos.x*32, tilePos.y*32);
 | 
				
			||||||
 | 
					        enemy.scale.set(2, 2);
 | 
				
			||||||
 | 
					        enemy.addPhysics();
 | 
				
			||||||
 | 
					        enemy.addAI(EnemyController, aiOptions); //TODO - add individual enemy AI
 | 
				
			||||||
 | 
					        enemy.setGroup("Enemy");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        enemy.setTrigger("player",Player_Events.PLAYER_HIT_ENEMY, null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					    protected handlePlayerEnemyCollision(player: AnimatedSprite, enemy: AnimatedSprite) {
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Increments the amount of life the player has
 | 
				
			||||||
 | 
					     * @param amt The amount to add to the player life
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected incPlayerLife(amt: number): void {
 | 
				
			||||||
 | 
					        GameLevel.livesCount += amt;
 | 
				
			||||||
 | 
					        this.livesCountLabel.text = "Lives: " + GameLevel.livesCount;
 | 
				
			||||||
 | 
					        if (GameLevel.livesCount == 0){
 | 
				
			||||||
 | 
					            Input.disableInput();
 | 
				
			||||||
 | 
					            this.player.disablePhysics();
 | 
				
			||||||
 | 
					            this.emitter.fireEvent(GameEventType.PLAY_SOUND, {key: "player_death", loop: false, holdReference: false});
 | 
				
			||||||
 | 
					            this.player.tweens.play("death");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns the player to spawn
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected respawnPlayer(): void {
 | 
				
			||||||
 | 
					        GameLevel.livesCount = 3;
 | 
				
			||||||
 | 
					        this.emitter.fireEvent(GameEventType.STOP_SOUND, {key: "level_music"});
 | 
				
			||||||
 | 
					        this.sceneManager.changeToScene(MainMenu, {});
 | 
				
			||||||
 | 
					        Input.enableInput();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user