diff --git a/dist/shattered_sword_assets/jsons/forest_template.json b/dist/shattered_sword_assets/jsons/forest_template.json index 11e2f91..7d5a1d0 100644 --- a/dist/shattered_sword_assets/jsons/forest_template.json +++ b/dist/shattered_sword_assets/jsons/forest_template.json @@ -100,6 +100,9 @@ "width": 3, "alt_tile": [477, 479] } + ], + "sprites":[ + ] }, { diff --git a/src/demos/PlatformerPlayerController.ts b/src/demos/PlatformerPlayerController.ts index 13358a7..7b9b707 100644 --- a/src/demos/PlatformerPlayerController.ts +++ b/src/demos/PlatformerPlayerController.ts @@ -50,7 +50,7 @@ export default class PlayerController extends ControllerAI { if(velocity.x === 0){ this.owner.animation.playIfNotAlready("IDLE", true); } else { - console.log("walking anim"); + this.owner.animation.playIfNotAlready("WALK", true); } } diff --git a/src/main.ts b/src/main.ts index c1d91fb..54ce7b2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -12,7 +12,8 @@ import WeaponTypeRegistry from "./shattered_sword/Registry/WeaponTypeRegistry"; // Set up options for our game let options = { - canvasSize: {x: window.innerWidth, y: window.innerHeight}, // The size of the game + canvasSize: {x : 1200, y:1000}, + //canvasSize: {x: window.innerWidth, y: window.innerHeight}, // The size of the game clearColor: {r: 0, g: 0, b: 0}, // The color the game clears to inputs: [ {name: "left", keys: ["a", "arrowleft"]}, //TODO - add arrow keys diff --git a/src/shattered_sword/Player/PlayerController.ts b/src/shattered_sword/Player/PlayerController.ts index c40d8cd..f193025 100644 --- a/src/shattered_sword/Player/PlayerController.ts +++ b/src/shattered_sword/Player/PlayerController.ts @@ -41,10 +41,10 @@ export enum BuffType { } -type Buff = { - "type": BuffType, - "value": number, - "bonus": boolean, +export class Buff { + "type": BuffType; + "value": number; + //"bonus": boolean, //need to determine what bonus gives } type Buffs = [ @@ -104,6 +104,31 @@ export default class PlayerController extends StateMachineAI implements BattlerA return undefined; } + + //generate array of 3 different buffs + /** + * generate array of 3 buffs + * @returns array of 3 differently typed buffs + */ + static generateBuffs() : Buff[]{ + let num = Number(Math.random().toPrecision(1)) * 10; //number from 1 to 10 + let array : Buff[] = [ + {type:BuffType.ATK, value:num}, + {type:BuffType.HEALTH, value:num}, + {type:BuffType.DEF, value:num}, + {type:BuffType.SPEED, value:num}, + {type:BuffType.RANGE, value:num/10} //range is a multiplier percent + ]; + + // Shuffle array + const shuffled = array.sort(() => 0.5 - Math.random()); + + // Get sub-array of first 3 elements after shuffled + let selected = shuffled.slice(0, 3); + + return selected; + } + /** * Add given buff to the player * @param buff Given buff @@ -156,7 +181,7 @@ export default class PlayerController extends StateMachineAI implements BattlerA this.CURRENT_BUFFS = {hp:0, atk:0, def:0, speed:0, range:0}; //to test the buffs - //this.addBuff( {type:BuffType.HEALTH, value:1, bonus:false} ); + this.addBuff( {type:BuffType.HEALTH, value:1} ); //this.addBuff( {type:BuffType.RANGE, value:1, bonus:false} ); } @@ -198,7 +223,7 @@ export default class PlayerController extends StateMachineAI implements BattlerA Debug.log("playerstate", "Player State: Fall"); } Debug.log("playerspeed", "x: " + this.velocity.x + ", y:" + this.velocity.y); - + Debug.log("player Coords:", this.owner.position ); //testing the attacks here, may be moved to another place latera if(Input.isJustPressed("attack")){ diff --git a/src/shattered_sword/Scenes/GameLevel.ts b/src/shattered_sword/Scenes/GameLevel.ts index 9e50583..ef8761b 100644 --- a/src/shattered_sword/Scenes/GameLevel.ts +++ b/src/shattered_sword/Scenes/GameLevel.ts @@ -25,7 +25,9 @@ import EnemyAI from "../AI/EnemyAI"; import BattlerAI from "../AI/BattlerAI"; import InventoryManager from "../GameSystems/InventoryManager"; import Item from "../GameSystems/items/Item"; - +import Layer from "../../Wolfie2D/Scene/Layer"; +import Button from "../../Wolfie2D/Nodes/UIElements/Button"; +import { Buff } from "../Player/PlayerController"; @@ -60,6 +62,8 @@ export default class GameLevel extends Scene { // Health UI protected healthLabel: Label; + //may need exp label + //may need mp label //seed UI protected seedLabel: Label; @@ -69,7 +73,14 @@ export default class GameLevel extends Scene { // A list of enemies private enemies: Array; - + + //buffs layer + buffLayer: Layer; + buffButton1 : Button; + buffButton2 : Button; + buffButton3 : Button; + buffs: Array; + randomSeed: number; loadScene(): void { //can load player sprite here @@ -94,13 +105,12 @@ export default class GameLevel extends Scene { } startScene(): void { - + //call super after extending story with scene - + // Do the game level standard initializations - this.initLayers(); this.initViewport(); - + this.initLayers(); // Create the battle manager this.battleManager = new BattleManager(); @@ -109,24 +119,21 @@ export default class GameLevel extends Scene { // Initialize the items array - this represents items that are in the game world this.items = new Array(); - // Create an enemies array - this.enemies = new Array(); - this.initPlayer(); + //subscribe to relevant events this.subscribeToEvents(); this.addUI(); - + // Create an enemies array + this.enemies = new Array(); // Send the player and enemies to the battle manager this.battleManager.setPlayers([this.player._ai]); // Initialize all enemies //this.initializeEnemies(); this.battleManager.setEnemies(this.enemies.map(enemy => enemy._ai)); - // Subscribe to relevant events - //this.receiver.subscribe(""); + - // Initialize the timers this.respawnTimer = new Timer(1000, () => { if(GameLevel.livesCount === 0){ @@ -137,16 +144,19 @@ export default class GameLevel extends Scene { 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 @@ -170,9 +180,33 @@ export default class GameLevel extends Scene { console.log("enemy destroyed"); node.destroy(); + //TODO - this is for testing, add some chance here later + this.emitter.fireEvent(Player_Events.GIVE_BUFF); break; - + case Player_Events.GIVE_BUFF: + this.buffs = PlayerController.generateBuffs(); + this.buffButton1.text = "Increase "+this.buffs[0].type + "\n by "+this.buffs[0].value; + this.buffButton2.text = "Increase "+this.buffs[1].type + "\n by "+this.buffs[1].value; + this.buffButton3.text = "Increase "+this.buffs[2].type + "\n by "+this.buffs[2].value; + this.buffLayer.enable(); + + break; + case "buff1": + console.log("button 1 pressed"); + (this.player._ai).addBuff(this.buffs[0]); + this.buffLayer.disable(); + break; + case "buff2": + console.log("button 2 pressed"); + (this.player._ai).addBuff(this.buffs[1]); + this.buffLayer.disable(); + break; + case "buff3": + console.log("button 3 pressed"); + (this.player._ai).addBuff(this.buffs[2]); + this.buffLayer.disable(); + break; } } @@ -202,7 +236,6 @@ export default class GameLevel extends Scene { }); } - } @@ -215,6 +248,8 @@ export default class GameLevel extends Scene { // Add a layer for players and enemies this.addLayer("primary", 1); + + this.buffLayer = this.addUILayer("buffLayer"); //TODO - test depth later, may be just a regular Layer } /** @@ -233,8 +268,12 @@ export default class GameLevel extends Scene { Player_Events.ENEMY_KILLED, Player_Events.LEVEL_START, Player_Events.LEVEL_END, - Player_Events.PLAYER_KILLED + Player_Events.PLAYER_KILLED, + Player_Events.GIVE_BUFF, ]); + this.receiver.subscribe("buff1"); + this.receiver.subscribe("buff2"); + this.receiver.subscribe("buff3"); } // TODO - @@ -248,14 +287,14 @@ export default class GameLevel extends Scene { this.healthLabel.font = "PixelSimple"; //seed label - - //this.seedLabel =