From 72f64b4ca46c7390da0abd3935cb14bf214770d0 Mon Sep 17 00:00:00 2001 From: kts of kettek Date: Sun, 30 Jan 2022 06:42:07 -0800 Subject: [PATCH] Add gibs layer; randomize gib lifetime --- Engine/src/live/AnimalEntity.ts | 6 +++--- Engine/src/live/GibletEntity.ts | 1 + Engine/src/states/Game.ts | 17 ++++++++++++++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Engine/src/live/AnimalEntity.ts b/Engine/src/live/AnimalEntity.ts index 39fd79d..b4b6510 100644 --- a/Engine/src/live/AnimalEntity.ts +++ b/Engine/src/live/AnimalEntity.ts @@ -284,18 +284,18 @@ export class AnimalEntity extends Entity { let dir = Math.random() * 320 // 50% head gib if (Math.random() > 0.5) { - ctx.addEntity(new GibletEntity(`giblets.${this.sprite.spriteKey}.head.default.0`, dir+Math.random()*40, force+Math.random()*10), 'objects', p[0], p[1]) + ctx.addEntity(new GibletEntity(`giblets.${this.sprite.spriteKey}.head.default.0`, dir+Math.random()*40, force+Math.random()*10), 'gibs', p[0], p[1]) } // 44% leg gib per leg for (let i = 0; i < 4; i++) { if (Math.random() > 0.66) { - ctx.addEntity(new GibletEntity(`giblets.${this.sprite.spriteKey}.leg.default.0`, dir+Math.random()*40, force+Math.random()*10), 'objects', p[0], p[1]) + ctx.addEntity(new GibletEntity(`giblets.${this.sprite.spriteKey}.leg.default.0`, dir+Math.random()*40, force+Math.random()*10), 'gibs', p[0], p[1]) } } // 35% extra gibs per 8 for (let i = 0; i < 8; i++) { if (Math.random() > 0.65) { - ctx.addEntity(new GibletEntity(`giblets.any.chunk${Math.floor(1+Math.random()*4)}.default.0`, dir+Math.random()*40, force+Math.random()*10), 'objects', p[0], p[1]) + ctx.addEntity(new GibletEntity(`giblets.any.chunk${Math.floor(1+Math.random()*4)}.default.0`, dir+Math.random()*40, force+Math.random()*10), 'gibs', p[0], p[1]) } } playSound(`action/splat-v${1+Math.floor(Math.random()*7)}`, 0.5) diff --git a/Engine/src/live/GibletEntity.ts b/Engine/src/live/GibletEntity.ts index 031036c..d513bbe 100644 --- a/Engine/src/live/GibletEntity.ts +++ b/Engine/src/live/GibletEntity.ts @@ -10,6 +10,7 @@ export class GibletEntity extends Entity { let r = dir * (Math.PI/180) this.velocity[0] = Math.cos(r) * force this.velocity[1] = Math.sin(r) * force + this.lifetime = 10000 + Math.random()*10000 } update(delta: number, ctx?: WorldContext) { super.update(delta) diff --git a/Engine/src/states/Game.ts b/Engine/src/states/Game.ts index 1f56079..ba89b08 100644 --- a/Engine/src/states/Game.ts +++ b/Engine/src/states/Game.ts @@ -142,6 +142,18 @@ export function GameState(ctx: ContextI, selectedAnimal: string, selectedSegment if (l.title === 'objects') { playLayer = layer layer.container.sortableChildren = true + // Quick, make the gibs layer! + let gibLayer: Layer = { + title: 'gibs', + container: new PIXI.Container(), + decorations: [], + colorMatrix: new PIXI.filters.ColorMatrixFilter() + } + gibLayer.container.filters = [gibLayer.colorMatrix] + gibLayer.container.width = w.width + gibLayer.container.height = w.height + rootContainer.addChild(gibLayer.container) + layers.push(gibLayer) } layers.push(layer) @@ -233,6 +245,7 @@ export function GameState(ctx: ContextI, selectedAnimal: string, selectedSegment } let elapsed: number = 0 let update = (delta: number) => { + let w = segments[selectedSegment] let time = performance.now() let realDelta = time - lastTime lastTime = time @@ -263,7 +276,9 @@ export function GameState(ctx: ContextI, selectedAnimal: string, selectedSegment entity.act(desiredActions) // FIXME: This isn't the right place for this. rootContainer.position.set(Math.round(ctx.app.renderer.width/2), Math.round(ctx.app.renderer.height/2)) - rootContainer.pivot.set(Math.max(rootContainer.width/6, Math.min(entity.x, rootContainer.width/3)), Math.max(rootContainer.height/6, Math.min(entity.y, rootContainer.height/3))) + rootContainer.pivot.set(entity.x, entity.y) + + //rootContainer.pivot.set(Math.max(w.width/6, Math.min(entity.x, w.width/3)), Math.max(w.height/6, Math.min(entity.y, w.height/3))) } else { entity.think(realDelta) }