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 } from "./constants" import { Clickable } from "./Components/clickable" export function addOrSetComponent(entity: Entity, Component: ComponentConstructor, 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) { component[name]= values[name] } } } else { //component doesn't exist, add new one entity.addComponent(Component, values) } } export function randomArrayValue(array: any[]):any{ let randomIndex = Math.random() * array.length return array[randomIndex] } export function createRandomHuman(world: World){ let resources = Loader.shared.resources; let entity = world.createEntity() entity .addComponent(Human) .addComponent(Name, {first: "mary", last:"sue"}) .addComponent(Appearance, {idleTexture: resources["Human"].texture}) //Todo: generate appearance from body traits instead? .addComponent(InCabin) .addComponent(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) => {entity.remove();} }}) }