From 9ab05fe40bf1f948a23d32a530999d88a8a2dbab Mon Sep 17 00:00:00 2001 From: kts of kettek Date: Sun, 30 Jan 2022 00:24:51 -0800 Subject: [PATCH] Adjust action management --- Engine/src/live/Action.ts | 17 +++++++++++ Engine/src/states/Game.ts | 62 +++++++++++++-------------------------- 2 files changed, 37 insertions(+), 42 deletions(-) diff --git a/Engine/src/live/Action.ts b/Engine/src/live/Action.ts index 6aa447d..5c7da87 100644 --- a/Engine/src/live/Action.ts +++ b/Engine/src/live/Action.ts @@ -2,3 +2,20 @@ export interface Action { type: string priority: number } + +export function adjustAction(actions: Action[], type: string, v: number, inc?: boolean): Action[] { + let action = actions.find(v=>v.type===type) + if (!action) { + if (v === 0) return actions + actions.push({ + type: type, + priority: v, + }) + } else { + action.priority = inc?action.priority+v:v + if (action.priority <= 0) { + actions = actions.filter(v=>v!==action) + } + } + return actions +} diff --git a/Engine/src/states/Game.ts b/Engine/src/states/Game.ts index d6c311b..87caf6a 100644 --- a/Engine/src/states/Game.ts +++ b/Engine/src/states/Game.ts @@ -11,7 +11,7 @@ import { SegmentZone } from "../data/segment" import { Zone } from "../live/Zone" import { Entity, Sensor } from "../live/Entity" import { AnimalEntity, isAnimalEntity } from "../live/AnimalEntity" -import { Action } from "../live/Action" +import { Action, adjustAction } from "../live/Action" import { WorldContext } from "../live/World" import { animals } from "../data/animals" @@ -218,13 +218,7 @@ export function GameState(ctx: ContextI): StateI { 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))) } else { - //if (entity.body?.) - // Some sort of simple AI. - if (!entity.isMonster) { - // Slowly wander and run from player if close. - } else { - // Heavily wander and run towards player if close. - } + entity.think(realDelta) } } else { //console.log('hmm, we do be tickin', entity, entity.x, entity.y) @@ -327,42 +321,27 @@ export function GameState(ctx: ContextI): StateI { } let desiredActions: Action[] = [] - let adjustAction = (type: string, v: number, inc?: boolean) => { - let action = desiredActions.find(v=>v.type===type) - if (!action) { - if (v === 0) return - desiredActions.push({ - type: type, - priority: v, - }) - } else { - action.priority = inc?action.priority+v:v - if (action.priority <= 0) { - desiredActions = desiredActions.filter(v=>v!==action) - } - } - } let keyup = (e: KeyboardEvent) => { if (e.key === 'ArrowLeft') { - adjustAction('west', 0) + desiredActions = adjustAction(desiredActions, 'west', 0) } else if (e.key === 'ArrowRight') { - adjustAction('east', 0) + desiredActions = adjustAction(desiredActions, 'east', 0) } else if (e.key === 'ArrowUp') { - adjustAction('north', 0) + desiredActions = adjustAction(desiredActions, 'north', 0) } else if (e.key === 'ArrowDown') { - adjustAction('south', 0) + desiredActions = adjustAction(desiredActions, 'south', 0) } } let keydown = (e: KeyboardEvent) => { if (e.repeat) return if (e.key === 'ArrowLeft') { - adjustAction('west', 1) + desiredActions = adjustAction(desiredActions, 'west', 1) } else if (e.key === 'ArrowRight') { - adjustAction('east', 1) + desiredActions = adjustAction(desiredActions, 'east', 1) } else if (e.key === 'ArrowUp') { - adjustAction('north', 1) + desiredActions = adjustAction(desiredActions, 'north', 1) } else if (e.key === 'ArrowDown') { - adjustAction('south', 1) + desiredActions = adjustAction(desiredActions, 'south', 1) } } let hookKeyboard = () => { @@ -386,22 +365,21 @@ export function GameState(ctx: ContextI): StateI { for (let gp of navigator.getGamepads()) { if (!gp || !gp.connected) break if (gp.axes[0] < 0) { - adjustAction('west', Math.abs(gp.axes[0])) + desiredActions = adjustAction(desiredActions, 'west', Math.abs(gp.axes[0])) } else if (gp.axes[0] > 0) { - adjustAction('east', gp.axes[0]) + desiredActions = adjustAction(desiredActions, 'east', gp.axes[0]) } else { - adjustAction('east', 0) - adjustAction('west', 0) + desiredActions = adjustAction(desiredActions, 'east', 0) + desiredActions = adjustAction(desiredActions, 'west', 0) } if (gp.axes[1] < 0) { - adjustAction('north', Math.abs(gp.axes[1])) + desiredActions = adjustAction(desiredActions, 'north', Math.abs(gp.axes[1])) } else if (gp.axes[1] > 0) { - adjustAction('south', gp.axes[1]) + desiredActions = adjustAction(desiredActions, 'south', gp.axes[1]) } else { - adjustAction('north', 0) - adjustAction('south', 0) + desiredActions = adjustAction(desiredActions, 'north', 0) + desiredActions = adjustAction(desiredActions, 'south', 0) } - //console.log(gp.axes, gp.buttons) let attackHeld = false for (let i = 0; i < 4; i++) { let btn = gp.buttons[i] @@ -410,9 +388,9 @@ export function GameState(ctx: ContextI): StateI { } } if (attackHeld) { - adjustAction('attack', 2) + desiredActions = adjustAction(desiredActions, 'attack', 2) } else if (desiredActions.find(v=>v.type==='attack')) { - adjustAction('attack', 0) + desiredActions = adjustAction(desiredActions, 'attack', 0) } } }