we are getting somewhere, but i dont know where. also i apologise for my comments since they make no sense

This commit is contained in:
koneko 2024-12-24 23:47:34 +01:00
parent cd2c16f7f5
commit 8d20a4a9f5
10 changed files with 139 additions and 46 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

BIN
public/assets/gui/banner_01.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

BIN
public/assets/gui/banner_02.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

View File

@ -28,11 +28,11 @@ export default class GameAssets {
GameAssets.Frame02Texture = await PIXI.Assets.load({ GameAssets.Frame02Texture = await PIXI.Assets.load({
src: '/assets/gui/frame_02.png', src: '/assets/gui/frame_02.png',
}); });
GameAssets.FrameGreenTexture = await PIXI.Assets.load({ GameAssets.FrameBackground = await PIXI.Assets.load({
src: '/assets/gui/frame_green.png', src: '/assets/gui/background_01.png',
}); });
GameAssets.FrameRedTexture = await PIXI.Assets.load({ GameAssets.FrameTowerTab = await PIXI.Assets.load({
src: '/assets/gui/frame_red.png', src: '/assets/gui/background_02.png',
}); });
GameAssets.FrameVioletTexture = await PIXI.Assets.load({ GameAssets.FrameVioletTexture = await PIXI.Assets.load({
src: '/assets/gui/frame_violet.png', src: '/assets/gui/frame_violet.png',
@ -87,8 +87,8 @@ export default class GameAssets {
public static Frame01Texture: PIXI.Texture; public static Frame01Texture: PIXI.Texture;
public static Frame02Texture: PIXI.Texture; public static Frame02Texture: PIXI.Texture;
public static FrameGreenTexture: PIXI.Texture; public static FrameBackground: PIXI.Texture;
public static FrameRedTexture: PIXI.Texture; public static FrameTowerTab: PIXI.Texture;
public static FrameVioletTexture: PIXI.Texture; public static FrameVioletTexture: PIXI.Texture;
public static Button01Texture: PIXI.Texture; public static Button01Texture: PIXI.Texture;
public static Button02Texture: PIXI.Texture; public static Button02Texture: PIXI.Texture;

View File

@ -10,6 +10,7 @@ export class Cell extends GameObject {
public row: number; public row: number;
public column: number; public column: number;
public isPath: boolean = false; public isPath: boolean = false;
private g: PIXI.Graphics;
constructor(type: TerrainType, row: number, column: number, isPath: boolean) { constructor(type: TerrainType, row: number, column: number, isPath: boolean) {
super(); super();
@ -22,23 +23,9 @@ export class Cell extends GameObject {
this.bb.width = 64; this.bb.width = 64;
this.bb.height = 64; this.bb.height = 64;
Globals.Grid.container.addChild(this.container); Globals.Grid.container.addChild(this.container);
let g = new PIXI.Graphics();
g.rect(0, 0, this.bb.width, this.bb.height);
switch (this.type) {
case TerrainType.Restricted:
g.fill(0xff0000);
break;
case TerrainType.Path:
g.fill(0xff00ff);
break;
case TerrainType.Buildable:
g.stroke(0x00ff00);
break;
}
this.container.addChild(g);
this.container.x = this.bb.x; this.container.x = this.bb.x;
this.container.y = this.bb.y; this.container.y = this.bb.y;
// if (!GameAssets.DebuggingEnabled) return; if (!GameAssets.DebuggingEnabled) return;
const text = new PIXI.Text({ const text = new PIXI.Text({
text: `${this.row}|${this.column}`, text: `${this.row}|${this.column}`,
style: new PIXI.TextStyle({ style: new PIXI.TextStyle({
@ -53,6 +40,28 @@ export class Cell extends GameObject {
text.y = this.bb.height / 2; text.y = this.bb.height / 2;
if (this.isPath) text.text += 'P'; if (this.isPath) text.text += 'P';
} }
public gDraw() {
this.g = new PIXI.Graphics();
this.g.rect(0, 0, this.bb.width, this.bb.height);
switch (this.type) {
case TerrainType.Restricted:
this.g.fill({ color: 0x222222, alpha: 0.5 });
break;
case TerrainType.Path:
this.g.fill({ color: 0x222222, alpha: 0.5 });
break;
case TerrainType.Buildable:
this.g.stroke({ color: 0x00ff00, alpha: 0.1 });
break;
}
this.container.addChild(this.g);
}
public gClear() {
if (this.g != null) {
this.container.removeChild(this.g);
this.g.destroy();
}
}
public update() {} public update() {}
} }
@ -60,6 +69,7 @@ export class Grid extends GameObject {
private gameMap: GameMapDefinition; private gameMap: GameMapDefinition;
private cells: Cell[] = []; private cells: Cell[] = [];
public creeps: Creep[] = []; public creeps: Creep[] = [];
public gridShown: boolean = false;
constructor(map: GameMapDefinition, missionIndex) { constructor(map: GameMapDefinition, missionIndex) {
super(); super();
@ -90,6 +100,17 @@ export class Grid extends GameObject {
} }
} }
} }
public toggleGrid() {
this.cells.forEach((cell) => {
if (this.gridShown) {
cell.gClear();
} else {
cell.gDraw();
}
// smort
this.gridShown = !this.gridShown;
});
}
public addCreep(creep: Creep) { public addCreep(creep: Creep) {
console.log('ADD CREEP'); console.log('ADD CREEP');
this.creeps.push(creep); this.creeps.push(creep);

View File

@ -15,17 +15,17 @@ export default class MissionStats extends GameObject {
public setHP(hp: number) { public setHP(hp: number) {
this.hp = hp; this.hp = hp;
this.healthText.text = 'HP: ' + this.hp; this.healthText.text = this.hp;
} }
public takeDamage(damage: number) { public takeDamage(damage: number) {
this.hp -= damage; this.hp -= damage;
this.healthText.text = 'HP: ' + this.hp; this.healthText.text = this.hp;
} }
public setGold(gold: number) { public setGold(gold: number) {
this.gold = gold; this.gold = gold;
this.goldText.text = 'Gold: ' + this.gold; this.goldText.text = this.gold;
} }
constructor(initialHP: number, initialGold: number) { constructor(initialHP: number, initialGold: number) {
@ -36,38 +36,40 @@ export default class MissionStats extends GameObject {
this.container.y = 20; this.container.y = 20;
Globals.app.stage.addChild(this.container); Globals.app.stage.addChild(this.container);
this.healthText = new PIXI.Text({ this.healthText = new PIXI.Text({
text: `HP: ${this.hp}`, text: `${this.hp}`,
style: new PIXI.TextStyle({ style: new PIXI.TextStyle({
fill: 'white', fill: 'red',
fontSize: 24, fontSize: 36,
fontWeight: 'bold', fontWeight: 'bold',
dropShadow: true, dropShadow: true,
}), }),
}); });
this.healthText.x = 200;
this.goldText = new PIXI.Text({ this.goldText = new PIXI.Text({
text: `Gold: ${this.gold}`, text: `${this.gold}`,
style: new PIXI.TextStyle({ style: new PIXI.TextStyle({
fill: 'white', fill: 'gold',
fontSize: 24, fontSize: 36,
fontWeight: 'bold', fontWeight: 'bold',
dropShadow: true, dropShadow: true,
}), }),
}); });
this.goldText.x = 200;
this.goldText.y = 30;
const healthSprite = new PIXI.Sprite(Assets.HealthTexture); const healthSprite = new PIXI.Sprite(Assets.HealthTexture);
healthSprite.x = 165;
healthSprite.width = 30;
healthSprite.height = 26;
healthSprite.y = 1;
const goldSprite = new PIXI.Sprite(Assets.GoldTexture); const goldSprite = new PIXI.Sprite(Assets.GoldTexture);
goldSprite.x = 165;
goldSprite.width = 30; this.healthText.x = 200;
goldSprite.height = 26; this.healthText.y = -15;
goldSprite.y = 30; healthSprite.x = 160;
healthSprite.width = 36;
healthSprite.height = 32;
healthSprite.y = -10;
this.goldText.x = 200;
this.goldText.y = 20;
goldSprite.x = 150;
goldSprite.width = 56;
goldSprite.height = 56;
goldSprite.y = 15;
this.container.addChild(this.healthText); this.container.addChild(this.healthText);
this.container.addChild(this.goldText); this.container.addChild(this.goldText);
this.container.addChild(healthSprite); this.container.addChild(healthSprite);

28
src/classes/gui/GemTab.ts Normal file
View File

@ -0,0 +1,28 @@
import * as PIXI from 'pixi.js';
import GuiObject from '../GuiObject';
import GameAssets from '../Assets';
export default class GemTab extends GuiObject {
private bounds: PIXI.Rectangle;
private towerTabSprite: PIXI.NineSliceSprite;
constructor(bounds: PIXI.Rectangle) {
super(false);
this.bounds = bounds;
this.container.x = this.bounds.x;
this.container.y = this.bounds.y;
this.towerTabSprite = new PIXI.NineSliceSprite({
texture: GameAssets.FrameTowerTab,
leftWidth: 500,
topHeight: 500,
rightWidth: 500,
bottomHeight: 500,
});
this.towerTabSprite.x = 0;
this.towerTabSprite.y = 0;
this.towerTabSprite.width = this.bounds.width;
this.towerTabSprite.height = this.bounds.height;
this.container.addChild(this.towerTabSprite);
}
}

View File

@ -1,10 +1,14 @@
import * as PIXI from 'pixi.js'; import * as PIXI from 'pixi.js';
import GuiObject from '../GuiObject'; import GuiObject from '../GuiObject';
import GameAssets from '../Assets'; import GameAssets from '../Assets';
import TowerTab from './TowerTab';
import GemTab from './GemTab';
export default class Sidebar extends GuiObject { export default class Sidebar extends GuiObject {
private bounds: PIXI.Rectangle; private bounds: PIXI.Rectangle;
private sidebarSprite: PIXI.NineSliceSprite; private sidebarSprite: PIXI.NineSliceSprite;
private towerTab: TowerTab;
private gemTab: GemTab;
constructor(bounds: PIXI.Rectangle) { constructor(bounds: PIXI.Rectangle) {
super(false); super(false);
@ -21,7 +25,16 @@ export default class Sidebar extends GuiObject {
this.sidebarSprite.x = 40; this.sidebarSprite.x = 40;
this.sidebarSprite.y = -40; this.sidebarSprite.y = -40;
this.sidebarSprite.width = this.bounds.width + 40; this.sidebarSprite.width = this.bounds.width + 40;
this.sidebarSprite.height = this.bounds.height + 41; this.sidebarSprite.height = this.bounds.height + 80;
this.container.addChild(this.sidebarSprite); this.container.addChild(this.sidebarSprite);
const towerTabRect = new PIXI.Rectangle(60, 20, this.bounds.width - 65, 150);
this.towerTab = new TowerTab(towerTabRect);
this.container.addChild(this.towerTab.container);
const gemTabRect = new PIXI.Rectangle(60, 180, this.bounds.width - 65, this.bounds.height - 280);
this.gemTab = new GemTab(gemTabRect);
this.container.addChild(this.gemTab.container);
} }
} }

View File

@ -0,0 +1,29 @@
import * as PIXI from 'pixi.js';
import GuiObject from '../GuiObject';
import GameAssets from '../Assets';
export default class TowerTab extends GuiObject {
private bounds: PIXI.Rectangle;
private towerTabSprite: PIXI.NineSliceSprite;
constructor(bounds: PIXI.Rectangle) {
super(false);
this.bounds = bounds;
this.container.x = this.bounds.x;
this.container.y = this.bounds.y;
this.towerTabSprite = new PIXI.NineSliceSprite({
texture: GameAssets.FrameTowerTab,
leftWidth: 500,
topHeight: 500,
rightWidth: 500,
bottomHeight: 500,
roundPixels: true,
});
this.towerTabSprite.x = 0;
this.towerTabSprite.y = 0;
this.towerTabSprite.width = this.bounds.width;
this.towerTabSprite.height = this.bounds.height;
this.container.addChild(this.towerTabSprite);
}
}

View File

@ -42,8 +42,8 @@ export class GameScene extends Scene {
this.ticker.minFPS = 30; this.ticker.minFPS = 30;
this.ticker.add(() => this.update(this.ticker.elapsedMS)); // bruh this.ticker.add(() => this.update(this.ticker.elapsedMS)); // bruh
this.ticker.start(); this.ticker.start();
const SidebarRect = new PIXI.Rectangle(64 * 30 - 350, 0, 350, Globals.app.canvas.height); const SidebarRect = new PIXI.Rectangle(64 * 30 - 360, 0, 360, Globals.app.canvas.height);
const changeRoundButtonRect = new PIXI.Rectangle(50, Globals.app.canvas.height - 100, 300, 100); const changeRoundButtonRect = new PIXI.Rectangle(50, Globals.app.canvas.height - 100, 310, 100);
new Grid(this.mission.gameMap, this.missionIndex); new Grid(this.mission.gameMap, this.missionIndex);
new WaveManager(this.mission.rounds, this.mission.gameMap.paths); new WaveManager(this.mission.rounds, this.mission.gameMap.paths);
Globals.WaveManager.events.on(WaveManagerEvents.CreepSpawned, (creep: Creep) => { Globals.WaveManager.events.on(WaveManagerEvents.CreepSpawned, (creep: Creep) => {