Jan-Oliver
JSS
Enough talking... show me code.
var pool = new Pool();
pool.createSystem(RUN_MODE.INIT, "CreateGrid", () => {
pool.createEntity("Grid")
.addComponent("grid", { rows: 8, columns: 8 });
});
pool.createSystem(RUN_MODE.INIT, "CreatePieces", () => {
pool.createEntity("Black Queen")
.addComponent("piece", { color: "b", type: QUEEN })
.addComponent("position", { row: "D", column: 8 });
pool.createEntity("Black King")
.addComponent("piece", { color: "b", type: KING })
.addComponent("position", { row: "D", column: 1 });
/* ... */
});
pool.createSystem(RUN_MODE.FRAME, "RenderGrid", () => {
var gridEntity = pool.getEntities(["grid"]).first();
gameEngine.renderGrid(
gridEntity.grid.rows,
gridEntity.grid.columns
);
});
pool.createSystem(RUN_MODE.FRAME, "RenderPieces", () => {
var entities = pool.getEntities(["piece", "position"]);
for (entity in entities) {
gameEngine.renderPiece(
entity.piece.color,
entity.piece.type,
entity.position.row,
entity.position.column
);
}
});
pool.createSystem(RUN_MODE.FRAME, "MovePiece", () => {
var entities = pool.getEntities(["piece", "position"]);
var input = gameEngine.getMoveInput();
var selectedPiece = entities.filter(entity =>
entity.position.row == input.old_row &&
entity.position.column == input.old_column
);
selectedPiece.replaceComponent("position", {
row: input.new_row, column: input.new_column
});
});
pool.createSystem(RUN_MODE.FRAME, "MovementIntent", () => {
var grid = pool.getEntities(["grid"]).first();
var nextMove = "w";
if (
grid.hasComponent("lastMove")
&& grid.lastMove.color == "w"
) {
nextMove = "b";
}
/*...*/
var entities = pool.getEntities(["piece", "position"]);
var input = gameEngine.getMoveInput();
var selectedPiece = entities.filter(entity =>
entity.position.row == input.old_row &&
entity.position.column == input.old_column
);
if (selectedPiece.piece.color != nextMove) {
return gameEngine.error(
"The next move belongs to: " + nextMove
);
}
selectedPiece.addComponent("movementIntent", {
row: input.new_row, column: input.new_column
});
grid.replaceComponent("lastMove", { color: nextMove });
});pool.createSystem(RUN_MODE.FRAME, "MovePiece", () => {
var entities = pool.getEntities(
["moveIntent", "position"]
);
for (entity in entities) {
var intent = entity.moveIntent;
entity.position.row = intent.row;
entity.position.column = intent.column;
entity.removeComponent("moveIntent");
}
});
pool.createSystem(RUN_MODE.FRAME, "RemovePiece", () => {
var entities = pool.getEntities(
["piece", "position", "lastMoveRound"]
);
foreach (entity in entities) {
var entityOnSameField = entities.filter(other =>
other.id != entity.id
&& other.position == entity.position
&& other.lastMoveRound < entity.lastMoveRound
).first();
if (entityOnSameField != null) {
pool.removeEntity(entityOnSameField.id);
}
}
});
var ecomOrder = pool.createEntity(uuid4())
.addComponent("authorizedPayment", {
psp: "stripe",
charge_id: "..."
})
.addComponent("shipable", {
address: { /* ... */ },
carrier: "DHL",
method: "Express"
});pool.createSystem("order.placed", "DeliverySystem", () => {
var orders = pool.getEntities(
["shipable"], ["bookedShipment"]
);
for (order in orders) {
var bookedShipment = callCarrierApiToBookShipment(
order.shipable.carrier,
order.shipable.method,
order.shippable.address
);
order.addComponent(
"bookedShipment", { shipment: bookedShipment }
);
}
});pool.createSystem("order.shipped", "PaymentCapture", () => {
var orders = pool.getEntities(
["authorizedPayment"], ["capturedPayment"]
);
for (order in orders) {
var capture = capturePayment(
order.authorizedPayment.psp,
order.authorizedPayment.charge_id
);
order.addComponent(
"capturedPayment", { payment: payment }
);
}
});var instoreOrder = pool.createEntity(uuid4())
.addComponent("capturedPayment", {
payment: paymentFromMiuraDevice
});