MowerAreaEvent = {}; MowerAreaEvent_mt = Class(MowerAreaEvent, Event); InitStaticEventClass(MowerAreaEvent, "MowerAreaEvent", EventIds.EVENT_MOWER_AREA); function MowerAreaEvent:emptyNew() local self = Event:new(MowerAreaEvent_mt); self.className="MowerAreaEvent"; return self; end; function MowerAreaEvent:new(cuttingAreas) local self = MowerAreaEvent:emptyNew() self.cuttingAreas = cuttingAreas; return self; end; function MowerAreaEvent:readStream(streamId, connection) local numAreas = streamReadUIntN(streamId, 4); local refX = streamReadFloat32(streamId); local refY = streamReadFloat32(streamId); local values = Utils.readCompressed2DVectors(streamId, refX, refY, numAreas*3-1, 0.01, true); for i=1,numAreas do local vi = i-1; local x = values[vi*3+1].x; local z = values[vi*3+1].y; local x1 = values[vi*3+2].x; local z1 = values[vi*3+2].y; local x2 = values[vi*3+3].x; local z2 = values[vi*3+3].y; Utils.updateMeadowArea(x, z, x1, z1, x2, z2); end; end; function MowerAreaEvent:writeStream(streamId, connection) local numAreas = table.getn(self.cuttingAreas); streamWriteUIntN(streamId, numAreas, 4); local refX, refY; local values = {}; for i=1, numAreas do local d = self.cuttingAreas[i]; if i==1 then refX = d[1]; refY = d[2]; streamWriteFloat32(streamId, d[1]); streamWriteFloat32(streamId, d[2]); else table.insert(values, {x=d[1], y=d[2]}); end; table.insert(values, {x=d[3], y=d[4]}); table.insert(values, {x=d[5], y=d[6]}); end; assert(table.getn(values) == numAreas*3 - 1); Utils.writeCompressed2DVectors(streamId, refX, refY, values, 0.01); end; function MowerAreaEvent:run(connection) print("Error: Do not run MowerAreaEvent locally"); end; function MowerAreaEvent.runLocally(cuttingAreas) local numAreas = table.getn(cuttingAreas); local refX, refY; local values = {}; for i=1, numAreas do local d = cuttingAreas[i]; if i==1 then refX = d[1]; refY = d[2]; else table.insert(values, {x=d[1], y=d[2]}); end; table.insert(values, {x=d[3], y=d[4]}); table.insert(values, {x=d[5], y=d[6]}); end; assert(table.getn(values) == numAreas*3 - 1); local values = Utils.simWriteCompressed2DVectors(refX, refY, values, 0.01, true); for i=1, numAreas do local vi = i-1; local x = values[vi*3+1].x; local z = values[vi*3+1].y; local x1 = values[vi*3+2].x; local z1 = values[vi*3+2].y; local x2 = values[vi*3+3].x; local z2 = values[vi*3+3].y; Utils.updateMeadowArea(x, z, x1, z1, x2, z2); end; end;