Allow segment selection

This commit is contained in:
Ketchetwahmeegwun T. Southall 2022-01-30 04:56:44 -08:00
parent f4e6e3cd52
commit c6b70c3bdd
2 changed files with 49 additions and 8 deletions

View File

@ -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) {

View File

@ -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) {