Skip to content

Instantly share code, notes, and snippets.

View abulka's full-sized avatar
🤔
Prototyping an online, low code IDE

Andy Bulka abulka

🤔
Prototyping an online, low code IDE
View GitHub Profile
@abulka
abulka / todomvc-ecs-housekeeping.js
Created May 17, 2020 11:45
TodoMVC-ECS Housekeeping Trick
engine.entity('single-step').setComponent('housekeeping', {})
@abulka
abulka / todomvc-ecs-tick-reset.js
Created May 17, 2020 11:44
TodoMVC-ECS Tick Reset
engine.on('tick:before', (engine) => {
todos = [] // reset
})
@abulka
abulka / todomvc-ecs-gather.js
Created May 17, 2020 11:43
TodoMVC-ECS Gather
let todos = []
engine.system('gather-todos-for-save', ['data'], (entity, { data }) => {
todos_data.push(data)
});
@abulka
abulka / todomvc-ecs-tick.js
Created May 17, 2020 11:42
TodoMVC-ECS Tick
engine.on('tick:after', (engine) => {
console.log('-'.repeat(40))
})
@abulka
abulka / todomvc-ecs-looping.js
Created May 17, 2020 11:41
TodoMVC-ECS Looping
engine.entity('single-step').setComponent('housekeeping', {})
...
engine.system('reset-todos', ['housekeeping'], (entity, { housekeeping }) => {
// this code will run once per tick
})
@abulka
abulka / todomvc-ecs-selecting.js
Created May 17, 2020 11:40
TodoMVC-ECS Selecting
// process all entities with data component
engine.system('process-all', ['data'], (entity, { data }) => {
console.log(`Found entity ${entity} with data ${data}`)
});
// all entities with data component and dirty component
engine.system('find-dirty', ['data', 'dirty'], (entity, { data, dirty }) => {
console.log(`Found dirty entity ${entity}`)
});
@abulka
abulka / todomvc-ecs-composability2.js
Created May 17, 2020 11:38
TodoMVC-ECS Composability2
console.log(
e.name,
JSON.stringify(e.getComponent('Name')),
JSON.stringify(e.getComponent('Address'))
)
@abulka
abulka / todomvc-ecs-composability.js
Created May 17, 2020 11:36
TodoMVC-ECS Composability
let e = engine.entity('person 1')
e.setComponent('Name', {firstname:'John', surname:'Smith'})
e.setComponent('Address', {number: 12, street: 'Bounty Drive', state: 'WA'})
@abulka
abulka / todomvc-ecs-approach.js
Created May 17, 2020 11:31
TodoMVC-ECS - A Different Approach
const engine = new Engine();
engine.entity(util.uuid()).setComponent('data', {title:'make lunch', completed:true})
engine.entity(util.uuid()).setComponent('data', {title:'wash dishes', completed:false})
engine.system('report', ['data'], (entity, { data }) => {
let is_or_is_not = data.completed ? 'is' : 'is not'
console.log(`Todo item ${data.title} has id ${entity.name} and ${is_or_is_not} completed`)
});
engine.tick()
@abulka
abulka / todomvc-ecs-todoitem-model-oo.js
Created May 17, 2020 11:29
TodoMVC-ECS - TodoItem Model in traditional OO
class TodoItem {
constructor(title, completed, id) {
this.title = title
this.completed = completed
this.id = id == undefined ? util.uuid() : id
}
report() {
let is_or_is_not = this.completed ? 'is' : 'is not'
console.log(`Todo item ${this.title} ${is_or_is_not} completed`)
}