diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6f3a291 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/src/shattered_sword/Scenes/MainMenu.ts b/src/shattered_sword/Scenes/MainMenu.ts index 3ef12dc..c8cd4bf 100644 --- a/src/shattered_sword/Scenes/MainMenu.ts +++ b/src/shattered_sword/Scenes/MainMenu.ts @@ -1,15 +1,175 @@ import Scene from "../../Wolfie2D/Scene/Scene"; import ConfigManager from "../Tools/ConfigManager"; import SaveManager from "../Tools/SaveManager"; +import Vec2 from "../../Wolfie2D/DataTypes/Vec2"; +import { GameEventType } from "../../Wolfie2D/Events/GameEventType"; +import AnimatedSprite from "../../Wolfie2D/Nodes/Sprites/AnimatedSprite"; +import Button from "../../Wolfie2D/Nodes/UIElements/Button"; +import { UIElementType } from "../../Wolfie2D/Nodes/UIElements/UIElementTypes"; +import Color from "../../Wolfie2D/Utils/Color"; +import Layer from "../../Wolfie2D/Scene/Layer"; +import Label from "../../Wolfie2D/Nodes/UIElements/Label"; +import Levels from "./Levels"; export default class MainMenu extends Scene { protected config: ConfigManager; protected save: SaveManager; + + // Layers, for multiple main menu screens + private mainMenu: Layer; + private about: Layer; + private control: Layer; - // TODO - startScene(): void { + + animatedSprite: AnimatedSprite; + + loadScene(): void { + // Load the menu song + //this.load.audio("menu", "hw5_assets/music/menu.mp3"); + } + + //TODO + + startScene(): void{ this.config = new ConfigManager(); this.save = new SaveManager(); - } + + + // Scene has started, so start playing music + //this.emitter.fireEvent(GameEventType.PLAY_SOUND, {key: "menu", loop: true, holdReference: true}); + + const center = this.viewport.getCenter(); + + // The main menu + this.mainMenu = this.addUILayer("mainMenu"); + + // Add map button, and give it an event to emit on press + const map = this.add.uiElement(UIElementType.BUTTON, "mainMenu", {position: new Vec2(center.x, center.y - 100), text: "Map"}); + map.size.set(200, 50); + map.borderWidth = 2; + map.borderColor = Color.WHITE; + map.backgroundColor = Color.TRANSPARENT; + map.onClickEventId = "map"; + + + // Add about button + const about = this.add.uiElement(UIElementType.BUTTON, "mainMenu", {position: new Vec2(center.x, center.y + 100), text: "About"}); + about.size.set(200, 50); + about.borderWidth = 2; + about.borderColor = Color.WHITE; + about.backgroundColor = Color.TRANSPARENT; + about.onClickEventId = "about"; + + + // Add control button, and give it an event to emit on press + const control = this.add.uiElement(UIElementType.BUTTON, "mainMenu", {position: new Vec2(center.x, center.y), text: "Controls"}); + control.size.set(200, 50); + control.borderWidth = 2; + control.borderColor = Color.WHITE; + control.backgroundColor = Color.TRANSPARENT; + control.onClickEventId = "control"; + + /* ########## ABOUT SCREEN ########## */ + this.about = this.addUILayer("about"); + this.about.setHidden(true); + + const aboutHeader =