From 0aa25544b071265ee2ce3c73e12a259523915ed0 Mon Sep 17 00:00:00 2001 From: Danielv123 Date: Mon, 26 Mar 2018 16:11:56 +0200 Subject: [PATCH] remoteMap prescan spawn and also scan newly generated chunks --- sharedPlugins/remoteMap/control.lua | 51 +++++++++++++++---- .../remoteMap/destroyEntityCommand.lua | 5 ++ sharedPlugins/remoteMap/index.js | 12 ++--- sharedPlugins/remoteMap/info.json | 4 +- 4 files changed, 54 insertions(+), 18 deletions(-) create mode 100644 sharedPlugins/remoteMap/destroyEntityCommand.lua diff --git a/sharedPlugins/remoteMap/control.lua b/sharedPlugins/remoteMap/control.lua index be329396..0ca3b083 100644 --- a/sharedPlugins/remoteMap/control.lua +++ b/sharedPlugins/remoteMap/control.lua @@ -22,10 +22,6 @@ -- DEALINGS IN THE SOFTWARE. function write_file(data) - if must_write_initstuff then - must_write_initstuff = false - writeout_initial_stuff() - end stringsToWriteNextTick = stringsToWriteNextTick .. data .. '\n' -- game.write_file("remoteMap.txt", data, true) end @@ -42,9 +38,15 @@ function complain(text) end local todo_next_tick = {} +must_write_initstuff = true function on_tick(event) dump_cached_writes() stringsToWriteNextTick = '' + if must_write_initstuff then + must_write_initstuff = false + log("I must write init stuff!") + writeout_initial_stuff() + end if #todo_next_tick > 0 then complain("on_tick executing "..#todo_next_tick.." stored callbacks") for _,func in ipairs(todo_next_tick) do @@ -54,24 +56,50 @@ function on_tick(event) end end +function writeout_initial_stuff() + log("Writing out initial stuff...") + writeout_objects(game.surfaces['nauvis'], {left_top={x=-64,y=-64},right_bottom={x=64,y=64}}) +end + function writeout_objects(surface, area) --if my_client_id ~= 1 then return end - line = '' for idx, ent in pairs(surface.find_entities(area)) do if area.left_top.x <= ent.position.x and ent.position.x < area.right_bottom.x and area.left_top.y <= ent.position.y and ent.position.y < area.right_bottom.y then if ent.prototype.collision_mask ~= nil and ent.prototype.collision_mask['player-layer'] then - line = line .. ent.name.." "..ent.position.x.." "..ent.position.y.."\n" + -- line = line .. ent.name.." "..ent.position.x.." "..ent.position.y.."\n" + -- local line = ent.name..","..ent.position.x..","..ent.position.y + -- if ent.supports_direction then + -- line = line .. ",rot="..ent.direction + -- end + -- write_file(line) + on_some_entity_created(nil, ent) end end end - write_file(line) --write_file(header..table.concat(lines,"").."\n") --write_file(table.concat(lines,"").."\n") - line=nil end +function on_chunk_generated(event) + local area = event.area + local surface = event.surface + --print("chunk generated at ("..area.left_top.x..","..area.left_top.y..") -- ("..area.right_bottom.x..","..area.right_bottom.y..")") -function on_some_entity_created(event) - local ent = event.entity or event.created_entity or nil + if surface ~= game.surfaces['nauvis'] then -- we only support one surface + return + end + + -- writeout_resources(surface, area) + writeout_objects(surface, area) + -- writeout_tiles(surface, area) +end +function on_some_entity_created(event, entp) + local ent + if entp then + ent = entp + else + ent = event.entity or event.created_entity or nil + end + if ent == nil then complain("wtf, on_some_entity_created has nil entity") return @@ -80,6 +108,7 @@ function on_some_entity_created(event) if ent.supports_direction then entityData = entityData .. ",rot="..ent.direction end + -- log(entityData) 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) @@ -102,6 +131,7 @@ function on_some_entity_deleted(event) end script.on_event(defines.events.on_tick, on_tick) +script.on_event(defines.events.on_chunk_generated, on_chunk_generated) script.on_event(defines.events.on_biter_base_built, on_some_entity_created) --entity script.on_event(defines.events.on_built_entity, on_some_entity_created) --created_entity @@ -112,3 +142,4 @@ script.on_event(defines.events.on_entity_died, on_some_entity_deleted) --entity script.on_event(defines.events.on_player_mined_entity, on_some_entity_deleted) --entity script.on_event(defines.events.on_robot_mined_entity, on_some_entity_deleted) --entity script.on_event(defines.events.on_resource_depleted, on_some_entity_deleted) --entity + diff --git a/sharedPlugins/remoteMap/destroyEntityCommand.lua b/sharedPlugins/remoteMap/destroyEntityCommand.lua new file mode 100644 index 00000000..bd52ed8a --- /dev/null +++ b/sharedPlugins/remoteMap/destroyEntityCommand.lua @@ -0,0 +1,5 @@ +/c +local toDelete = game.surfaces[1].find_entities({{3,7},{4,8}}) +for i, entity in pairs(toDelete) do + entity.die() +end \ No newline at end of file diff --git a/sharedPlugins/remoteMap/index.js b/sharedPlugins/remoteMap/index.js index 1d42842d..47c3bd02 100644 --- a/sharedPlugins/remoteMap/index.js +++ b/sharedPlugins/remoteMap/index.js @@ -13,8 +13,8 @@ class remoteMap { // initialize chunk database this.chunkMap = new chunkStore(this.config.unique, 64, "./database/chunkStore/"); this.chunkMap.onEntityChange(entity => { - console.log("Entity changed: ") - console.log(entity); + this.messageInterface("Entity changed: ") + this.messageInterface(entity); // check valid coordinates (dunno what could go wrong, but can never be too sure) if(entity && entity.x !== undefined && !isNaN(Number(entity.x)) && entity.y !== undefined && !isNaN(Number(entity.y))){ this.socket.emit("sendEntity", entity); @@ -31,7 +31,7 @@ class remoteMap { },10000); }); this.socket.on("getChunk", req => { - console.log("getChunk is not supported!"); + this.messageInterface("getChunk is not supported!"); /*this.chunkMap.getChunk(req.x, req.y).then(chunk => { chunk.requesterID = req.requesterID; this.socket.emit("sendChunk", chunk); @@ -54,7 +54,7 @@ class remoteMap { // both placing and deleting entities via the web interface this.socket.on("placeEntity", req => { // game.player.surface.create_entity{name="small-ship-wreck", position={game.player.position.x-2, game.player.position.y+1}, direction=..., force=...} - console.log("placing "+JSON.stringify(req)); + this.messageInterface("placing "+JSON.stringify(req)); if(req.name && typeof req.name == "string" && req.position && !isNaN(Number(req.position.x)) && !isNaN(Number(req.position.y))){ if(req.name == "deleted"){ // {{'+req.position.x+','+req.position.y+'},{'+req.position.x+','+req.position.y+'}} this.messageInterface('/silent-command local toDelete = game.surfaces[1].find_entities({{'+req.position.x+','+req.position.y+'},{'+(req.position.x+1)+','+(req.position.y+1)+'}}) for i, entity in pairs(toDelete) do entity.die() end'); @@ -96,8 +96,8 @@ class remoteMap { // express-transport-belt,-35.5,-14.5,[...] data = data.split(","); if(data && data[0] == undefined){ - console.log("empty: "); - console.log(data); + this.messageInterface("empty: "); + this.messageInterface(data); return } let name = data[0]; diff --git a/sharedPlugins/remoteMap/info.json b/sharedPlugins/remoteMap/info.json index 9808728f..e60aaa47 100644 --- a/sharedPlugins/remoteMap/info.json +++ b/sharedPlugins/remoteMap/info.json @@ -2,10 +2,10 @@ { "name": "remoteMap", "title": "Clusterio remote map", -"version": "2.1.0", +"version": "2.2.0", "date": "18-11-2017", "author": "Danielv123", "dependencies": ["base >= 0.15"], "factorio_version": "0.16", -"description": "Clusterio plugin for external mapping and soon also building. Mobile factorio confirmed" +"description": "Clusterio plugin for mapping and building through the browser. No more need to start game, download and catching up for every game, also mobile factorio confirmed?" }