From c6b70c3bddc78a009f93550ae21b1bbbee3bbc62 Mon Sep 17 00:00:00 2001 From: kts of kettek Date: Sun, 30 Jan 2022 04:56:44 -0800 Subject: [PATCH] Allow segment selection --- Engine/src/states/Game.ts | 14 ++++++------- Engine/src/states/Menu.ts | 43 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/Engine/src/states/Game.ts b/Engine/src/states/Game.ts index 89f665d..c34549d 100644 --- a/Engine/src/states/Game.ts +++ b/Engine/src/states/Game.ts @@ -32,7 +32,7 @@ export interface Layer { colorMatrix: PIXIMissingColorMatrix } -export function GameState(ctx: ContextI, selectedAnimal: string): StateI { +export function GameState(ctx: ContextI, selectedAnimal: string, selectedSegment: string): StateI { //disableSound() let isNight = false let modeTimer = 0 @@ -107,7 +107,7 @@ export function GameState(ctx: ContextI, selectedAnimal: string): StateI { lastTime = performance.now() hookKeyboard() // Load the world segment. - let w = segments.world + let w = segments[selectedSegment] if (!w) return ctx.pop() // Add our world border. @@ -227,16 +227,16 @@ export function GameState(ctx: ContextI, selectedAnimal: string): StateI { nightfall(true) } // Run world sim. - while (elapsed >= 1/5) { - world.step(1/5) - elapsed -= 1/5 + while (elapsed >= 1/2) { + world.step(1/2) + elapsed -= 1/2 } // Update/render. - for (let layer of layers) { + /*for (let layer of layers) { for (let decoration of layer.decorations) { decoration.update(realDelta) } - } + }*/ for (let entity of entities) { if (isAnimalEntity(entity)) { if (entity.isPlayer) { diff --git a/Engine/src/states/Menu.ts b/Engine/src/states/Menu.ts index 1acebb2..e75d460 100644 --- a/Engine/src/states/Menu.ts +++ b/Engine/src/states/Menu.ts @@ -5,6 +5,7 @@ import * as PIXI from 'pixi.js' import { GameState } from './Game' import { SpriteInstance } from '../shared/sprites' import { animals } from '../data/animals' +import { segments } from '../shared/segments' interface MenuItem { text: PIXI.Text, @@ -14,6 +15,8 @@ export function MenuState(ctx: ContextI): StateI { let container = new PIXI.Container() let scaryBoi = new SpriteInstance('ui.menu.decorative.scary-boi.0') let scaryBun = new SpriteInstance('ui.menu.decorative.scary-bun.0') + + // Animal Selections let animalSprites: SpriteInstance[] = Object.keys(animals).map(v => { let s = new SpriteInstance(`${v}.animal.stand.west.0`) s.container.interactive = true @@ -39,6 +42,32 @@ export function MenuState(ctx: ContextI): StateI { new OutlineFilter(2, 0x99ff99) ] + // Segment Selections + let segmentItems: PIXI.Text[] = Object.keys(segments).map(v => { + let s = new PIXI.Text(v, new PIXI.TextStyle({ + fontFamily: 'Arial', + fontSize: 30, + fill: ['#000000'], + })) + s.interactive = true + s.on('pointerdown', () => { + selectedSegmentName = v + selectedSegmentItem.filters = [] + selectedSegmentItem = s + selectedSegmentItem.filters = [ + new OutlineFilter(2, 0x99ff99) + ] + }) + container.addChild(s) + return s + }) + let selectedSegmentItem: PIXI.Text = segmentItems.find(v=>v.text==='world') ?? segmentItems[0] + let selectedSegmentName = 'world' + selectedSegmentItem.filters = [ + new OutlineFilter(2, 0x99ff99) + ] + + let selectedText = new PIXI.Text(selectedAnimalName, new PIXI.TextStyle({ fontFamily: 'Arial', fontSize: 30, @@ -76,7 +105,7 @@ export function MenuState(ctx: ContextI): StateI { let el = new PIXI.Text('Start Game', blurStyle) el.interactive = true el.on('pointerdown', () => { - ctx.push(GameState(ctx, selectedAnimalName)) + ctx.push(GameState(ctx, selectedAnimalName, selectedSegmentName)) }) el.on('pointerover', () => { el.style = hoverStyle @@ -128,6 +157,18 @@ export function MenuState(ctx: ContextI): StateI { } yPos += animalSprites[0].container.height + 32 + // Draw our segment selections. + for (let item of segmentItems) { + item.x = ctx.app.view.width / 2 - item.width / 2 + if (item.width > maxWidth) { + maxWidth = item.width + } + item.y = yPos + yPos += item.height + 8 + } + yPos += 32 + + // Draw rest of the garbage. for (let item of menuItems) { item.x = ctx.app.view.width / 2 - item.width / 2 if (item.width > maxWidth) {