From 0c365c0090fe5df7114187e36b4686c9f2e85b74 Mon Sep 17 00:00:00 2001 From: Danielv123 Date: Wed, 3 Jan 2018 21:01:44 +0100 Subject: [PATCH] #61 Render entities with rotations This code didn't even error once, it just worked. Which is nice. --- sharedPlugins/remoteMap/control.lua | 12 ++++++++---- sharedPlugins/remoteMap/index.js | 13 ++++++++++--- static/remoteMap.js | 15 ++++++++++++++- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/sharedPlugins/remoteMap/control.lua b/sharedPlugins/remoteMap/control.lua index 98959d7e..d5fa7b2f 100644 --- a/sharedPlugins/remoteMap/control.lua +++ b/sharedPlugins/remoteMap/control.lua @@ -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) diff --git a/sharedPlugins/remoteMap/index.js b/sharedPlugins/remoteMap/index.js index 4b613399..72403789 100644 --- a/sharedPlugins/remoteMap/index.js +++ b/sharedPlugins/remoteMap/index.js @@ -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)); } diff --git a/static/remoteMap.js b/static/remoteMap.js index 2ec41e4e..89b37a9f 100644 --- a/static/remoteMap.js +++ b/static/remoteMap.js @@ -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);