#61 Render entities with rotations

This code didn't even error once, it just worked. Which is nice.
This commit is contained in:
Danielv123 committed 2018-01-04 14:43:01 +01:00
1 parent 51bb9f4d71
commit 0c365c0090
3 files changed
+32 -8

No files matched your search

+8 -4
View File
@@ -69,7 +69,11 @@ function on_some_entity_created(event)
complain("wtf, on_some_entity_created has nil entity")
return
end
write_file(ent.name.." "..ent.position.x.." "..ent.position.y)
local entityData = ent.name..","..ent.position.x..","..ent.position.y
if ent.supports_direction then
entityData = entityData .. ",rot="..ent.direction
end
write_file(entityData)
--writeout_objects(ent.surface, {left_top={x=math.floor(ent.position.x), y=math.floor(ent.position.y)}, right_bottom={x=math.floor(ent.position.x)+1, y=math.floor(ent.position.y)+1}})
complain("on_some_entity_created: "..ent.name.." at "..ent.position.x..","..ent.position.y)
@@ -83,12 +87,12 @@ function on_some_entity_deleted(event)
-- we can't do this now, because the entity still exists at this point. instead, we schedule the writeout for the next tick
local surface = ent.surface
local area = {left_top={x=math.floor(ent.position.x), y=math.floor(ent.position.y)}, right_bottom={x=math.floor(ent.position.x)+1, y=math.floor(ent.position.y)+1}}
--local surface = ent.surface
--local area = {left_top={x=math.floor(ent.position.x), y=math.floor(ent.position.y)}, right_bottom={x=math.floor(ent.position.x)+1, y=math.floor(ent.position.y)+1}}
--table.insert(todo_next_tick, function () writeout_objects(surface, area ) end)
write_file("deleted "..ent.position.x.." "..ent.position.y)
complain("on_some_entity_deleted: "..ent.name.." at "..ent.position.x..","..ent.position.y)
--complain("on_some_entity_deleted: "..ent.name.." at "..ent.position.x..","..ent.position.y)
end
script.on_event(defines.events.on_tick, on_tick)
+10 -3
View File
@@ -57,8 +57,8 @@ class remoteMap {
scriptOutput(data){
if(data){
this.messageInterface(data);
// express-transport-belt -35.5 -14.5
data = data.split(" ");
// express-transport-belt,-35.5,-14.5,[...]
data = data.split(",");
if(data && data[0] == undefined){
console.log("empty: ");
console.log(data);
@@ -74,8 +74,15 @@ class remoteMap {
this.messageInterface("Deleted data "+xPos+", "+yPos);
}).catch((err)=>this.messageInterface(err));
} else {
let entity = {name};
for(let i = 3; i < data.length; i++){
if(data[i].includes("=")){
let kv = data[i].split("=");
entity[kv[0]] = kv[1];
}
}
// save this entity in the database
this.chunkMap.setEntity(xPos, yPos, {name}).then(data => {
this.chunkMap.setEntity(xPos, yPos, entity).then(data => {
this.messageInterface("Added "+name+" to data "+xPos+", "+yPos);
}).catch((err)=>this.messageInterface(err));
}
+14 -1
View File
@@ -68,6 +68,14 @@ function requestMapDraw(){
}
}
}
function drawImage(ctx, image, x, y, w, h, degrees){
ctx.save();
ctx.translate(x+w/2, y+h/2);
ctx.rotate(degrees*Math.PI/180.0);
ctx.translate(-x-w/2, -y-h/2);
ctx.drawImage(image, x, y, w, h);
ctx.restore();
}
function drawEntity(entity){
if(entity.x && entity.y){
if(entity.entity && entity.entity.name && typeof entity.entity.name == "string"){
@@ -93,7 +101,12 @@ function drawEntity(entity){
let name = entity.entity.name;
let xPos = (entity.x * 16) - playerPosition.x;
let yPos = (entity.y * 16) - playerPosition.y;
ctx.drawImage(entityImages[name].img, xPos, yPos, 16, 16);
let rotation = 0;
if(entity.entity.rot && !isNaN(Number(entity.entity.rot))){
rotation = entity.entity.rot * 45;
}
drawImage(ctx, entityImages[name].img, xPos, yPos, 16, 16, rotation);
console.log("Drawing "+name+" at X: "+xPos+", Y: "+yPos);
} else {
this.queue.push(entity);