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; // Health UI protected healthLabel: Label; 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"); //TODO - uncomment when done testing // Initially disable player movement //Input.disableInput(); Input.enableInput(); } updateScene(deltaT: number){ // Handle events and update the UI if needed while(this.receiver.hasNextEvent()){ let event = this.receiver.getNextEvent(); switch(event.type){ } } //handle collisions //move background // Get the viewport center and padded size const viewportCenter = this.viewport.getCenter().clone(); const baseViewportSize = this.viewport.getHalfSize().scaled(2); //check position of player this.playerFalloff(viewportCenter, baseViewportSize); } /** * 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 this.healthLabel =