Begin ItemProps and TaskStates

master
Bronwen 2021-06-24 17:34:05 -04:00
parent b6a0cd4811
commit 204e5bdad6
3 changed files with 43 additions and 6 deletions

View File

@ -1,4 +1,4 @@
import { Item } from '@items';
import { Item, ItemFilter, ItemProperty, ItemState } from '@items';
export const LOG = new Item().setName("Log").setId('core:resources/log');
export const STICK = new Item().setName("Stick").setId('core:resources/stick');
@ -28,4 +28,12 @@ export const OBSIDIAN_ARROWHEAD = new Item().setName("Obsidian Arrowhead").setId
export const OBSIDIAN_SPEAR = new Item().setName("Obsidian Spear").setId('core:obsidian-spear');
// tools: plant fibres = rope, flint hatchet
// shale - igneous. metamorphasis => slate
// shale - igneous. metamorphasis => slate
export const SHARPNESS = new ItemProperty('core:sharpness');
export function minSharpness(min: number) {
return function(itemState: ItemState): boolean {
return itemState.item.getProperty(SHARPNESS) >= min;
}
}

View File

@ -11,6 +11,9 @@ export class Item extends Serializable {
name = '';
id: ItemID = '';
props: {
[propName: string]: any
};
setName(name) {
this.name = name;
@ -30,6 +33,14 @@ export class Item extends Serializable {
items.set(this.id, this);
return this;
}
setProperty(prop: ItemProperty, value: any) {
this.props[prop.name] = value;
}
getProperty(prop: ItemProperty) {
return this.props[prop.name] ?? null;
}
}
export class ItemState extends Serializable implements Renderable {
@ -55,3 +66,12 @@ export class ItemState extends Serializable implements Renderable {
}
}
export class ItemProperty {
name: string;
constructor(name: string) {
this.name = name;
}
}
export type ItemFilter = (itemState: ItemState) => boolean;

View File

@ -8,10 +8,11 @@ import { progressbar, ProgressbarStyle } from '../Progressbar.js';
export const taskClasses: Map<string, typeof Task> = new Map();
export abstract class Task extends Serializable {
export class Task {
progress = 0;
worker: Pawn;
data: any;
id: string;
ctor() {
this.worker ??= null;
@ -66,9 +67,17 @@ export abstract class Task extends Serializable {
get status() {
return chalk.bgRedBright.black('DOING A TASK');
}
setId(id: string) {
this.id = id;
return this;
}
}
export function registerTask(id: string, taskClass: typeof Task) {
console.log('Registered task', id);
taskClasses.set(id, taskClass)
export class TaskState extends Serializable {
constructor(task: Task) {
super();
this._taskId = task.id;
}
}