Adjust action management

This commit is contained in:
Ketchetwahmeegwun T. Southall 2022-01-30 00:24:51 -08:00
parent 8f02009062
commit 9ab05fe40b
2 changed files with 37 additions and 42 deletions

View File

@ -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
}

View File

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