fun: smokin some kittens
This commit is contained in:
parent
c19beead68
commit
5ff4eb2991
|
@ -46,13 +46,19 @@ export default class Collider extends Component {
|
||||||
const script = this.$$collisionEnd.clone();
|
const script = this.$$collisionEnd.clone();
|
||||||
script.context.other = otherEntity;
|
script.context.other = otherEntity;
|
||||||
script.context.pair = [body, otherBody];
|
script.context.pair = [body, otherBody];
|
||||||
thisEntity.Ticking.add(script.ticker());
|
const ticker = script.ticker();
|
||||||
|
ecs.addDestructionDependency(thisEntity.id, ticker);
|
||||||
|
ecs.addDestructionDependency(otherEntity.id, ticker);
|
||||||
|
thisEntity.Ticking.add(ticker);
|
||||||
}
|
}
|
||||||
if (other.$$collisionEnd) {
|
if (other.$$collisionEnd) {
|
||||||
const script = other.$$collisionEnd.clone();
|
const script = other.$$collisionEnd.clone();
|
||||||
script.context.other = thisEntity;
|
script.context.other = thisEntity;
|
||||||
script.context.pair = [otherBody, body];
|
script.context.pair = [otherBody, body];
|
||||||
otherEntity.Ticking.add(script.ticker());
|
const ticker = script.ticker();
|
||||||
|
ecs.addDestructionDependency(thisEntity.id, ticker);
|
||||||
|
ecs.addDestructionDependency(otherEntity.id, ticker);
|
||||||
|
otherEntity.Ticking.add(ticker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.$$intersections.delete(other);
|
this.$$intersections.delete(other);
|
||||||
|
@ -102,13 +108,19 @@ export default class Collider extends Component {
|
||||||
const script = this.$$collisionStart.clone();
|
const script = this.$$collisionStart.clone();
|
||||||
script.context.other = otherEntity;
|
script.context.other = otherEntity;
|
||||||
script.context.pair = [body, otherBody];
|
script.context.pair = [body, otherBody];
|
||||||
thisEntity.Ticking.add(script.ticker());
|
const ticker = script.ticker();
|
||||||
|
ecs.addDestructionDependency(otherEntity.id, ticker);
|
||||||
|
ecs.addDestructionDependency(thisEntity.id, ticker);
|
||||||
|
thisEntity.Ticking.add(ticker);
|
||||||
}
|
}
|
||||||
if (other.$$collisionStart) {
|
if (other.$$collisionStart) {
|
||||||
const script = other.$$collisionStart.clone();
|
const script = other.$$collisionStart.clone();
|
||||||
script.context.other = thisEntity;
|
script.context.other = thisEntity;
|
||||||
script.context.pair = [otherBody, body];
|
script.context.pair = [otherBody, body];
|
||||||
otherEntity.Ticking.add(script.ticker());
|
const ticker = script.ticker();
|
||||||
|
ecs.addDestructionDependency(otherEntity.id, ticker);
|
||||||
|
ecs.addDestructionDependency(thisEntity.id, ticker);
|
||||||
|
otherEntity.Ticking.add(ticker);
|
||||||
}
|
}
|
||||||
activeIntersections.add(intersection);
|
activeIntersections.add(intersection);
|
||||||
}
|
}
|
||||||
|
|
7
app/ecs/components/owned.js
Normal file
7
app/ecs/components/owned.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import Component from '@/ecs/component.js';
|
||||||
|
|
||||||
|
export default class Owned extends Component {
|
||||||
|
static properties = {
|
||||||
|
owner: {type: 'string'},
|
||||||
|
};
|
||||||
|
}
|
4
app/ecs/components/vulnerable.js
Normal file
4
app/ecs/components/vulnerable.js
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
import Component from '@/ecs/component.js';
|
||||||
|
|
||||||
|
export default class Vulnerable extends Component {
|
||||||
|
}
|
|
@ -191,8 +191,9 @@ export default async function createHomestead(id) {
|
||||||
Tags: {tags: ['kittan']},
|
Tags: {tags: ['kittan']},
|
||||||
Ticking: {},
|
Ticking: {},
|
||||||
VisibleAabb: {},
|
VisibleAabb: {},
|
||||||
|
Vulnerable: {},
|
||||||
};
|
};
|
||||||
for (let i = 0; i < 30; ++i) {
|
for (let i = 0; i < 10; ++i) {
|
||||||
entities.push(kitty);
|
entities.push(kitty);
|
||||||
}
|
}
|
||||||
entities.push({
|
entities.push({
|
||||||
|
|
|
@ -48,6 +48,9 @@ export default class Engine {
|
||||||
get frame() {
|
get frame() {
|
||||||
return engine.frame;
|
return engine.frame;
|
||||||
}
|
}
|
||||||
|
lookupPlayerEntity(id) {
|
||||||
|
return engine.lookupPlayerEntity(id);
|
||||||
|
}
|
||||||
async readAsset(uri) {
|
async readAsset(uri) {
|
||||||
if (!cache.has(uri)) {
|
if (!cache.has(uri)) {
|
||||||
const {promise, resolve, reject} = withResolvers();
|
const {promise, resolve, reject} = withResolvers();
|
||||||
|
@ -325,6 +328,14 @@ export default class Engine {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lookupPlayerEntity(id) {
|
||||||
|
for (const [, player] of this.connectedPlayers) {
|
||||||
|
if (player.id == id) {
|
||||||
|
return player.entity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async saveEcs(path, ecs) {
|
async saveEcs(path, ecs) {
|
||||||
const view = this.Ecs.serialize(ecs);
|
const view = this.Ecs.serialize(ecs);
|
||||||
await this.server.writeData(path, view);
|
await this.server.writeData(path, view);
|
||||||
|
|
4
public/assets/magic-swords/collision-start.js
Normal file
4
public/assets/magic-swords/collision-start.js
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
const playerEntity = ecs.lookupPlayerEntity(entity.Owned.owner);
|
||||||
|
if (playerEntity !== other && other.Vulnerable) {
|
||||||
|
ecs.destroy(other.id);
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
const {Position} = wielder;
|
const {Player, Position} = wielder;
|
||||||
|
|
||||||
const shots = [];
|
const shots = [];
|
||||||
|
|
||||||
|
@ -23,10 +23,12 @@ for (let i = 0; i < N; ++i) {
|
||||||
unstoppable: 1,
|
unstoppable: 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
collisionStartScript: '/assets/magic-swords/collision-start.js',
|
||||||
},
|
},
|
||||||
Controlled: {},
|
Controlled: {},
|
||||||
Direction: {direction: Math.TAU * (i / N)},
|
Direction: {direction: Math.TAU * (i / N)},
|
||||||
Forces: {},
|
Forces: {},
|
||||||
|
Owned: {owner: Player ? Player.id : 0},
|
||||||
Position: {x: Position.x, y: Position.y},
|
Position: {x: Position.x, y: Position.y},
|
||||||
Speed: {},
|
Speed: {},
|
||||||
Sprite: {
|
Sprite: {
|
||||||
|
@ -73,6 +75,8 @@ while (shots.length > 0) {
|
||||||
shot.Direction.direction = (Math.TAU + toward) % Math.TAU;
|
shot.Direction.direction = (Math.TAU + toward) % Math.TAU;
|
||||||
if (Math.distance(where, shot.Position) < 4) {
|
if (Math.distance(where, shot.Position) < 4) {
|
||||||
delete accumulated[shot.id];
|
delete accumulated[shot.id];
|
||||||
|
shot.Sprite.alpha = 0;
|
||||||
|
ecs.destroy(shot.id);
|
||||||
destroying.push(shot);
|
destroying.push(shot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,8 +84,6 @@ while (shots.length > 0) {
|
||||||
}
|
}
|
||||||
for (let i = 0; i < destroying.length; ++i) {
|
for (let i = 0; i < destroying.length; ++i) {
|
||||||
shots.splice(shots.indexOf(destroying[i]), 1);
|
shots.splice(shots.indexOf(destroying[i]), 1);
|
||||||
destroying[i] = destroying[i].id;
|
|
||||||
}
|
}
|
||||||
ecs.destroyMany(destroying);
|
await wait(0);
|
||||||
await wait(0)
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user