CabinGame/Program/src/util.ts

50 lines
2 KiB
TypeScript
Raw Normal View History

import { Entity, ComponentConstructor, Component, World } from "ecsy"
import { Loader, interaction } from "pixi.js"
import { Human } from "./Components/human"
import { Name } from "./Components/name"
import { Appearance } from "./Components/appearance"
import { InCabin } from "./Components/inCabin"
import { OrderZ } from "./Components/rendering/orderZ"
import { WalkRandomly } from "./Components/walkRandomly"
import { Position } from "./Components/position"
import { roomBounds, FirstNames, LastNames } from "./constants"
import { Clickable } from "./Components/clickable"
import globals from "./globals"
2020-02-17 11:56:41 +00:00
export function addOrSetComponent(entity: Entity, Component: ComponentConstructor<Component>, values: any) {
if(entity.hasComponent(Component)){
//component exists, copy values into it
let component: any = entity.getMutableComponent(Component)
if(component.copy){
component.copy(values)
} else {
for (let name in values) {
2020-02-17 11:56:41 +00:00
component[name]= values[name]
}
}
} else {
//component doesn't exist, add new one
entity.addComponent(Component, values)
}
2020-02-17 11:56:41 +00:00
}
export function randomArrayValue(array: any[]):any{
let randomIndex = Math.floor(Math.random() * array.length)
return array[randomIndex]
}
2020-02-17 11:56:41 +00:00
export function createRandomHuman(world: World){
let resources = Loader.shared.resources;
let entity = world.createEntity()
entity
.addComponent(Human)
.addComponent(Name, <Name>{first: randomArrayValue(FirstNames), last:randomArrayValue(LastNames)})
.addComponent(Appearance, <Appearance>{idleTexture: resources["Human"].texture}) //Todo: generate appearance from body traits instead?
.addComponent(InCabin)
.addComponent(Position, <Position>{value: roomBounds.randomPoint()})
.addComponent(OrderZ)
.addComponent(WalkRandomly)
//todo: change this into selecing the human instead of killing it...
.addComponent(Clickable, { actions: { "click": (event: interaction.InteractionEvent) => {globals.selected.set(entity)} }})
}