diff --git a/.cache/clangd/index/Builder.cpp.B5CCBE10376BB391.idx b/.cache/clangd/index/Builder.cpp.B5CCBE10376BB391.idx new file mode 100644 index 0000000..e95c131 Binary files /dev/null and b/.cache/clangd/index/Builder.cpp.B5CCBE10376BB391.idx differ diff --git a/.cache/clangd/index/Builder.cpp.E54C6D6632153280.idx b/.cache/clangd/index/Builder.cpp.E54C6D6632153280.idx new file mode 100644 index 0000000..1168af9 Binary files /dev/null and b/.cache/clangd/index/Builder.cpp.E54C6D6632153280.idx differ diff --git a/.cache/clangd/index/Builder.hpp.656949760E64D2FB.idx b/.cache/clangd/index/Builder.hpp.656949760E64D2FB.idx new file mode 100644 index 0000000..b5e93f6 Binary files /dev/null and b/.cache/clangd/index/Builder.hpp.656949760E64D2FB.idx differ diff --git a/.cache/clangd/index/Builder.hpp.985BEF508D2F19DC.idx b/.cache/clangd/index/Builder.hpp.985BEF508D2F19DC.idx new file mode 100644 index 0000000..8476958 Binary files /dev/null and b/.cache/clangd/index/Builder.hpp.985BEF508D2F19DC.idx differ diff --git a/.cache/clangd/index/Constants.hpp.39349C605E733E23.idx b/.cache/clangd/index/Constants.hpp.39349C605E733E23.idx new file mode 100644 index 0000000..c596ddb Binary files /dev/null and b/.cache/clangd/index/Constants.hpp.39349C605E733E23.idx differ diff --git a/.cache/clangd/index/Constants.hpp.73C88F7BC08E8883.idx b/.cache/clangd/index/Constants.hpp.73C88F7BC08E8883.idx new file mode 100644 index 0000000..5e8a2f3 Binary files /dev/null and b/.cache/clangd/index/Constants.hpp.73C88F7BC08E8883.idx differ diff --git a/.cache/clangd/index/Constants.hpp.757BD26CBF07E480.idx b/.cache/clangd/index/Constants.hpp.757BD26CBF07E480.idx new file mode 100644 index 0000000..8b6d909 Binary files /dev/null and b/.cache/clangd/index/Constants.hpp.757BD26CBF07E480.idx differ diff --git a/.cache/clangd/index/ConstructionSite.cpp.1EF145D6E14F2CFB.idx b/.cache/clangd/index/ConstructionSite.cpp.1EF145D6E14F2CFB.idx new file mode 100644 index 0000000..0edafaf Binary files /dev/null and b/.cache/clangd/index/ConstructionSite.cpp.1EF145D6E14F2CFB.idx differ diff --git a/.cache/clangd/index/ConstructionSite.cpp.2F1702F3CE90AC74.idx b/.cache/clangd/index/ConstructionSite.cpp.2F1702F3CE90AC74.idx new file mode 100644 index 0000000..648d4f7 Binary files /dev/null and b/.cache/clangd/index/ConstructionSite.cpp.2F1702F3CE90AC74.idx differ diff --git a/.cache/clangd/index/ConstructionSite.hpp.AC4AF59DFE379D60.idx b/.cache/clangd/index/ConstructionSite.hpp.AC4AF59DFE379D60.idx new file mode 100644 index 0000000..bb4f6a1 Binary files /dev/null and b/.cache/clangd/index/ConstructionSite.hpp.AC4AF59DFE379D60.idx differ diff --git a/.cache/clangd/index/ConstructionSite.hpp.BCC6A29BDB9B63FA.idx b/.cache/clangd/index/ConstructionSite.hpp.BCC6A29BDB9B63FA.idx new file mode 100644 index 0000000..720450e Binary files /dev/null and b/.cache/clangd/index/ConstructionSite.hpp.BCC6A29BDB9B63FA.idx differ diff --git a/.cache/clangd/index/Context.hpp.45AE0BD0E5763FA8.idx b/.cache/clangd/index/Context.hpp.45AE0BD0E5763FA8.idx new file mode 100644 index 0000000..cb74341 Binary files /dev/null and b/.cache/clangd/index/Context.hpp.45AE0BD0E5763FA8.idx differ diff --git a/.cache/clangd/index/Context.hpp.E1B33B5021D437FB.idx b/.cache/clangd/index/Context.hpp.E1B33B5021D437FB.idx new file mode 100644 index 0000000..0f178f1 Binary files /dev/null and b/.cache/clangd/index/Context.hpp.E1B33B5021D437FB.idx differ diff --git a/.cache/clangd/index/Creep.cpp.A06D696B9A17B433.idx b/.cache/clangd/index/Creep.cpp.A06D696B9A17B433.idx new file mode 100644 index 0000000..1a1aee4 Binary files /dev/null and b/.cache/clangd/index/Creep.cpp.A06D696B9A17B433.idx differ diff --git a/.cache/clangd/index/Creep.cpp.D9D8E0EFFE8A1C77.idx b/.cache/clangd/index/Creep.cpp.D9D8E0EFFE8A1C77.idx new file mode 100644 index 0000000..cd7ee1c Binary files /dev/null and b/.cache/clangd/index/Creep.cpp.D9D8E0EFFE8A1C77.idx differ diff --git a/.cache/clangd/index/Creep.hpp.783E092EC895D4B6.idx b/.cache/clangd/index/Creep.hpp.783E092EC895D4B6.idx new file mode 100644 index 0000000..4de6b87 Binary files /dev/null and b/.cache/clangd/index/Creep.hpp.783E092EC895D4B6.idx differ diff --git a/.cache/clangd/index/Creep.hpp.DFCCE6FB989E2C87.idx b/.cache/clangd/index/Creep.hpp.DFCCE6FB989E2C87.idx new file mode 100644 index 0000000..73f7f54 Binary files /dev/null and b/.cache/clangd/index/Creep.hpp.DFCCE6FB989E2C87.idx differ diff --git a/.cache/clangd/index/CreepBase.cpp.58E0E4D279FDDABA.idx b/.cache/clangd/index/CreepBase.cpp.58E0E4D279FDDABA.idx new file mode 100644 index 0000000..5a8f691 Binary files /dev/null and b/.cache/clangd/index/CreepBase.cpp.58E0E4D279FDDABA.idx differ diff --git a/.cache/clangd/index/CreepBase.cpp.A09022785B8F4C70.idx b/.cache/clangd/index/CreepBase.cpp.A09022785B8F4C70.idx new file mode 100644 index 0000000..d8d7e8f Binary files /dev/null and b/.cache/clangd/index/CreepBase.cpp.A09022785B8F4C70.idx differ diff --git a/.cache/clangd/index/CreepBase.hpp.4B48E690924EBC82.idx b/.cache/clangd/index/CreepBase.hpp.4B48E690924EBC82.idx new file mode 100644 index 0000000..e0ea9c6 Binary files /dev/null and b/.cache/clangd/index/CreepBase.hpp.4B48E690924EBC82.idx differ diff --git a/.cache/clangd/index/CreepBase.hpp.7E8B850E5248473D.idx b/.cache/clangd/index/CreepBase.hpp.7E8B850E5248473D.idx new file mode 100644 index 0000000..3781af6 Binary files /dev/null and b/.cache/clangd/index/CreepBase.hpp.7E8B850E5248473D.idx differ diff --git a/.cache/clangd/index/Deposit.cpp.B320E3725B3179FE.idx b/.cache/clangd/index/Deposit.cpp.B320E3725B3179FE.idx new file mode 100644 index 0000000..61b0eab Binary files /dev/null and b/.cache/clangd/index/Deposit.cpp.B320E3725B3179FE.idx differ diff --git a/.cache/clangd/index/Deposit.cpp.FB5FB5745D0FB700.idx b/.cache/clangd/index/Deposit.cpp.FB5FB5745D0FB700.idx new file mode 100644 index 0000000..aaee1be Binary files /dev/null and b/.cache/clangd/index/Deposit.cpp.FB5FB5745D0FB700.idx differ diff --git a/.cache/clangd/index/Deposit.hpp.06E258CEC5CD1C13.idx b/.cache/clangd/index/Deposit.hpp.06E258CEC5CD1C13.idx new file mode 100644 index 0000000..eeb3a7f Binary files /dev/null and b/.cache/clangd/index/Deposit.hpp.06E258CEC5CD1C13.idx differ diff --git a/.cache/clangd/index/Deposit.hpp.329D291877BE420C.idx b/.cache/clangd/index/Deposit.hpp.329D291877BE420C.idx new file mode 100644 index 0000000..38dc74f Binary files /dev/null and b/.cache/clangd/index/Deposit.hpp.329D291877BE420C.idx differ diff --git a/.cache/clangd/index/Effect.hpp.40CE6F99A9A45745.idx b/.cache/clangd/index/Effect.hpp.40CE6F99A9A45745.idx new file mode 100644 index 0000000..ce30f41 Binary files /dev/null and b/.cache/clangd/index/Effect.hpp.40CE6F99A9A45745.idx differ diff --git a/.cache/clangd/index/Effect.hpp.6E97B57E81A1833E.idx b/.cache/clangd/index/Effect.hpp.6E97B57E81A1833E.idx new file mode 100644 index 0000000..2a62ee1 Binary files /dev/null and b/.cache/clangd/index/Effect.hpp.6E97B57E81A1833E.idx differ diff --git a/.cache/clangd/index/Engine.cpp.2029BC7F602F68B6.idx b/.cache/clangd/index/Engine.cpp.2029BC7F602F68B6.idx new file mode 100644 index 0000000..1d099ed Binary files /dev/null and b/.cache/clangd/index/Engine.cpp.2029BC7F602F68B6.idx differ diff --git a/.cache/clangd/index/Engine.cpp.E0EDBA5C39F74A71.idx b/.cache/clangd/index/Engine.cpp.E0EDBA5C39F74A71.idx new file mode 100644 index 0000000..60f41b5 Binary files /dev/null and b/.cache/clangd/index/Engine.cpp.E0EDBA5C39F74A71.idx differ diff --git a/.cache/clangd/index/Engine.hpp.7BCD69373EE97AC1.idx b/.cache/clangd/index/Engine.hpp.7BCD69373EE97AC1.idx new file mode 100644 index 0000000..158285a Binary files /dev/null and b/.cache/clangd/index/Engine.hpp.7BCD69373EE97AC1.idx differ diff --git a/.cache/clangd/index/Engine.hpp.EB7BBB1AC251CC3E.idx b/.cache/clangd/index/Engine.hpp.EB7BBB1AC251CC3E.idx new file mode 100644 index 0000000..af3c06f Binary files /dev/null and b/.cache/clangd/index/Engine.hpp.EB7BBB1AC251CC3E.idx differ diff --git a/.cache/clangd/index/Flag.cpp.18EE25E4561258A1.idx b/.cache/clangd/index/Flag.cpp.18EE25E4561258A1.idx new file mode 100644 index 0000000..6b3f07f Binary files /dev/null and b/.cache/clangd/index/Flag.cpp.18EE25E4561258A1.idx differ diff --git a/.cache/clangd/index/Flag.cpp.1A218F3467AD96F2.idx b/.cache/clangd/index/Flag.cpp.1A218F3467AD96F2.idx new file mode 100644 index 0000000..98f24bc Binary files /dev/null and b/.cache/clangd/index/Flag.cpp.1A218F3467AD96F2.idx differ diff --git a/.cache/clangd/index/Flag.hpp.65DC977F4438F2A9.idx b/.cache/clangd/index/Flag.hpp.65DC977F4438F2A9.idx new file mode 100644 index 0000000..a5d9bb7 Binary files /dev/null and b/.cache/clangd/index/Flag.hpp.65DC977F4438F2A9.idx differ diff --git a/.cache/clangd/index/Flag.hpp.F8A246B19154E01E.idx b/.cache/clangd/index/Flag.hpp.F8A246B19154E01E.idx new file mode 100644 index 0000000..a58ebff Binary files /dev/null and b/.cache/clangd/index/Flag.hpp.F8A246B19154E01E.idx differ diff --git a/.cache/clangd/index/Game.cpp.6D9E1D09306771B1.idx b/.cache/clangd/index/Game.cpp.6D9E1D09306771B1.idx new file mode 100644 index 0000000..67bb739 Binary files /dev/null and b/.cache/clangd/index/Game.cpp.6D9E1D09306771B1.idx differ diff --git a/.cache/clangd/index/Game.cpp.EAFC89EB266153E2.idx b/.cache/clangd/index/Game.cpp.EAFC89EB266153E2.idx new file mode 100644 index 0000000..eff860e Binary files /dev/null and b/.cache/clangd/index/Game.cpp.EAFC89EB266153E2.idx differ diff --git a/.cache/clangd/index/Game.hpp.36D2CF5D5132AD6E.idx b/.cache/clangd/index/Game.hpp.36D2CF5D5132AD6E.idx new file mode 100644 index 0000000..95dfd8d Binary files /dev/null and b/.cache/clangd/index/Game.hpp.36D2CF5D5132AD6E.idx differ diff --git a/.cache/clangd/index/Game.hpp.A18C93DE125B3555.idx b/.cache/clangd/index/Game.hpp.A18C93DE125B3555.idx new file mode 100644 index 0000000..f4cceb4 Binary files /dev/null and b/.cache/clangd/index/Game.hpp.A18C93DE125B3555.idx differ diff --git a/.cache/clangd/index/JS.cpp.9CE77F58AC81AB54.idx b/.cache/clangd/index/JS.cpp.9CE77F58AC81AB54.idx new file mode 100644 index 0000000..b2870a8 Binary files /dev/null and b/.cache/clangd/index/JS.cpp.9CE77F58AC81AB54.idx differ diff --git a/.cache/clangd/index/JS.cpp.E833D04113D5E3C4.idx b/.cache/clangd/index/JS.cpp.E833D04113D5E3C4.idx new file mode 100644 index 0000000..0c71887 Binary files /dev/null and b/.cache/clangd/index/JS.cpp.E833D04113D5E3C4.idx differ diff --git a/.cache/clangd/index/JS.hpp.0CEE092BFADF37BC.idx b/.cache/clangd/index/JS.hpp.0CEE092BFADF37BC.idx new file mode 100644 index 0000000..a57e771 Binary files /dev/null and b/.cache/clangd/index/JS.hpp.0CEE092BFADF37BC.idx differ diff --git a/.cache/clangd/index/JS.hpp.2B52BA2A72DFB1AA.idx b/.cache/clangd/index/JS.hpp.2B52BA2A72DFB1AA.idx new file mode 100644 index 0000000..c117673 Binary files /dev/null and b/.cache/clangd/index/JS.hpp.2B52BA2A72DFB1AA.idx differ diff --git a/.cache/clangd/index/JSON.hpp.177AA010EB3375B3.idx b/.cache/clangd/index/JSON.hpp.177AA010EB3375B3.idx new file mode 100644 index 0000000..0389b7e Binary files /dev/null and b/.cache/clangd/index/JSON.hpp.177AA010EB3375B3.idx differ diff --git a/.cache/clangd/index/JSON.hpp.C66D7A1922C1D024.idx b/.cache/clangd/index/JSON.hpp.C66D7A1922C1D024.idx new file mode 100644 index 0000000..0cc113d Binary files /dev/null and b/.cache/clangd/index/JSON.hpp.C66D7A1922C1D024.idx differ diff --git a/.cache/clangd/index/JsonTool.hpp.43B3A95F8C53CDB2.idx b/.cache/clangd/index/JsonTool.hpp.43B3A95F8C53CDB2.idx new file mode 100644 index 0000000..2943700 Binary files /dev/null and b/.cache/clangd/index/JsonTool.hpp.43B3A95F8C53CDB2.idx differ diff --git a/.cache/clangd/index/JsonTool.hpp.B6F2E41B8374E784.idx b/.cache/clangd/index/JsonTool.hpp.B6F2E41B8374E784.idx new file mode 100644 index 0000000..ef484ed Binary files /dev/null and b/.cache/clangd/index/JsonTool.hpp.B6F2E41B8374E784.idx differ diff --git a/.cache/clangd/index/Loop.cpp.5DCEC9BD3A29150E.idx b/.cache/clangd/index/Loop.cpp.5DCEC9BD3A29150E.idx new file mode 100644 index 0000000..46f21a1 Binary files /dev/null and b/.cache/clangd/index/Loop.cpp.5DCEC9BD3A29150E.idx differ diff --git a/.cache/clangd/index/Loop.cpp.C17AD05676EB59E6.idx b/.cache/clangd/index/Loop.cpp.C17AD05676EB59E6.idx new file mode 100644 index 0000000..431f895 Binary files /dev/null and b/.cache/clangd/index/Loop.cpp.C17AD05676EB59E6.idx differ diff --git a/.cache/clangd/index/Maintainer.cpp.06B26E41E119D52F.idx b/.cache/clangd/index/Maintainer.cpp.06B26E41E119D52F.idx new file mode 100644 index 0000000..f0cc886 Binary files /dev/null and b/.cache/clangd/index/Maintainer.cpp.06B26E41E119D52F.idx differ diff --git a/.cache/clangd/index/Maintainer.cpp.D42DBB105AF62633.idx b/.cache/clangd/index/Maintainer.cpp.D42DBB105AF62633.idx new file mode 100644 index 0000000..9ed77cd Binary files /dev/null and b/.cache/clangd/index/Maintainer.cpp.D42DBB105AF62633.idx differ diff --git a/.cache/clangd/index/Maintainer.hpp.99D47B227C1B98F2.idx b/.cache/clangd/index/Maintainer.hpp.99D47B227C1B98F2.idx new file mode 100644 index 0000000..7803a33 Binary files /dev/null and b/.cache/clangd/index/Maintainer.hpp.99D47B227C1B98F2.idx differ diff --git a/.cache/clangd/index/Maintainer.hpp.DEE88DFF2AC5402B.idx b/.cache/clangd/index/Maintainer.hpp.DEE88DFF2AC5402B.idx new file mode 100644 index 0000000..2261779 Binary files /dev/null and b/.cache/clangd/index/Maintainer.hpp.DEE88DFF2AC5402B.idx differ diff --git a/.cache/clangd/index/MeasureTool.hpp.6F5AD01338354ADE.idx b/.cache/clangd/index/MeasureTool.hpp.6F5AD01338354ADE.idx new file mode 100644 index 0000000..a752f25 Binary files /dev/null and b/.cache/clangd/index/MeasureTool.hpp.6F5AD01338354ADE.idx differ diff --git a/.cache/clangd/index/MeasureTool.hpp.B7540F2C43EEB974.idx b/.cache/clangd/index/MeasureTool.hpp.B7540F2C43EEB974.idx new file mode 100644 index 0000000..a828e6c Binary files /dev/null and b/.cache/clangd/index/MeasureTool.hpp.B7540F2C43EEB974.idx differ diff --git a/.cache/clangd/index/Memory.cpp.99C5CC5CE0EDEBD6.idx b/.cache/clangd/index/Memory.cpp.99C5CC5CE0EDEBD6.idx new file mode 100644 index 0000000..5422f0f Binary files /dev/null and b/.cache/clangd/index/Memory.cpp.99C5CC5CE0EDEBD6.idx differ diff --git a/.cache/clangd/index/Memory.cpp.A1F941785C071B86.idx b/.cache/clangd/index/Memory.cpp.A1F941785C071B86.idx new file mode 100644 index 0000000..0e193ea Binary files /dev/null and b/.cache/clangd/index/Memory.cpp.A1F941785C071B86.idx differ diff --git a/.cache/clangd/index/Memory.hpp.0E095D943C15E333.idx b/.cache/clangd/index/Memory.hpp.0E095D943C15E333.idx new file mode 100644 index 0000000..5614bde Binary files /dev/null and b/.cache/clangd/index/Memory.hpp.0E095D943C15E333.idx differ diff --git a/.cache/clangd/index/Memory.hpp.BED4B2D1E1F9B0C2.idx b/.cache/clangd/index/Memory.hpp.BED4B2D1E1F9B0C2.idx new file mode 100644 index 0000000..8a54af1 Binary files /dev/null and b/.cache/clangd/index/Memory.hpp.BED4B2D1E1F9B0C2.idx differ diff --git a/.cache/clangd/index/Miner.cpp.C9EC5776C7043A9B.idx b/.cache/clangd/index/Miner.cpp.C9EC5776C7043A9B.idx new file mode 100644 index 0000000..8b943a3 Binary files /dev/null and b/.cache/clangd/index/Miner.cpp.C9EC5776C7043A9B.idx differ diff --git a/.cache/clangd/index/Miner.hpp.EB1FA30764CFD36C.idx b/.cache/clangd/index/Miner.hpp.EB1FA30764CFD36C.idx new file mode 100644 index 0000000..d9d5e09 Binary files /dev/null and b/.cache/clangd/index/Miner.hpp.EB1FA30764CFD36C.idx differ diff --git a/.cache/clangd/index/Mineral.cpp.666B4AEACBC2DB86.idx b/.cache/clangd/index/Mineral.cpp.666B4AEACBC2DB86.idx new file mode 100644 index 0000000..1b387e4 Binary files /dev/null and b/.cache/clangd/index/Mineral.cpp.666B4AEACBC2DB86.idx differ diff --git a/.cache/clangd/index/Mineral.cpp.906707DE7CD459ED.idx b/.cache/clangd/index/Mineral.cpp.906707DE7CD459ED.idx new file mode 100644 index 0000000..7eb2ced Binary files /dev/null and b/.cache/clangd/index/Mineral.cpp.906707DE7CD459ED.idx differ diff --git a/.cache/clangd/index/Mineral.hpp.00E84CD1847DB6A5.idx b/.cache/clangd/index/Mineral.hpp.00E84CD1847DB6A5.idx new file mode 100644 index 0000000..e90c6a1 Binary files /dev/null and b/.cache/clangd/index/Mineral.hpp.00E84CD1847DB6A5.idx differ diff --git a/.cache/clangd/index/Mineral.hpp.78DF4C4C25B7897A.idx b/.cache/clangd/index/Mineral.hpp.78DF4C4C25B7897A.idx new file mode 100644 index 0000000..7186fb0 Binary files /dev/null and b/.cache/clangd/index/Mineral.hpp.78DF4C4C25B7897A.idx differ diff --git a/.cache/clangd/index/Nuke.cpp.261B72C64A097650.idx b/.cache/clangd/index/Nuke.cpp.261B72C64A097650.idx new file mode 100644 index 0000000..02b097b Binary files /dev/null and b/.cache/clangd/index/Nuke.cpp.261B72C64A097650.idx differ diff --git a/.cache/clangd/index/Nuke.cpp.929267C62F55D0BD.idx b/.cache/clangd/index/Nuke.cpp.929267C62F55D0BD.idx new file mode 100644 index 0000000..db8e441 Binary files /dev/null and b/.cache/clangd/index/Nuke.cpp.929267C62F55D0BD.idx differ diff --git a/.cache/clangd/index/Nuke.hpp.1C196CCEC502BF2A.idx b/.cache/clangd/index/Nuke.hpp.1C196CCEC502BF2A.idx new file mode 100644 index 0000000..aa9d18e Binary files /dev/null and b/.cache/clangd/index/Nuke.hpp.1C196CCEC502BF2A.idx differ diff --git a/.cache/clangd/index/Nuke.hpp.6A65FF1B6B8968CB.idx b/.cache/clangd/index/Nuke.hpp.6A65FF1B6B8968CB.idx new file mode 100644 index 0000000..54496ba Binary files /dev/null and b/.cache/clangd/index/Nuke.hpp.6A65FF1B6B8968CB.idx differ diff --git a/.cache/clangd/index/Object.cpp.8A22B5045D08A8FB.idx b/.cache/clangd/index/Object.cpp.8A22B5045D08A8FB.idx new file mode 100644 index 0000000..fa93c9e Binary files /dev/null and b/.cache/clangd/index/Object.cpp.8A22B5045D08A8FB.idx differ diff --git a/.cache/clangd/index/Object.cpp.DB6A28EEC8F0037D.idx b/.cache/clangd/index/Object.cpp.DB6A28EEC8F0037D.idx new file mode 100644 index 0000000..48ff8b9 Binary files /dev/null and b/.cache/clangd/index/Object.cpp.DB6A28EEC8F0037D.idx differ diff --git a/.cache/clangd/index/Object.hpp.3C3F71944F69B881.idx b/.cache/clangd/index/Object.hpp.3C3F71944F69B881.idx new file mode 100644 index 0000000..92c3356 Binary files /dev/null and b/.cache/clangd/index/Object.hpp.3C3F71944F69B881.idx differ diff --git a/.cache/clangd/index/Object.hpp.8949917CAC1F6766.idx b/.cache/clangd/index/Object.hpp.8949917CAC1F6766.idx new file mode 100644 index 0000000..1791f26 Binary files /dev/null and b/.cache/clangd/index/Object.hpp.8949917CAC1F6766.idx differ diff --git a/.cache/clangd/index/OwnedStructure.cpp.9DD418ED233CE05B.idx b/.cache/clangd/index/OwnedStructure.cpp.9DD418ED233CE05B.idx new file mode 100644 index 0000000..5ee1103 Binary files /dev/null and b/.cache/clangd/index/OwnedStructure.cpp.9DD418ED233CE05B.idx differ diff --git a/.cache/clangd/index/OwnedStructure.cpp.A246A9112B141B28.idx b/.cache/clangd/index/OwnedStructure.cpp.A246A9112B141B28.idx new file mode 100644 index 0000000..9bb62ea Binary files /dev/null and b/.cache/clangd/index/OwnedStructure.cpp.A246A9112B141B28.idx differ diff --git a/.cache/clangd/index/OwnedStructure.hpp.4E0C1F5E28C9CE2B.idx b/.cache/clangd/index/OwnedStructure.hpp.4E0C1F5E28C9CE2B.idx new file mode 100644 index 0000000..d8171ae Binary files /dev/null and b/.cache/clangd/index/OwnedStructure.hpp.4E0C1F5E28C9CE2B.idx differ diff --git a/.cache/clangd/index/OwnedStructure.hpp.54EE5107B7783033.idx b/.cache/clangd/index/OwnedStructure.hpp.54EE5107B7783033.idx new file mode 100644 index 0000000..0ef18da Binary files /dev/null and b/.cache/clangd/index/OwnedStructure.hpp.54EE5107B7783033.idx differ diff --git a/.cache/clangd/index/PathFinder.cpp.3929BF8940A12F82.idx b/.cache/clangd/index/PathFinder.cpp.3929BF8940A12F82.idx new file mode 100644 index 0000000..62789e6 Binary files /dev/null and b/.cache/clangd/index/PathFinder.cpp.3929BF8940A12F82.idx differ diff --git a/.cache/clangd/index/PathFinder.cpp.858789D071ADF3F0.idx b/.cache/clangd/index/PathFinder.cpp.858789D071ADF3F0.idx new file mode 100644 index 0000000..2fa16c7 Binary files /dev/null and b/.cache/clangd/index/PathFinder.cpp.858789D071ADF3F0.idx differ diff --git a/.cache/clangd/index/PathFinder.hpp.1EA1C755B007E529.idx b/.cache/clangd/index/PathFinder.hpp.1EA1C755B007E529.idx new file mode 100644 index 0000000..014de56 Binary files /dev/null and b/.cache/clangd/index/PathFinder.hpp.1EA1C755B007E529.idx differ diff --git a/.cache/clangd/index/PathFinder.hpp.8E03A78ACB16AE6E.idx b/.cache/clangd/index/PathFinder.hpp.8E03A78ACB16AE6E.idx new file mode 100644 index 0000000..1855ae9 Binary files /dev/null and b/.cache/clangd/index/PathFinder.hpp.8E03A78ACB16AE6E.idx differ diff --git a/.cache/clangd/index/PathTool.hpp.0B8302584BF05C09.idx b/.cache/clangd/index/PathTool.hpp.0B8302584BF05C09.idx new file mode 100644 index 0000000..cc2de97 Binary files /dev/null and b/.cache/clangd/index/PathTool.hpp.0B8302584BF05C09.idx differ diff --git a/.cache/clangd/index/PathTool.hpp.C0AEF63BE240B251.idx b/.cache/clangd/index/PathTool.hpp.C0AEF63BE240B251.idx new file mode 100644 index 0000000..08f2aa5 Binary files /dev/null and b/.cache/clangd/index/PathTool.hpp.C0AEF63BE240B251.idx differ diff --git a/.cache/clangd/index/PowerCreep.cpp.15A24FEC7A2B7620.idx b/.cache/clangd/index/PowerCreep.cpp.15A24FEC7A2B7620.idx new file mode 100644 index 0000000..f4009dc Binary files /dev/null and b/.cache/clangd/index/PowerCreep.cpp.15A24FEC7A2B7620.idx differ diff --git a/.cache/clangd/index/PowerCreep.cpp.4F3CAAACB83DA5F4.idx b/.cache/clangd/index/PowerCreep.cpp.4F3CAAACB83DA5F4.idx new file mode 100644 index 0000000..84a15e0 Binary files /dev/null and b/.cache/clangd/index/PowerCreep.cpp.4F3CAAACB83DA5F4.idx differ diff --git a/.cache/clangd/index/PowerCreep.hpp.71736AC67B4D210A.idx b/.cache/clangd/index/PowerCreep.hpp.71736AC67B4D210A.idx new file mode 100644 index 0000000..a20126b Binary files /dev/null and b/.cache/clangd/index/PowerCreep.hpp.71736AC67B4D210A.idx differ diff --git a/.cache/clangd/index/PowerCreep.hpp.A46F4EA09DE53DE4.idx b/.cache/clangd/index/PowerCreep.hpp.A46F4EA09DE53DE4.idx new file mode 100644 index 0000000..58b2a78 Binary files /dev/null and b/.cache/clangd/index/PowerCreep.hpp.A46F4EA09DE53DE4.idx differ diff --git a/.cache/clangd/index/RawMemory.cpp.D9E66C57B409D317.idx b/.cache/clangd/index/RawMemory.cpp.D9E66C57B409D317.idx new file mode 100644 index 0000000..dd9055f Binary files /dev/null and b/.cache/clangd/index/RawMemory.cpp.D9E66C57B409D317.idx differ diff --git a/.cache/clangd/index/RawMemory.cpp.F75BB771690FDA32.idx b/.cache/clangd/index/RawMemory.cpp.F75BB771690FDA32.idx new file mode 100644 index 0000000..7fd3557 Binary files /dev/null and b/.cache/clangd/index/RawMemory.cpp.F75BB771690FDA32.idx differ diff --git a/.cache/clangd/index/RawMemory.hpp.17858094617AA46D.idx b/.cache/clangd/index/RawMemory.hpp.17858094617AA46D.idx new file mode 100644 index 0000000..2fa8558 Binary files /dev/null and b/.cache/clangd/index/RawMemory.hpp.17858094617AA46D.idx differ diff --git a/.cache/clangd/index/RawMemory.hpp.C2923D447079B382.idx b/.cache/clangd/index/RawMemory.hpp.C2923D447079B382.idx new file mode 100644 index 0000000..036c782 Binary files /dev/null and b/.cache/clangd/index/RawMemory.hpp.C2923D447079B382.idx differ diff --git a/.cache/clangd/index/Resource.cpp.77BEFDE5CB413577.idx b/.cache/clangd/index/Resource.cpp.77BEFDE5CB413577.idx new file mode 100644 index 0000000..2fc161d Binary files /dev/null and b/.cache/clangd/index/Resource.cpp.77BEFDE5CB413577.idx differ diff --git a/.cache/clangd/index/Resource.cpp.D0FDE10CE7481DAB.idx b/.cache/clangd/index/Resource.cpp.D0FDE10CE7481DAB.idx new file mode 100644 index 0000000..7c335c8 Binary files /dev/null and b/.cache/clangd/index/Resource.cpp.D0FDE10CE7481DAB.idx differ diff --git a/.cache/clangd/index/Resource.hpp.5E7884E3AB08BF48.idx b/.cache/clangd/index/Resource.hpp.5E7884E3AB08BF48.idx new file mode 100644 index 0000000..1194d71 Binary files /dev/null and b/.cache/clangd/index/Resource.hpp.5E7884E3AB08BF48.idx differ diff --git a/.cache/clangd/index/Resource.hpp.A16E184D077ACC65.idx b/.cache/clangd/index/Resource.hpp.A16E184D077ACC65.idx new file mode 100644 index 0000000..22d90a4 Binary files /dev/null and b/.cache/clangd/index/Resource.hpp.A16E184D077ACC65.idx differ diff --git a/.cache/clangd/index/Room.cpp.34D30EC50DACDA10.idx b/.cache/clangd/index/Room.cpp.34D30EC50DACDA10.idx new file mode 100644 index 0000000..c3ac09b Binary files /dev/null and b/.cache/clangd/index/Room.cpp.34D30EC50DACDA10.idx differ diff --git a/.cache/clangd/index/Room.cpp.736DA4C4A006C5EE.idx b/.cache/clangd/index/Room.cpp.736DA4C4A006C5EE.idx new file mode 100644 index 0000000..394dc9b Binary files /dev/null and b/.cache/clangd/index/Room.cpp.736DA4C4A006C5EE.idx differ diff --git a/.cache/clangd/index/Room.cpp.D1D6ED803D6C3CC8.idx b/.cache/clangd/index/Room.cpp.D1D6ED803D6C3CC8.idx new file mode 100644 index 0000000..04884d1 Binary files /dev/null and b/.cache/clangd/index/Room.cpp.D1D6ED803D6C3CC8.idx differ diff --git a/.cache/clangd/index/Room.cpp.DF8CE7C3D2ABAC14.idx b/.cache/clangd/index/Room.cpp.DF8CE7C3D2ABAC14.idx new file mode 100644 index 0000000..a13d2ed Binary files /dev/null and b/.cache/clangd/index/Room.cpp.DF8CE7C3D2ABAC14.idx differ diff --git a/.cache/clangd/index/Room.hpp.405174A701B0B111.idx b/.cache/clangd/index/Room.hpp.405174A701B0B111.idx new file mode 100644 index 0000000..31d8c24 Binary files /dev/null and b/.cache/clangd/index/Room.hpp.405174A701B0B111.idx differ diff --git a/.cache/clangd/index/Room.hpp.4BAA62BD50A988E8.idx b/.cache/clangd/index/Room.hpp.4BAA62BD50A988E8.idx new file mode 100644 index 0000000..9e25ad7 Binary files /dev/null and b/.cache/clangd/index/Room.hpp.4BAA62BD50A988E8.idx differ diff --git a/.cache/clangd/index/Room.hpp.5A49AF77237812D5.idx b/.cache/clangd/index/Room.hpp.5A49AF77237812D5.idx new file mode 100644 index 0000000..3c4fde8 Binary files /dev/null and b/.cache/clangd/index/Room.hpp.5A49AF77237812D5.idx differ diff --git a/.cache/clangd/index/Room.hpp.7F05D3E1000893AA.idx b/.cache/clangd/index/Room.hpp.7F05D3E1000893AA.idx new file mode 100644 index 0000000..9a7245d Binary files /dev/null and b/.cache/clangd/index/Room.hpp.7F05D3E1000893AA.idx differ diff --git a/.cache/clangd/index/RoomObject.cpp.161A2E8761542871.idx b/.cache/clangd/index/RoomObject.cpp.161A2E8761542871.idx new file mode 100644 index 0000000..942c269 Binary files /dev/null and b/.cache/clangd/index/RoomObject.cpp.161A2E8761542871.idx differ diff --git a/.cache/clangd/index/RoomObject.cpp.A235D185ADDB9999.idx b/.cache/clangd/index/RoomObject.cpp.A235D185ADDB9999.idx new file mode 100644 index 0000000..89e243a Binary files /dev/null and b/.cache/clangd/index/RoomObject.cpp.A235D185ADDB9999.idx differ diff --git a/.cache/clangd/index/RoomObject.hpp.A1A7070FF0E2EF9F.idx b/.cache/clangd/index/RoomObject.hpp.A1A7070FF0E2EF9F.idx new file mode 100644 index 0000000..201a063 Binary files /dev/null and b/.cache/clangd/index/RoomObject.hpp.A1A7070FF0E2EF9F.idx differ diff --git a/.cache/clangd/index/RoomObject.hpp.E10E746801F6C9C2.idx b/.cache/clangd/index/RoomObject.hpp.E10E746801F6C9C2.idx new file mode 100644 index 0000000..b01db70 Binary files /dev/null and b/.cache/clangd/index/RoomObject.hpp.E10E746801F6C9C2.idx differ diff --git a/.cache/clangd/index/RoomPosition.cpp.0B476C3C5CD7FA77.idx b/.cache/clangd/index/RoomPosition.cpp.0B476C3C5CD7FA77.idx new file mode 100644 index 0000000..2d38259 Binary files /dev/null and b/.cache/clangd/index/RoomPosition.cpp.0B476C3C5CD7FA77.idx differ diff --git a/.cache/clangd/index/RoomPosition.cpp.C5D0318086F76F0E.idx b/.cache/clangd/index/RoomPosition.cpp.C5D0318086F76F0E.idx new file mode 100644 index 0000000..6d4cd33 Binary files /dev/null and b/.cache/clangd/index/RoomPosition.cpp.C5D0318086F76F0E.idx differ diff --git a/.cache/clangd/index/RoomPosition.hpp.8A25E301D3F7A985.idx b/.cache/clangd/index/RoomPosition.hpp.8A25E301D3F7A985.idx new file mode 100644 index 0000000..70ca729 Binary files /dev/null and b/.cache/clangd/index/RoomPosition.hpp.8A25E301D3F7A985.idx differ diff --git a/.cache/clangd/index/RoomPosition.hpp.F4DAACF771572D8C.idx b/.cache/clangd/index/RoomPosition.hpp.F4DAACF771572D8C.idx new file mode 100644 index 0000000..1eda428 Binary files /dev/null and b/.cache/clangd/index/RoomPosition.hpp.F4DAACF771572D8C.idx differ diff --git a/.cache/clangd/index/RoomTerrain.cpp.F76E5D67082E7FE9.idx b/.cache/clangd/index/RoomTerrain.cpp.F76E5D67082E7FE9.idx new file mode 100644 index 0000000..4d16b68 Binary files /dev/null and b/.cache/clangd/index/RoomTerrain.cpp.F76E5D67082E7FE9.idx differ diff --git a/.cache/clangd/index/RoomTerrain.cpp.FC862167BBE84DF2.idx b/.cache/clangd/index/RoomTerrain.cpp.FC862167BBE84DF2.idx new file mode 100644 index 0000000..df31b1d Binary files /dev/null and b/.cache/clangd/index/RoomTerrain.cpp.FC862167BBE84DF2.idx differ diff --git a/.cache/clangd/index/RoomTerrain.hpp.B2602A94D80A21E2.idx b/.cache/clangd/index/RoomTerrain.hpp.B2602A94D80A21E2.idx new file mode 100644 index 0000000..12f2395 Binary files /dev/null and b/.cache/clangd/index/RoomTerrain.hpp.B2602A94D80A21E2.idx differ diff --git a/.cache/clangd/index/RoomTerrain.hpp.CD1C754FC01647D7.idx b/.cache/clangd/index/RoomTerrain.hpp.CD1C754FC01647D7.idx new file mode 100644 index 0000000..7f5f06a Binary files /dev/null and b/.cache/clangd/index/RoomTerrain.hpp.CD1C754FC01647D7.idx differ diff --git a/.cache/clangd/index/RoomVisual.cpp.98D7648C7BD209C8.idx b/.cache/clangd/index/RoomVisual.cpp.98D7648C7BD209C8.idx new file mode 100644 index 0000000..ef3fdee Binary files /dev/null and b/.cache/clangd/index/RoomVisual.cpp.98D7648C7BD209C8.idx differ diff --git a/.cache/clangd/index/RoomVisual.cpp.DB732FBFE851D039.idx b/.cache/clangd/index/RoomVisual.cpp.DB732FBFE851D039.idx new file mode 100644 index 0000000..1a3d30b Binary files /dev/null and b/.cache/clangd/index/RoomVisual.cpp.DB732FBFE851D039.idx differ diff --git a/.cache/clangd/index/RoomVisual.hpp.631D2365C93944A5.idx b/.cache/clangd/index/RoomVisual.hpp.631D2365C93944A5.idx new file mode 100644 index 0000000..a71a431 Binary files /dev/null and b/.cache/clangd/index/RoomVisual.hpp.631D2365C93944A5.idx differ diff --git a/.cache/clangd/index/RoomVisual.hpp.97A79B8D0CA58BB0.idx b/.cache/clangd/index/RoomVisual.hpp.97A79B8D0CA58BB0.idx new file mode 100644 index 0000000..ca4c6d0 Binary files /dev/null and b/.cache/clangd/index/RoomVisual.hpp.97A79B8D0CA58BB0.idx differ diff --git a/.cache/clangd/index/Ruin.cpp.3F898A0C7420C2C6.idx b/.cache/clangd/index/Ruin.cpp.3F898A0C7420C2C6.idx new file mode 100644 index 0000000..e81fbc8 Binary files /dev/null and b/.cache/clangd/index/Ruin.cpp.3F898A0C7420C2C6.idx differ diff --git a/.cache/clangd/index/Ruin.cpp.DFB1E433655F6515.idx b/.cache/clangd/index/Ruin.cpp.DFB1E433655F6515.idx new file mode 100644 index 0000000..f8bbb98 Binary files /dev/null and b/.cache/clangd/index/Ruin.cpp.DFB1E433655F6515.idx differ diff --git a/.cache/clangd/index/Ruin.hpp.AF95ACC3B6E2A8C6.idx b/.cache/clangd/index/Ruin.hpp.AF95ACC3B6E2A8C6.idx new file mode 100644 index 0000000..47f7cd7 Binary files /dev/null and b/.cache/clangd/index/Ruin.hpp.AF95ACC3B6E2A8C6.idx differ diff --git a/.cache/clangd/index/Ruin.hpp.C5021FE3C4ADB897.idx b/.cache/clangd/index/Ruin.hpp.C5021FE3C4ADB897.idx new file mode 100644 index 0000000..299ac26 Binary files /dev/null and b/.cache/clangd/index/Ruin.hpp.C5021FE3C4ADB897.idx differ diff --git a/.cache/clangd/index/Source.cpp.03C4AA7308EF880F.idx b/.cache/clangd/index/Source.cpp.03C4AA7308EF880F.idx new file mode 100644 index 0000000..410de19 Binary files /dev/null and b/.cache/clangd/index/Source.cpp.03C4AA7308EF880F.idx differ diff --git a/.cache/clangd/index/Source.cpp.53BAEC045C149EFB.idx b/.cache/clangd/index/Source.cpp.53BAEC045C149EFB.idx new file mode 100644 index 0000000..8cb7cb4 Binary files /dev/null and b/.cache/clangd/index/Source.cpp.53BAEC045C149EFB.idx differ diff --git a/.cache/clangd/index/Source.hpp.189DAD857FA1250E.idx b/.cache/clangd/index/Source.hpp.189DAD857FA1250E.idx new file mode 100644 index 0000000..61660e0 Binary files /dev/null and b/.cache/clangd/index/Source.hpp.189DAD857FA1250E.idx differ diff --git a/.cache/clangd/index/Source.hpp.AD70F997F5385824.idx b/.cache/clangd/index/Source.hpp.AD70F997F5385824.idx new file mode 100644 index 0000000..7f26310 Binary files /dev/null and b/.cache/clangd/index/Source.hpp.AD70F997F5385824.idx differ diff --git a/.cache/clangd/index/Spawn.cpp.987D053F0FF54F71.idx b/.cache/clangd/index/Spawn.cpp.987D053F0FF54F71.idx new file mode 100644 index 0000000..ac0831a Binary files /dev/null and b/.cache/clangd/index/Spawn.cpp.987D053F0FF54F71.idx differ diff --git a/.cache/clangd/index/Spawn.cpp.A2B98557DED9A2F9.idx b/.cache/clangd/index/Spawn.cpp.A2B98557DED9A2F9.idx new file mode 100644 index 0000000..8a597c9 Binary files /dev/null and b/.cache/clangd/index/Spawn.cpp.A2B98557DED9A2F9.idx differ diff --git a/.cache/clangd/index/Spawn.hpp.74C2EDB25D3C2355.idx b/.cache/clangd/index/Spawn.hpp.74C2EDB25D3C2355.idx new file mode 100644 index 0000000..0e5e2b1 Binary files /dev/null and b/.cache/clangd/index/Spawn.hpp.74C2EDB25D3C2355.idx differ diff --git a/.cache/clangd/index/Spawn.hpp.B950DF79854F8A20.idx b/.cache/clangd/index/Spawn.hpp.B950DF79854F8A20.idx new file mode 100644 index 0000000..8a72b3c Binary files /dev/null and b/.cache/clangd/index/Spawn.hpp.B950DF79854F8A20.idx differ diff --git a/.cache/clangd/index/Store.cpp.3D16BB890A71C6AA.idx b/.cache/clangd/index/Store.cpp.3D16BB890A71C6AA.idx new file mode 100644 index 0000000..570afca Binary files /dev/null and b/.cache/clangd/index/Store.cpp.3D16BB890A71C6AA.idx differ diff --git a/.cache/clangd/index/Store.cpp.79C0D5DCE981602D.idx b/.cache/clangd/index/Store.cpp.79C0D5DCE981602D.idx new file mode 100644 index 0000000..8e9bc74 Binary files /dev/null and b/.cache/clangd/index/Store.cpp.79C0D5DCE981602D.idx differ diff --git a/.cache/clangd/index/Store.hpp.37A1F4EA7E15AE22.idx b/.cache/clangd/index/Store.hpp.37A1F4EA7E15AE22.idx new file mode 100644 index 0000000..59e4083 Binary files /dev/null and b/.cache/clangd/index/Store.hpp.37A1F4EA7E15AE22.idx differ diff --git a/.cache/clangd/index/Store.hpp.9697CC94B4B78E03.idx b/.cache/clangd/index/Store.hpp.9697CC94B4B78E03.idx new file mode 100644 index 0000000..7bfbb1d Binary files /dev/null and b/.cache/clangd/index/Store.hpp.9697CC94B4B78E03.idx differ diff --git a/.cache/clangd/index/Structure.cpp.436AB412D074D6D0.idx b/.cache/clangd/index/Structure.cpp.436AB412D074D6D0.idx new file mode 100644 index 0000000..0dd5f8e Binary files /dev/null and b/.cache/clangd/index/Structure.cpp.436AB412D074D6D0.idx differ diff --git a/.cache/clangd/index/Structure.cpp.8289CAA9F5C9B4DC.idx b/.cache/clangd/index/Structure.cpp.8289CAA9F5C9B4DC.idx new file mode 100644 index 0000000..21c2b10 Binary files /dev/null and b/.cache/clangd/index/Structure.cpp.8289CAA9F5C9B4DC.idx differ diff --git a/.cache/clangd/index/Structure.hpp.0DFB6F33446C278F.idx b/.cache/clangd/index/Structure.hpp.0DFB6F33446C278F.idx new file mode 100644 index 0000000..ec1d3a2 Binary files /dev/null and b/.cache/clangd/index/Structure.hpp.0DFB6F33446C278F.idx differ diff --git a/.cache/clangd/index/Structure.hpp.B006C3BF9576A9F2.idx b/.cache/clangd/index/Structure.hpp.B006C3BF9576A9F2.idx new file mode 100644 index 0000000..5b3d296 Binary files /dev/null and b/.cache/clangd/index/Structure.hpp.B006C3BF9576A9F2.idx differ diff --git a/.cache/clangd/index/StructureBase.hpp.3EE166F5643E6FAA.idx b/.cache/clangd/index/StructureBase.hpp.3EE166F5643E6FAA.idx new file mode 100644 index 0000000..7dc6fb5 Binary files /dev/null and b/.cache/clangd/index/StructureBase.hpp.3EE166F5643E6FAA.idx differ diff --git a/.cache/clangd/index/StructureBase.hpp.D3A2D45006602D7A.idx b/.cache/clangd/index/StructureBase.hpp.D3A2D45006602D7A.idx new file mode 100644 index 0000000..4757eea Binary files /dev/null and b/.cache/clangd/index/StructureBase.hpp.D3A2D45006602D7A.idx differ diff --git a/.cache/clangd/index/StructureContainer.cpp.1AFE7EB2BD0F8897.idx b/.cache/clangd/index/StructureContainer.cpp.1AFE7EB2BD0F8897.idx new file mode 100644 index 0000000..3823bf7 Binary files /dev/null and b/.cache/clangd/index/StructureContainer.cpp.1AFE7EB2BD0F8897.idx differ diff --git a/.cache/clangd/index/StructureContainer.cpp.8F4A1E4F620A6882.idx b/.cache/clangd/index/StructureContainer.cpp.8F4A1E4F620A6882.idx new file mode 100644 index 0000000..93e8e00 Binary files /dev/null and b/.cache/clangd/index/StructureContainer.cpp.8F4A1E4F620A6882.idx differ diff --git a/.cache/clangd/index/StructureContainer.hpp.4E5678BFDB16B77F.idx b/.cache/clangd/index/StructureContainer.hpp.4E5678BFDB16B77F.idx new file mode 100644 index 0000000..da42376 Binary files /dev/null and b/.cache/clangd/index/StructureContainer.hpp.4E5678BFDB16B77F.idx differ diff --git a/.cache/clangd/index/StructureContainer.hpp.D962A83289A02BAF.idx b/.cache/clangd/index/StructureContainer.hpp.D962A83289A02BAF.idx new file mode 100644 index 0000000..f6bff1b Binary files /dev/null and b/.cache/clangd/index/StructureContainer.hpp.D962A83289A02BAF.idx differ diff --git a/.cache/clangd/index/StructureController.cpp.AE363AC9C69C4863.idx b/.cache/clangd/index/StructureController.cpp.AE363AC9C69C4863.idx new file mode 100644 index 0000000..33e6502 Binary files /dev/null and b/.cache/clangd/index/StructureController.cpp.AE363AC9C69C4863.idx differ diff --git a/.cache/clangd/index/StructureController.cpp.BA464B31AB9656C8.idx b/.cache/clangd/index/StructureController.cpp.BA464B31AB9656C8.idx new file mode 100644 index 0000000..9a548fd Binary files /dev/null and b/.cache/clangd/index/StructureController.cpp.BA464B31AB9656C8.idx differ diff --git a/.cache/clangd/index/StructureController.hpp.027CEDB2F8AA04D6.idx b/.cache/clangd/index/StructureController.hpp.027CEDB2F8AA04D6.idx new file mode 100644 index 0000000..1955426 Binary files /dev/null and b/.cache/clangd/index/StructureController.hpp.027CEDB2F8AA04D6.idx differ diff --git a/.cache/clangd/index/StructureController.hpp.480AE308E99B5EE4.idx b/.cache/clangd/index/StructureController.hpp.480AE308E99B5EE4.idx new file mode 100644 index 0000000..547810d Binary files /dev/null and b/.cache/clangd/index/StructureController.hpp.480AE308E99B5EE4.idx differ diff --git a/.cache/clangd/index/StructureExtension.cpp.58CCAE4B4A87AF30.idx b/.cache/clangd/index/StructureExtension.cpp.58CCAE4B4A87AF30.idx new file mode 100644 index 0000000..6b7e892 Binary files /dev/null and b/.cache/clangd/index/StructureExtension.cpp.58CCAE4B4A87AF30.idx differ diff --git a/.cache/clangd/index/StructureExtension.cpp.5A4270723DAE94EF.idx b/.cache/clangd/index/StructureExtension.cpp.5A4270723DAE94EF.idx new file mode 100644 index 0000000..18e5b33 Binary files /dev/null and b/.cache/clangd/index/StructureExtension.cpp.5A4270723DAE94EF.idx differ diff --git a/.cache/clangd/index/StructureExtension.hpp.3008167BD64960FC.idx b/.cache/clangd/index/StructureExtension.hpp.3008167BD64960FC.idx new file mode 100644 index 0000000..ed9f107 Binary files /dev/null and b/.cache/clangd/index/StructureExtension.hpp.3008167BD64960FC.idx differ diff --git a/.cache/clangd/index/StructureExtension.hpp.E4DE93C77FF2DE45.idx b/.cache/clangd/index/StructureExtension.hpp.E4DE93C77FF2DE45.idx new file mode 100644 index 0000000..e0e166a Binary files /dev/null and b/.cache/clangd/index/StructureExtension.hpp.E4DE93C77FF2DE45.idx differ diff --git a/.cache/clangd/index/StructureExtractor.cpp.2E57717532C79F20.idx b/.cache/clangd/index/StructureExtractor.cpp.2E57717532C79F20.idx new file mode 100644 index 0000000..b31be61 Binary files /dev/null and b/.cache/clangd/index/StructureExtractor.cpp.2E57717532C79F20.idx differ diff --git a/.cache/clangd/index/StructureExtractor.cpp.CF7007138905569D.idx b/.cache/clangd/index/StructureExtractor.cpp.CF7007138905569D.idx new file mode 100644 index 0000000..006c107 Binary files /dev/null and b/.cache/clangd/index/StructureExtractor.cpp.CF7007138905569D.idx differ diff --git a/.cache/clangd/index/StructureExtractor.hpp.595B69B7237EDB46.idx b/.cache/clangd/index/StructureExtractor.hpp.595B69B7237EDB46.idx new file mode 100644 index 0000000..4507b51 Binary files /dev/null and b/.cache/clangd/index/StructureExtractor.hpp.595B69B7237EDB46.idx differ diff --git a/.cache/clangd/index/StructureExtractor.hpp.BBD5F4FC5AB54312.idx b/.cache/clangd/index/StructureExtractor.hpp.BBD5F4FC5AB54312.idx new file mode 100644 index 0000000..9389555 Binary files /dev/null and b/.cache/clangd/index/StructureExtractor.hpp.BBD5F4FC5AB54312.idx differ diff --git a/.cache/clangd/index/StructureFactory.cpp.68FBD58EA690A4AE.idx b/.cache/clangd/index/StructureFactory.cpp.68FBD58EA690A4AE.idx new file mode 100644 index 0000000..11aa5f2 Binary files /dev/null and b/.cache/clangd/index/StructureFactory.cpp.68FBD58EA690A4AE.idx differ diff --git a/.cache/clangd/index/StructureFactory.cpp.DAC57F7AE1B23668.idx b/.cache/clangd/index/StructureFactory.cpp.DAC57F7AE1B23668.idx new file mode 100644 index 0000000..73569e0 Binary files /dev/null and b/.cache/clangd/index/StructureFactory.cpp.DAC57F7AE1B23668.idx differ diff --git a/.cache/clangd/index/StructureFactory.hpp.7ABD3C626D684582.idx b/.cache/clangd/index/StructureFactory.hpp.7ABD3C626D684582.idx new file mode 100644 index 0000000..d49dd5f Binary files /dev/null and b/.cache/clangd/index/StructureFactory.hpp.7ABD3C626D684582.idx differ diff --git a/.cache/clangd/index/StructureFactory.hpp.EF8881D34782398D.idx b/.cache/clangd/index/StructureFactory.hpp.EF8881D34782398D.idx new file mode 100644 index 0000000..e3c757b Binary files /dev/null and b/.cache/clangd/index/StructureFactory.hpp.EF8881D34782398D.idx differ diff --git a/.cache/clangd/index/StructureInvaderCore.cpp.BE2B2CB0D2F86D1B.idx b/.cache/clangd/index/StructureInvaderCore.cpp.BE2B2CB0D2F86D1B.idx new file mode 100644 index 0000000..e5544b2 Binary files /dev/null and b/.cache/clangd/index/StructureInvaderCore.cpp.BE2B2CB0D2F86D1B.idx differ diff --git a/.cache/clangd/index/StructureInvaderCore.cpp.C2E8618DAABE8B02.idx b/.cache/clangd/index/StructureInvaderCore.cpp.C2E8618DAABE8B02.idx new file mode 100644 index 0000000..50da7b8 Binary files /dev/null and b/.cache/clangd/index/StructureInvaderCore.cpp.C2E8618DAABE8B02.idx differ diff --git a/.cache/clangd/index/StructureInvaderCore.hpp.0B5BF7BC0A807DB6.idx b/.cache/clangd/index/StructureInvaderCore.hpp.0B5BF7BC0A807DB6.idx new file mode 100644 index 0000000..b99248d Binary files /dev/null and b/.cache/clangd/index/StructureInvaderCore.hpp.0B5BF7BC0A807DB6.idx differ diff --git a/.cache/clangd/index/StructureInvaderCore.hpp.61058AF11F94AA3A.idx b/.cache/clangd/index/StructureInvaderCore.hpp.61058AF11F94AA3A.idx new file mode 100644 index 0000000..5c2f00e Binary files /dev/null and b/.cache/clangd/index/StructureInvaderCore.hpp.61058AF11F94AA3A.idx differ diff --git a/.cache/clangd/index/StructureKeeperLair.cpp.D1329C2B9B35125F.idx b/.cache/clangd/index/StructureKeeperLair.cpp.D1329C2B9B35125F.idx new file mode 100644 index 0000000..6e1a8c1 Binary files /dev/null and b/.cache/clangd/index/StructureKeeperLair.cpp.D1329C2B9B35125F.idx differ diff --git a/.cache/clangd/index/StructureKeeperLair.cpp.EE0632050194B55B.idx b/.cache/clangd/index/StructureKeeperLair.cpp.EE0632050194B55B.idx new file mode 100644 index 0000000..a86cb47 Binary files /dev/null and b/.cache/clangd/index/StructureKeeperLair.cpp.EE0632050194B55B.idx differ diff --git a/.cache/clangd/index/StructureKeeperLair.hpp.E785BC97C2AF30F6.idx b/.cache/clangd/index/StructureKeeperLair.hpp.E785BC97C2AF30F6.idx new file mode 100644 index 0000000..eab2eee Binary files /dev/null and b/.cache/clangd/index/StructureKeeperLair.hpp.E785BC97C2AF30F6.idx differ diff --git a/.cache/clangd/index/StructureKeeperLair.hpp.ECA1F284CC94F97A.idx b/.cache/clangd/index/StructureKeeperLair.hpp.ECA1F284CC94F97A.idx new file mode 100644 index 0000000..e0cda03 Binary files /dev/null and b/.cache/clangd/index/StructureKeeperLair.hpp.ECA1F284CC94F97A.idx differ diff --git a/.cache/clangd/index/StructureLink.cpp.CCEAC3FB78A709EE.idx b/.cache/clangd/index/StructureLink.cpp.CCEAC3FB78A709EE.idx new file mode 100644 index 0000000..3d00e56 Binary files /dev/null and b/.cache/clangd/index/StructureLink.cpp.CCEAC3FB78A709EE.idx differ diff --git a/.cache/clangd/index/StructureLink.cpp.D3885023DE0CFABD.idx b/.cache/clangd/index/StructureLink.cpp.D3885023DE0CFABD.idx new file mode 100644 index 0000000..fff4d12 Binary files /dev/null and b/.cache/clangd/index/StructureLink.cpp.D3885023DE0CFABD.idx differ diff --git a/.cache/clangd/index/StructureLink.hpp.0D91ED9EAB478F1E.idx b/.cache/clangd/index/StructureLink.hpp.0D91ED9EAB478F1E.idx new file mode 100644 index 0000000..5833e1a Binary files /dev/null and b/.cache/clangd/index/StructureLink.hpp.0D91ED9EAB478F1E.idx differ diff --git a/.cache/clangd/index/StructureLink.hpp.F1C6A2728A3AE28B.idx b/.cache/clangd/index/StructureLink.hpp.F1C6A2728A3AE28B.idx new file mode 100644 index 0000000..36d1226 Binary files /dev/null and b/.cache/clangd/index/StructureLink.hpp.F1C6A2728A3AE28B.idx differ diff --git a/.cache/clangd/index/StructureNuker.cpp.5927449CCE01C9BA.idx b/.cache/clangd/index/StructureNuker.cpp.5927449CCE01C9BA.idx new file mode 100644 index 0000000..a837ca0 Binary files /dev/null and b/.cache/clangd/index/StructureNuker.cpp.5927449CCE01C9BA.idx differ diff --git a/.cache/clangd/index/StructureNuker.cpp.FD80C79FBFD912CF.idx b/.cache/clangd/index/StructureNuker.cpp.FD80C79FBFD912CF.idx new file mode 100644 index 0000000..0b0e5a8 Binary files /dev/null and b/.cache/clangd/index/StructureNuker.cpp.FD80C79FBFD912CF.idx differ diff --git a/.cache/clangd/index/StructureNuker.hpp.0A5A743BF6A1CAD2.idx b/.cache/clangd/index/StructureNuker.hpp.0A5A743BF6A1CAD2.idx new file mode 100644 index 0000000..76375a2 Binary files /dev/null and b/.cache/clangd/index/StructureNuker.hpp.0A5A743BF6A1CAD2.idx differ diff --git a/.cache/clangd/index/StructureNuker.hpp.D41E291A19627F12.idx b/.cache/clangd/index/StructureNuker.hpp.D41E291A19627F12.idx new file mode 100644 index 0000000..f931dbe Binary files /dev/null and b/.cache/clangd/index/StructureNuker.hpp.D41E291A19627F12.idx differ diff --git a/.cache/clangd/index/StructureObserver.cpp.8EEE079D59E92523.idx b/.cache/clangd/index/StructureObserver.cpp.8EEE079D59E92523.idx new file mode 100644 index 0000000..b2b858d Binary files /dev/null and b/.cache/clangd/index/StructureObserver.cpp.8EEE079D59E92523.idx differ diff --git a/.cache/clangd/index/StructureObserver.cpp.B8A400A04BFE25E7.idx b/.cache/clangd/index/StructureObserver.cpp.B8A400A04BFE25E7.idx new file mode 100644 index 0000000..cadb0c2 Binary files /dev/null and b/.cache/clangd/index/StructureObserver.cpp.B8A400A04BFE25E7.idx differ diff --git a/.cache/clangd/index/StructureObserver.hpp.0DA29E161AC1EAC0.idx b/.cache/clangd/index/StructureObserver.hpp.0DA29E161AC1EAC0.idx new file mode 100644 index 0000000..3753062 Binary files /dev/null and b/.cache/clangd/index/StructureObserver.hpp.0DA29E161AC1EAC0.idx differ diff --git a/.cache/clangd/index/StructureObserver.hpp.BB084722192368B6.idx b/.cache/clangd/index/StructureObserver.hpp.BB084722192368B6.idx new file mode 100644 index 0000000..6302717 Binary files /dev/null and b/.cache/clangd/index/StructureObserver.hpp.BB084722192368B6.idx differ diff --git a/.cache/clangd/index/StructurePortal.cpp.F4CD690CE4B9F602.idx b/.cache/clangd/index/StructurePortal.cpp.F4CD690CE4B9F602.idx new file mode 100644 index 0000000..9416eaa Binary files /dev/null and b/.cache/clangd/index/StructurePortal.cpp.F4CD690CE4B9F602.idx differ diff --git a/.cache/clangd/index/StructurePortal.cpp.FE6B1E0D5403E41B.idx b/.cache/clangd/index/StructurePortal.cpp.FE6B1E0D5403E41B.idx new file mode 100644 index 0000000..a6fce26 Binary files /dev/null and b/.cache/clangd/index/StructurePortal.cpp.FE6B1E0D5403E41B.idx differ diff --git a/.cache/clangd/index/StructurePortal.hpp.04636A27B975C96D.idx b/.cache/clangd/index/StructurePortal.hpp.04636A27B975C96D.idx new file mode 100644 index 0000000..8d3411b Binary files /dev/null and b/.cache/clangd/index/StructurePortal.hpp.04636A27B975C96D.idx differ diff --git a/.cache/clangd/index/StructurePortal.hpp.2935942F31CF531A.idx b/.cache/clangd/index/StructurePortal.hpp.2935942F31CF531A.idx new file mode 100644 index 0000000..1002174 Binary files /dev/null and b/.cache/clangd/index/StructurePortal.hpp.2935942F31CF531A.idx differ diff --git a/.cache/clangd/index/StructurePowerBank.cpp.1EF7102806D7C2AA.idx b/.cache/clangd/index/StructurePowerBank.cpp.1EF7102806D7C2AA.idx new file mode 100644 index 0000000..50af2c3 Binary files /dev/null and b/.cache/clangd/index/StructurePowerBank.cpp.1EF7102806D7C2AA.idx differ diff --git a/.cache/clangd/index/StructurePowerBank.cpp.2E439E9B9CC61915.idx b/.cache/clangd/index/StructurePowerBank.cpp.2E439E9B9CC61915.idx new file mode 100644 index 0000000..fb3a6bc Binary files /dev/null and b/.cache/clangd/index/StructurePowerBank.cpp.2E439E9B9CC61915.idx differ diff --git a/.cache/clangd/index/StructurePowerBank.hpp.5EC6D8CC939E6680.idx b/.cache/clangd/index/StructurePowerBank.hpp.5EC6D8CC939E6680.idx new file mode 100644 index 0000000..3606a0e Binary files /dev/null and b/.cache/clangd/index/StructurePowerBank.hpp.5EC6D8CC939E6680.idx differ diff --git a/.cache/clangd/index/StructurePowerBank.hpp.F7DF3B94B54C4572.idx b/.cache/clangd/index/StructurePowerBank.hpp.F7DF3B94B54C4572.idx new file mode 100644 index 0000000..367d11b Binary files /dev/null and b/.cache/clangd/index/StructurePowerBank.hpp.F7DF3B94B54C4572.idx differ diff --git a/.cache/clangd/index/StructurePowerSpawn.cpp.4C9F50339D5A0BE0.idx b/.cache/clangd/index/StructurePowerSpawn.cpp.4C9F50339D5A0BE0.idx new file mode 100644 index 0000000..fc69078 Binary files /dev/null and b/.cache/clangd/index/StructurePowerSpawn.cpp.4C9F50339D5A0BE0.idx differ diff --git a/.cache/clangd/index/StructurePowerSpawn.cpp.B4C19D20C2431943.idx b/.cache/clangd/index/StructurePowerSpawn.cpp.B4C19D20C2431943.idx new file mode 100644 index 0000000..21dd2fe Binary files /dev/null and b/.cache/clangd/index/StructurePowerSpawn.cpp.B4C19D20C2431943.idx differ diff --git a/.cache/clangd/index/StructurePowerSpawn.hpp.11EF6AE0009C6852.idx b/.cache/clangd/index/StructurePowerSpawn.hpp.11EF6AE0009C6852.idx new file mode 100644 index 0000000..d0a1664 Binary files /dev/null and b/.cache/clangd/index/StructurePowerSpawn.hpp.11EF6AE0009C6852.idx differ diff --git a/.cache/clangd/index/StructurePowerSpawn.hpp.638D66BF36262F84.idx b/.cache/clangd/index/StructurePowerSpawn.hpp.638D66BF36262F84.idx new file mode 100644 index 0000000..91afaca Binary files /dev/null and b/.cache/clangd/index/StructurePowerSpawn.hpp.638D66BF36262F84.idx differ diff --git a/.cache/clangd/index/StructureRampart.cpp.2A09FBAD12E93AD9.idx b/.cache/clangd/index/StructureRampart.cpp.2A09FBAD12E93AD9.idx new file mode 100644 index 0000000..62bd418 Binary files /dev/null and b/.cache/clangd/index/StructureRampart.cpp.2A09FBAD12E93AD9.idx differ diff --git a/.cache/clangd/index/StructureRampart.cpp.363AAC98BC28E853.idx b/.cache/clangd/index/StructureRampart.cpp.363AAC98BC28E853.idx new file mode 100644 index 0000000..5473994 Binary files /dev/null and b/.cache/clangd/index/StructureRampart.cpp.363AAC98BC28E853.idx differ diff --git a/.cache/clangd/index/StructureRampart.hpp.3509542E9A73A5C9.idx b/.cache/clangd/index/StructureRampart.hpp.3509542E9A73A5C9.idx new file mode 100644 index 0000000..85a26f2 Binary files /dev/null and b/.cache/clangd/index/StructureRampart.hpp.3509542E9A73A5C9.idx differ diff --git a/.cache/clangd/index/StructureRampart.hpp.F0DB1B3DF22E1056.idx b/.cache/clangd/index/StructureRampart.hpp.F0DB1B3DF22E1056.idx new file mode 100644 index 0000000..bcecba5 Binary files /dev/null and b/.cache/clangd/index/StructureRampart.hpp.F0DB1B3DF22E1056.idx differ diff --git a/.cache/clangd/index/StructureRoad.cpp.098CCF07120857AC.idx b/.cache/clangd/index/StructureRoad.cpp.098CCF07120857AC.idx new file mode 100644 index 0000000..b92f61c Binary files /dev/null and b/.cache/clangd/index/StructureRoad.cpp.098CCF07120857AC.idx differ diff --git a/.cache/clangd/index/StructureRoad.cpp.121BDA55F4A35F9D.idx b/.cache/clangd/index/StructureRoad.cpp.121BDA55F4A35F9D.idx new file mode 100644 index 0000000..8764c84 Binary files /dev/null and b/.cache/clangd/index/StructureRoad.cpp.121BDA55F4A35F9D.idx differ diff --git a/.cache/clangd/index/StructureRoad.hpp.223CD6C4B27807B4.idx b/.cache/clangd/index/StructureRoad.hpp.223CD6C4B27807B4.idx new file mode 100644 index 0000000..b57d03a Binary files /dev/null and b/.cache/clangd/index/StructureRoad.hpp.223CD6C4B27807B4.idx differ diff --git a/.cache/clangd/index/StructureRoad.hpp.94CD76219DBB3777.idx b/.cache/clangd/index/StructureRoad.hpp.94CD76219DBB3777.idx new file mode 100644 index 0000000..b2a28ce Binary files /dev/null and b/.cache/clangd/index/StructureRoad.hpp.94CD76219DBB3777.idx differ diff --git a/.cache/clangd/index/StructureSpawn.cpp.2D619CD6209466A9.idx b/.cache/clangd/index/StructureSpawn.cpp.2D619CD6209466A9.idx new file mode 100644 index 0000000..f6b3f6a Binary files /dev/null and b/.cache/clangd/index/StructureSpawn.cpp.2D619CD6209466A9.idx differ diff --git a/.cache/clangd/index/StructureSpawn.cpp.2F1A39F78F4EECE4.idx b/.cache/clangd/index/StructureSpawn.cpp.2F1A39F78F4EECE4.idx new file mode 100644 index 0000000..f8f94ef Binary files /dev/null and b/.cache/clangd/index/StructureSpawn.cpp.2F1A39F78F4EECE4.idx differ diff --git a/.cache/clangd/index/StructureSpawn.hpp.E9DC7C76E49ABBD3.idx b/.cache/clangd/index/StructureSpawn.hpp.E9DC7C76E49ABBD3.idx new file mode 100644 index 0000000..973d46c Binary files /dev/null and b/.cache/clangd/index/StructureSpawn.hpp.E9DC7C76E49ABBD3.idx differ diff --git a/.cache/clangd/index/StructureSpawn.hpp.F0E5A55A7239BBFF.idx b/.cache/clangd/index/StructureSpawn.hpp.F0E5A55A7239BBFF.idx new file mode 100644 index 0000000..c6b23eb Binary files /dev/null and b/.cache/clangd/index/StructureSpawn.hpp.F0E5A55A7239BBFF.idx differ diff --git a/.cache/clangd/index/StructureSpawnSpawning.cpp.0906078A91D44C73.idx b/.cache/clangd/index/StructureSpawnSpawning.cpp.0906078A91D44C73.idx new file mode 100644 index 0000000..04c8438 Binary files /dev/null and b/.cache/clangd/index/StructureSpawnSpawning.cpp.0906078A91D44C73.idx differ diff --git a/.cache/clangd/index/StructureSpawnSpawning.cpp.38E67182E8F775FF.idx b/.cache/clangd/index/StructureSpawnSpawning.cpp.38E67182E8F775FF.idx new file mode 100644 index 0000000..3fd7586 Binary files /dev/null and b/.cache/clangd/index/StructureSpawnSpawning.cpp.38E67182E8F775FF.idx differ diff --git a/.cache/clangd/index/StructureSpawnSpawning.hpp.CD0AD931BFE5558F.idx b/.cache/clangd/index/StructureSpawnSpawning.hpp.CD0AD931BFE5558F.idx new file mode 100644 index 0000000..01e90a9 Binary files /dev/null and b/.cache/clangd/index/StructureSpawnSpawning.hpp.CD0AD931BFE5558F.idx differ diff --git a/.cache/clangd/index/StructureSpawnSpawning.hpp.E6E83D2B23730E54.idx b/.cache/clangd/index/StructureSpawnSpawning.hpp.E6E83D2B23730E54.idx new file mode 100644 index 0000000..94764fa Binary files /dev/null and b/.cache/clangd/index/StructureSpawnSpawning.hpp.E6E83D2B23730E54.idx differ diff --git a/.cache/clangd/index/StructureStorage.cpp.01D44A517E7D6DFB.idx b/.cache/clangd/index/StructureStorage.cpp.01D44A517E7D6DFB.idx new file mode 100644 index 0000000..f2045b3 Binary files /dev/null and b/.cache/clangd/index/StructureStorage.cpp.01D44A517E7D6DFB.idx differ diff --git a/.cache/clangd/index/StructureStorage.cpp.407DA61191A6CBB3.idx b/.cache/clangd/index/StructureStorage.cpp.407DA61191A6CBB3.idx new file mode 100644 index 0000000..ca7fc11 Binary files /dev/null and b/.cache/clangd/index/StructureStorage.cpp.407DA61191A6CBB3.idx differ diff --git a/.cache/clangd/index/StructureStorage.hpp.11441440C71A4145.idx b/.cache/clangd/index/StructureStorage.hpp.11441440C71A4145.idx new file mode 100644 index 0000000..61900ab Binary files /dev/null and b/.cache/clangd/index/StructureStorage.hpp.11441440C71A4145.idx differ diff --git a/.cache/clangd/index/StructureStorage.hpp.817E4B0E08E8B7FF.idx b/.cache/clangd/index/StructureStorage.hpp.817E4B0E08E8B7FF.idx new file mode 100644 index 0000000..83f4edb Binary files /dev/null and b/.cache/clangd/index/StructureStorage.hpp.817E4B0E08E8B7FF.idx differ diff --git a/.cache/clangd/index/StructureTerminal.cpp.B0975CF0B9C9E88B.idx b/.cache/clangd/index/StructureTerminal.cpp.B0975CF0B9C9E88B.idx new file mode 100644 index 0000000..8d3c3b6 Binary files /dev/null and b/.cache/clangd/index/StructureTerminal.cpp.B0975CF0B9C9E88B.idx differ diff --git a/.cache/clangd/index/StructureTerminal.cpp.CF1D1FD0AE56CF3F.idx b/.cache/clangd/index/StructureTerminal.cpp.CF1D1FD0AE56CF3F.idx new file mode 100644 index 0000000..4cabf25 Binary files /dev/null and b/.cache/clangd/index/StructureTerminal.cpp.CF1D1FD0AE56CF3F.idx differ diff --git a/.cache/clangd/index/StructureTerminal.hpp.40F4BE087623B8B3.idx b/.cache/clangd/index/StructureTerminal.hpp.40F4BE087623B8B3.idx new file mode 100644 index 0000000..47002c6 Binary files /dev/null and b/.cache/clangd/index/StructureTerminal.hpp.40F4BE087623B8B3.idx differ diff --git a/.cache/clangd/index/StructureTerminal.hpp.50D5C6B053FEDE4E.idx b/.cache/clangd/index/StructureTerminal.hpp.50D5C6B053FEDE4E.idx new file mode 100644 index 0000000..ab0b882 Binary files /dev/null and b/.cache/clangd/index/StructureTerminal.hpp.50D5C6B053FEDE4E.idx differ diff --git a/.cache/clangd/index/StructureTower.cpp.469033BF734FE09D.idx b/.cache/clangd/index/StructureTower.cpp.469033BF734FE09D.idx new file mode 100644 index 0000000..5f680c5 Binary files /dev/null and b/.cache/clangd/index/StructureTower.cpp.469033BF734FE09D.idx differ diff --git a/.cache/clangd/index/StructureTower.cpp.9172FAF4873D8232.idx b/.cache/clangd/index/StructureTower.cpp.9172FAF4873D8232.idx new file mode 100644 index 0000000..2065f34 Binary files /dev/null and b/.cache/clangd/index/StructureTower.cpp.9172FAF4873D8232.idx differ diff --git a/.cache/clangd/index/StructureTower.hpp.AF0F1ECA53692BE0.idx b/.cache/clangd/index/StructureTower.hpp.AF0F1ECA53692BE0.idx new file mode 100644 index 0000000..f42c7f7 Binary files /dev/null and b/.cache/clangd/index/StructureTower.hpp.AF0F1ECA53692BE0.idx differ diff --git a/.cache/clangd/index/StructureTower.hpp.DB43B0C64E48435F.idx b/.cache/clangd/index/StructureTower.hpp.DB43B0C64E48435F.idx new file mode 100644 index 0000000..a091cff Binary files /dev/null and b/.cache/clangd/index/StructureTower.hpp.DB43B0C64E48435F.idx differ diff --git a/.cache/clangd/index/StructureWall.cpp.39C691C0B3347D59.idx b/.cache/clangd/index/StructureWall.cpp.39C691C0B3347D59.idx new file mode 100644 index 0000000..b11fa93 Binary files /dev/null and b/.cache/clangd/index/StructureWall.cpp.39C691C0B3347D59.idx differ diff --git a/.cache/clangd/index/StructureWall.cpp.EF38448006CEF8F4.idx b/.cache/clangd/index/StructureWall.cpp.EF38448006CEF8F4.idx new file mode 100644 index 0000000..ea6fcae Binary files /dev/null and b/.cache/clangd/index/StructureWall.cpp.EF38448006CEF8F4.idx differ diff --git a/.cache/clangd/index/StructureWall.hpp.68B809ADEAF6EFF4.idx b/.cache/clangd/index/StructureWall.hpp.68B809ADEAF6EFF4.idx new file mode 100644 index 0000000..8b9fb4f Binary files /dev/null and b/.cache/clangd/index/StructureWall.hpp.68B809ADEAF6EFF4.idx differ diff --git a/.cache/clangd/index/StructureWall.hpp.EB8FB3D2347C00B5.idx b/.cache/clangd/index/StructureWall.hpp.EB8FB3D2347C00B5.idx new file mode 100644 index 0000000..1bcef7c Binary files /dev/null and b/.cache/clangd/index/StructureWall.hpp.EB8FB3D2347C00B5.idx differ diff --git a/.cache/clangd/index/Supplier.cpp.653AC3331FD903C7.idx b/.cache/clangd/index/Supplier.cpp.653AC3331FD903C7.idx new file mode 100644 index 0000000..74fc010 Binary files /dev/null and b/.cache/clangd/index/Supplier.cpp.653AC3331FD903C7.idx differ diff --git a/.cache/clangd/index/Supplier.cpp.89F355B947FA65C4.idx b/.cache/clangd/index/Supplier.cpp.89F355B947FA65C4.idx new file mode 100644 index 0000000..24f0a1f Binary files /dev/null and b/.cache/clangd/index/Supplier.cpp.89F355B947FA65C4.idx differ diff --git a/.cache/clangd/index/Supplier.hpp.4A810B586D9B166E.idx b/.cache/clangd/index/Supplier.hpp.4A810B586D9B166E.idx new file mode 100644 index 0000000..36e09f8 Binary files /dev/null and b/.cache/clangd/index/Supplier.hpp.4A810B586D9B166E.idx differ diff --git a/.cache/clangd/index/Supplier.hpp.7FACFFFA2FC16D8E.idx b/.cache/clangd/index/Supplier.hpp.7FACFFFA2FC16D8E.idx new file mode 100644 index 0000000..87051ce Binary files /dev/null and b/.cache/clangd/index/Supplier.hpp.7FACFFFA2FC16D8E.idx differ diff --git a/.cache/clangd/index/Tombstone.cpp.9AC75818EFB61A71.idx b/.cache/clangd/index/Tombstone.cpp.9AC75818EFB61A71.idx new file mode 100644 index 0000000..5c533d5 Binary files /dev/null and b/.cache/clangd/index/Tombstone.cpp.9AC75818EFB61A71.idx differ diff --git a/.cache/clangd/index/Tombstone.cpp.D34611EFC561B052.idx b/.cache/clangd/index/Tombstone.cpp.D34611EFC561B052.idx new file mode 100644 index 0000000..c5204c9 Binary files /dev/null and b/.cache/clangd/index/Tombstone.cpp.D34611EFC561B052.idx differ diff --git a/.cache/clangd/index/Tombstone.hpp.76921569AB9A4B2F.idx b/.cache/clangd/index/Tombstone.hpp.76921569AB9A4B2F.idx new file mode 100644 index 0000000..c9cfd74 Binary files /dev/null and b/.cache/clangd/index/Tombstone.hpp.76921569AB9A4B2F.idx differ diff --git a/.cache/clangd/index/Tombstone.hpp.ADF8B0D03C5B5930.idx b/.cache/clangd/index/Tombstone.hpp.ADF8B0D03C5B5930.idx new file mode 100644 index 0000000..e4ff886 Binary files /dev/null and b/.cache/clangd/index/Tombstone.hpp.ADF8B0D03C5B5930.idx differ diff --git a/.cache/clangd/index/Tower.cpp.980EAFE65EA5F582.idx b/.cache/clangd/index/Tower.cpp.980EAFE65EA5F582.idx new file mode 100644 index 0000000..31774c4 Binary files /dev/null and b/.cache/clangd/index/Tower.cpp.980EAFE65EA5F582.idx differ diff --git a/.cache/clangd/index/Tower.hpp.7ADC83CB38B9C94B.idx b/.cache/clangd/index/Tower.hpp.7ADC83CB38B9C94B.idx new file mode 100644 index 0000000..ad4bfb4 Binary files /dev/null and b/.cache/clangd/index/Tower.hpp.7ADC83CB38B9C94B.idx differ diff --git a/.cache/clangd/index/Upgrader.cpp.1463660062599EEA.idx b/.cache/clangd/index/Upgrader.cpp.1463660062599EEA.idx new file mode 100644 index 0000000..6a89a5f Binary files /dev/null and b/.cache/clangd/index/Upgrader.cpp.1463660062599EEA.idx differ diff --git a/.cache/clangd/index/Upgrader.cpp.9FC1FAC0A0714416.idx b/.cache/clangd/index/Upgrader.cpp.9FC1FAC0A0714416.idx new file mode 100644 index 0000000..226a310 Binary files /dev/null and b/.cache/clangd/index/Upgrader.cpp.9FC1FAC0A0714416.idx differ diff --git a/.cache/clangd/index/Upgrader.hpp.7A61F00761597E45.idx b/.cache/clangd/index/Upgrader.hpp.7A61F00761597E45.idx new file mode 100644 index 0000000..ce11d4b Binary files /dev/null and b/.cache/clangd/index/Upgrader.hpp.7A61F00761597E45.idx differ diff --git a/.cache/clangd/index/Upgrader.hpp.A02E6E3404446D4A.idx b/.cache/clangd/index/Upgrader.hpp.A02E6E3404446D4A.idx new file mode 100644 index 0000000..1dd24f6 Binary files /dev/null and b/.cache/clangd/index/Upgrader.hpp.A02E6E3404446D4A.idx differ diff --git a/.cache/clangd/index/Worker.cpp.930A180C370EA958.idx b/.cache/clangd/index/Worker.cpp.930A180C370EA958.idx new file mode 100644 index 0000000..1794585 Binary files /dev/null and b/.cache/clangd/index/Worker.cpp.930A180C370EA958.idx differ diff --git a/.cache/clangd/index/Worker.cpp.AC4D69C3CB022252.idx b/.cache/clangd/index/Worker.cpp.AC4D69C3CB022252.idx new file mode 100644 index 0000000..0ba4d96 Binary files /dev/null and b/.cache/clangd/index/Worker.cpp.AC4D69C3CB022252.idx differ diff --git a/.cache/clangd/index/Worker.hpp.1B4F55BA941C3024.idx b/.cache/clangd/index/Worker.hpp.1B4F55BA941C3024.idx new file mode 100644 index 0000000..f919159 Binary files /dev/null and b/.cache/clangd/index/Worker.hpp.1B4F55BA941C3024.idx differ diff --git a/.cache/clangd/index/Worker.hpp.6F205FEA875D8531.idx b/.cache/clangd/index/Worker.hpp.6F205FEA875D8531.idx new file mode 100644 index 0000000..6826558 Binary files /dev/null and b/.cache/clangd/index/Worker.hpp.6F205FEA875D8531.idx differ diff --git a/.cache/clangd/index/adl_serializer.hpp.DFD7552AF68FE10C.idx b/.cache/clangd/index/adl_serializer.hpp.DFD7552AF68FE10C.idx new file mode 100644 index 0000000..213e1f7 Binary files /dev/null and b/.cache/clangd/index/adl_serializer.hpp.DFD7552AF68FE10C.idx differ diff --git a/.cache/clangd/index/adl_serializer.hpp.FD9ABE37E12DC7D4.idx b/.cache/clangd/index/adl_serializer.hpp.FD9ABE37E12DC7D4.idx new file mode 100644 index 0000000..406e667 Binary files /dev/null and b/.cache/clangd/index/adl_serializer.hpp.FD9ABE37E12DC7D4.idx differ diff --git a/.cache/clangd/index/binary_reader.hpp.77F442882BD57B3B.idx b/.cache/clangd/index/binary_reader.hpp.77F442882BD57B3B.idx new file mode 100644 index 0000000..6529a22 Binary files /dev/null and b/.cache/clangd/index/binary_reader.hpp.77F442882BD57B3B.idx differ diff --git a/.cache/clangd/index/binary_reader.hpp.85C8DB32F3DA24EE.idx b/.cache/clangd/index/binary_reader.hpp.85C8DB32F3DA24EE.idx new file mode 100644 index 0000000..c8deb3e Binary files /dev/null and b/.cache/clangd/index/binary_reader.hpp.85C8DB32F3DA24EE.idx differ diff --git a/.cache/clangd/index/binary_writer.hpp.0EC7500F2801D410.idx b/.cache/clangd/index/binary_writer.hpp.0EC7500F2801D410.idx new file mode 100644 index 0000000..3a74006 Binary files /dev/null and b/.cache/clangd/index/binary_writer.hpp.0EC7500F2801D410.idx differ diff --git a/.cache/clangd/index/binary_writer.hpp.F4F05EE094B86E77.idx b/.cache/clangd/index/binary_writer.hpp.F4F05EE094B86E77.idx new file mode 100644 index 0000000..2fcc96a Binary files /dev/null and b/.cache/clangd/index/binary_writer.hpp.F4F05EE094B86E77.idx differ diff --git a/.cache/clangd/index/byte_container_with_subtype.hpp.5D8ADC4B6F0EC19F.idx b/.cache/clangd/index/byte_container_with_subtype.hpp.5D8ADC4B6F0EC19F.idx new file mode 100644 index 0000000..ec9562a Binary files /dev/null and b/.cache/clangd/index/byte_container_with_subtype.hpp.5D8ADC4B6F0EC19F.idx differ diff --git a/.cache/clangd/index/byte_container_with_subtype.hpp.97C866A94F13D654.idx b/.cache/clangd/index/byte_container_with_subtype.hpp.97C866A94F13D654.idx new file mode 100644 index 0000000..d0029bc Binary files /dev/null and b/.cache/clangd/index/byte_container_with_subtype.hpp.97C866A94F13D654.idx differ diff --git a/.cache/clangd/index/cpp_future.hpp.00F7EE03E6361CB6.idx b/.cache/clangd/index/cpp_future.hpp.00F7EE03E6361CB6.idx new file mode 100644 index 0000000..e2d6953 Binary files /dev/null and b/.cache/clangd/index/cpp_future.hpp.00F7EE03E6361CB6.idx differ diff --git a/.cache/clangd/index/cpp_future.hpp.230BBE72432B6E92.idx b/.cache/clangd/index/cpp_future.hpp.230BBE72432B6E92.idx new file mode 100644 index 0000000..d68167c Binary files /dev/null and b/.cache/clangd/index/cpp_future.hpp.230BBE72432B6E92.idx differ diff --git a/.cache/clangd/index/detected.hpp.BB153C6A8D459B62.idx b/.cache/clangd/index/detected.hpp.BB153C6A8D459B62.idx new file mode 100644 index 0000000..3810364 Binary files /dev/null and b/.cache/clangd/index/detected.hpp.BB153C6A8D459B62.idx differ diff --git a/.cache/clangd/index/detected.hpp.FE1CC41402731872.idx b/.cache/clangd/index/detected.hpp.FE1CC41402731872.idx new file mode 100644 index 0000000..37d2bcd Binary files /dev/null and b/.cache/clangd/index/detected.hpp.FE1CC41402731872.idx differ diff --git a/.cache/clangd/index/exceptions.hpp.4E4867805F2A0B34.idx b/.cache/clangd/index/exceptions.hpp.4E4867805F2A0B34.idx new file mode 100644 index 0000000..a88cced Binary files /dev/null and b/.cache/clangd/index/exceptions.hpp.4E4867805F2A0B34.idx differ diff --git a/.cache/clangd/index/exceptions.hpp.E13CC7C08A9DBC9F.idx b/.cache/clangd/index/exceptions.hpp.E13CC7C08A9DBC9F.idx new file mode 100644 index 0000000..93f5519 Binary files /dev/null and b/.cache/clangd/index/exceptions.hpp.E13CC7C08A9DBC9F.idx differ diff --git a/.cache/clangd/index/from_json.hpp.00480E8AD10B3227.idx b/.cache/clangd/index/from_json.hpp.00480E8AD10B3227.idx new file mode 100644 index 0000000..0e273e7 Binary files /dev/null and b/.cache/clangd/index/from_json.hpp.00480E8AD10B3227.idx differ diff --git a/.cache/clangd/index/from_json.hpp.C6F363CA71288CC1.idx b/.cache/clangd/index/from_json.hpp.C6F363CA71288CC1.idx new file mode 100644 index 0000000..9057a0c Binary files /dev/null and b/.cache/clangd/index/from_json.hpp.C6F363CA71288CC1.idx differ diff --git a/.cache/clangd/index/hash.hpp.272F5FA9757DAA1F.idx b/.cache/clangd/index/hash.hpp.272F5FA9757DAA1F.idx new file mode 100644 index 0000000..7edae55 Binary files /dev/null and b/.cache/clangd/index/hash.hpp.272F5FA9757DAA1F.idx differ diff --git a/.cache/clangd/index/hash.hpp.D43924E75250C03C.idx b/.cache/clangd/index/hash.hpp.D43924E75250C03C.idx new file mode 100644 index 0000000..cd909c6 Binary files /dev/null and b/.cache/clangd/index/hash.hpp.D43924E75250C03C.idx differ diff --git a/.cache/clangd/index/hedley.hpp.909236672F1EC8E1.idx b/.cache/clangd/index/hedley.hpp.909236672F1EC8E1.idx new file mode 100644 index 0000000..5ac1ca7 Binary files /dev/null and b/.cache/clangd/index/hedley.hpp.909236672F1EC8E1.idx differ diff --git a/.cache/clangd/index/hedley.hpp.FEE34B5A64B966D9.idx b/.cache/clangd/index/hedley.hpp.FEE34B5A64B966D9.idx new file mode 100644 index 0000000..35055d4 Binary files /dev/null and b/.cache/clangd/index/hedley.hpp.FEE34B5A64B966D9.idx differ diff --git a/.cache/clangd/index/hedley_undef.hpp.032DA9B15E6116A9.idx b/.cache/clangd/index/hedley_undef.hpp.032DA9B15E6116A9.idx new file mode 100644 index 0000000..2ed7871 Binary files /dev/null and b/.cache/clangd/index/hedley_undef.hpp.032DA9B15E6116A9.idx differ diff --git a/.cache/clangd/index/hedley_undef.hpp.CEF4F1A8A53DC162.idx b/.cache/clangd/index/hedley_undef.hpp.CEF4F1A8A53DC162.idx new file mode 100644 index 0000000..04c9548 Binary files /dev/null and b/.cache/clangd/index/hedley_undef.hpp.CEF4F1A8A53DC162.idx differ diff --git a/.cache/clangd/index/input_adapters.hpp.5B6B7EF565F97194.idx b/.cache/clangd/index/input_adapters.hpp.5B6B7EF565F97194.idx new file mode 100644 index 0000000..6dc1b92 Binary files /dev/null and b/.cache/clangd/index/input_adapters.hpp.5B6B7EF565F97194.idx differ diff --git a/.cache/clangd/index/input_adapters.hpp.78C7BF4E4CFA778D.idx b/.cache/clangd/index/input_adapters.hpp.78C7BF4E4CFA778D.idx new file mode 100644 index 0000000..3d68c71 Binary files /dev/null and b/.cache/clangd/index/input_adapters.hpp.78C7BF4E4CFA778D.idx differ diff --git a/.cache/clangd/index/internal_iterator.hpp.1A3EB4118A8C6D1B.idx b/.cache/clangd/index/internal_iterator.hpp.1A3EB4118A8C6D1B.idx new file mode 100644 index 0000000..3d1df82 Binary files /dev/null and b/.cache/clangd/index/internal_iterator.hpp.1A3EB4118A8C6D1B.idx differ diff --git a/.cache/clangd/index/internal_iterator.hpp.C19C9622B56D9373.idx b/.cache/clangd/index/internal_iterator.hpp.C19C9622B56D9373.idx new file mode 100644 index 0000000..7ecc60a Binary files /dev/null and b/.cache/clangd/index/internal_iterator.hpp.C19C9622B56D9373.idx differ diff --git a/.cache/clangd/index/is_sax.hpp.92C5DFF09E6057A8.idx b/.cache/clangd/index/is_sax.hpp.92C5DFF09E6057A8.idx new file mode 100644 index 0000000..060995a Binary files /dev/null and b/.cache/clangd/index/is_sax.hpp.92C5DFF09E6057A8.idx differ diff --git a/.cache/clangd/index/is_sax.hpp.CC7545652AD71E55.idx b/.cache/clangd/index/is_sax.hpp.CC7545652AD71E55.idx new file mode 100644 index 0000000..8d88479 Binary files /dev/null and b/.cache/clangd/index/is_sax.hpp.CC7545652AD71E55.idx differ diff --git a/.cache/clangd/index/iter_impl.hpp.033DA638D5CD1012.idx b/.cache/clangd/index/iter_impl.hpp.033DA638D5CD1012.idx new file mode 100644 index 0000000..26fa443 Binary files /dev/null and b/.cache/clangd/index/iter_impl.hpp.033DA638D5CD1012.idx differ diff --git a/.cache/clangd/index/iter_impl.hpp.8664277A5602E1AF.idx b/.cache/clangd/index/iter_impl.hpp.8664277A5602E1AF.idx new file mode 100644 index 0000000..1f4004d Binary files /dev/null and b/.cache/clangd/index/iter_impl.hpp.8664277A5602E1AF.idx differ diff --git a/.cache/clangd/index/iteration_proxy.hpp.3BFE4F050EB7B1CB.idx b/.cache/clangd/index/iteration_proxy.hpp.3BFE4F050EB7B1CB.idx new file mode 100644 index 0000000..680a3ad Binary files /dev/null and b/.cache/clangd/index/iteration_proxy.hpp.3BFE4F050EB7B1CB.idx differ diff --git a/.cache/clangd/index/iteration_proxy.hpp.62E7DC0335CC98A4.idx b/.cache/clangd/index/iteration_proxy.hpp.62E7DC0335CC98A4.idx new file mode 100644 index 0000000..35d4714 Binary files /dev/null and b/.cache/clangd/index/iteration_proxy.hpp.62E7DC0335CC98A4.idx differ diff --git a/.cache/clangd/index/iterator_traits.hpp.458CB3C9BF8F7D7A.idx b/.cache/clangd/index/iterator_traits.hpp.458CB3C9BF8F7D7A.idx new file mode 100644 index 0000000..c7f82ce Binary files /dev/null and b/.cache/clangd/index/iterator_traits.hpp.458CB3C9BF8F7D7A.idx differ diff --git a/.cache/clangd/index/iterator_traits.hpp.56B1B6A38EF4B589.idx b/.cache/clangd/index/iterator_traits.hpp.56B1B6A38EF4B589.idx new file mode 100644 index 0000000..166722b Binary files /dev/null and b/.cache/clangd/index/iterator_traits.hpp.56B1B6A38EF4B589.idx differ diff --git a/.cache/clangd/index/json.hpp.19785BFC18CA466E.idx b/.cache/clangd/index/json.hpp.19785BFC18CA466E.idx new file mode 100644 index 0000000..52ff5ef Binary files /dev/null and b/.cache/clangd/index/json.hpp.19785BFC18CA466E.idx differ diff --git a/.cache/clangd/index/json.hpp.3F6A318D7843253C.idx b/.cache/clangd/index/json.hpp.3F6A318D7843253C.idx new file mode 100644 index 0000000..d64e0b7 Binary files /dev/null and b/.cache/clangd/index/json.hpp.3F6A318D7843253C.idx differ diff --git a/.cache/clangd/index/json_fwd.hpp.26742AD87FD27039.idx b/.cache/clangd/index/json_fwd.hpp.26742AD87FD27039.idx new file mode 100644 index 0000000..b2f9fab Binary files /dev/null and b/.cache/clangd/index/json_fwd.hpp.26742AD87FD27039.idx differ diff --git a/.cache/clangd/index/json_fwd.hpp.E578A339E2FA19E6.idx b/.cache/clangd/index/json_fwd.hpp.E578A339E2FA19E6.idx new file mode 100644 index 0000000..60cabbc Binary files /dev/null and b/.cache/clangd/index/json_fwd.hpp.E578A339E2FA19E6.idx differ diff --git a/.cache/clangd/index/json_pointer.hpp.9B708EAD4A613065.idx b/.cache/clangd/index/json_pointer.hpp.9B708EAD4A613065.idx new file mode 100644 index 0000000..10c40b6 Binary files /dev/null and b/.cache/clangd/index/json_pointer.hpp.9B708EAD4A613065.idx differ diff --git a/.cache/clangd/index/json_pointer.hpp.D59DE1A3B73204F3.idx b/.cache/clangd/index/json_pointer.hpp.D59DE1A3B73204F3.idx new file mode 100644 index 0000000..fca0ca5 Binary files /dev/null and b/.cache/clangd/index/json_pointer.hpp.D59DE1A3B73204F3.idx differ diff --git a/.cache/clangd/index/json_ref.hpp.09F79A303FDED284.idx b/.cache/clangd/index/json_ref.hpp.09F79A303FDED284.idx new file mode 100644 index 0000000..baf9851 Binary files /dev/null and b/.cache/clangd/index/json_ref.hpp.09F79A303FDED284.idx differ diff --git a/.cache/clangd/index/json_ref.hpp.F45F50989F8F1001.idx b/.cache/clangd/index/json_ref.hpp.F45F50989F8F1001.idx new file mode 100644 index 0000000..ace3885 Binary files /dev/null and b/.cache/clangd/index/json_ref.hpp.F45F50989F8F1001.idx differ diff --git a/.cache/clangd/index/json_reverse_iterator.hpp.47A8D3707286B249.idx b/.cache/clangd/index/json_reverse_iterator.hpp.47A8D3707286B249.idx new file mode 100644 index 0000000..c8437c3 Binary files /dev/null and b/.cache/clangd/index/json_reverse_iterator.hpp.47A8D3707286B249.idx differ diff --git a/.cache/clangd/index/json_reverse_iterator.hpp.58F28C260C78DDE2.idx b/.cache/clangd/index/json_reverse_iterator.hpp.58F28C260C78DDE2.idx new file mode 100644 index 0000000..c4a3df6 Binary files /dev/null and b/.cache/clangd/index/json_reverse_iterator.hpp.58F28C260C78DDE2.idx differ diff --git a/.cache/clangd/index/json_sax.hpp.438E587A86429469.idx b/.cache/clangd/index/json_sax.hpp.438E587A86429469.idx new file mode 100644 index 0000000..07dde4b Binary files /dev/null and b/.cache/clangd/index/json_sax.hpp.438E587A86429469.idx differ diff --git a/.cache/clangd/index/json_sax.hpp.6F91C040B731D348.idx b/.cache/clangd/index/json_sax.hpp.6F91C040B731D348.idx new file mode 100644 index 0000000..f306eb3 Binary files /dev/null and b/.cache/clangd/index/json_sax.hpp.6F91C040B731D348.idx differ diff --git a/.cache/clangd/index/lexer.hpp.8FE107E6D18CCEB7.idx b/.cache/clangd/index/lexer.hpp.8FE107E6D18CCEB7.idx new file mode 100644 index 0000000..069453a Binary files /dev/null and b/.cache/clangd/index/lexer.hpp.8FE107E6D18CCEB7.idx differ diff --git a/.cache/clangd/index/lexer.hpp.9F3DB76FC7820C63.idx b/.cache/clangd/index/lexer.hpp.9F3DB76FC7820C63.idx new file mode 100644 index 0000000..856e960 Binary files /dev/null and b/.cache/clangd/index/lexer.hpp.9F3DB76FC7820C63.idx differ diff --git a/.cache/clangd/index/macro_scope.hpp.771D39546C225B59.idx b/.cache/clangd/index/macro_scope.hpp.771D39546C225B59.idx new file mode 100644 index 0000000..ffd9d23 Binary files /dev/null and b/.cache/clangd/index/macro_scope.hpp.771D39546C225B59.idx differ diff --git a/.cache/clangd/index/macro_scope.hpp.86C0DD8E57B5E3F6.idx b/.cache/clangd/index/macro_scope.hpp.86C0DD8E57B5E3F6.idx new file mode 100644 index 0000000..ae46970 Binary files /dev/null and b/.cache/clangd/index/macro_scope.hpp.86C0DD8E57B5E3F6.idx differ diff --git a/.cache/clangd/index/macro_unscope.hpp.042263DAF5D3B742.idx b/.cache/clangd/index/macro_unscope.hpp.042263DAF5D3B742.idx new file mode 100644 index 0000000..527d7e2 Binary files /dev/null and b/.cache/clangd/index/macro_unscope.hpp.042263DAF5D3B742.idx differ diff --git a/.cache/clangd/index/macro_unscope.hpp.B14BD9ED4A7A08FB.idx b/.cache/clangd/index/macro_unscope.hpp.B14BD9ED4A7A08FB.idx new file mode 100644 index 0000000..35a432d Binary files /dev/null and b/.cache/clangd/index/macro_unscope.hpp.B14BD9ED4A7A08FB.idx differ diff --git a/.cache/clangd/index/ordered_map.hpp.2C355B95688DDCBD.idx b/.cache/clangd/index/ordered_map.hpp.2C355B95688DDCBD.idx new file mode 100644 index 0000000..ce603c1 Binary files /dev/null and b/.cache/clangd/index/ordered_map.hpp.2C355B95688DDCBD.idx differ diff --git a/.cache/clangd/index/ordered_map.hpp.B456483924567A36.idx b/.cache/clangd/index/ordered_map.hpp.B456483924567A36.idx new file mode 100644 index 0000000..5ee9560 Binary files /dev/null and b/.cache/clangd/index/ordered_map.hpp.B456483924567A36.idx differ diff --git a/.cache/clangd/index/output_adapters.hpp.CA852FDE70A1413E.idx b/.cache/clangd/index/output_adapters.hpp.CA852FDE70A1413E.idx new file mode 100644 index 0000000..038aca1 Binary files /dev/null and b/.cache/clangd/index/output_adapters.hpp.CA852FDE70A1413E.idx differ diff --git a/.cache/clangd/index/output_adapters.hpp.F2A206223E0FED28.idx b/.cache/clangd/index/output_adapters.hpp.F2A206223E0FED28.idx new file mode 100644 index 0000000..580b124 Binary files /dev/null and b/.cache/clangd/index/output_adapters.hpp.F2A206223E0FED28.idx differ diff --git a/.cache/clangd/index/parser.hpp.2C3D9C29D6D2D60D.idx b/.cache/clangd/index/parser.hpp.2C3D9C29D6D2D60D.idx new file mode 100644 index 0000000..dd5d67f Binary files /dev/null and b/.cache/clangd/index/parser.hpp.2C3D9C29D6D2D60D.idx differ diff --git a/.cache/clangd/index/parser.hpp.97F042A750EC2463.idx b/.cache/clangd/index/parser.hpp.97F042A750EC2463.idx new file mode 100644 index 0000000..657b603 Binary files /dev/null and b/.cache/clangd/index/parser.hpp.97F042A750EC2463.idx differ diff --git a/.cache/clangd/index/position_t.hpp.49DF3AE7DB121E52.idx b/.cache/clangd/index/position_t.hpp.49DF3AE7DB121E52.idx new file mode 100644 index 0000000..9468cae Binary files /dev/null and b/.cache/clangd/index/position_t.hpp.49DF3AE7DB121E52.idx differ diff --git a/.cache/clangd/index/position_t.hpp.506F5939B170C75A.idx b/.cache/clangd/index/position_t.hpp.506F5939B170C75A.idx new file mode 100644 index 0000000..d3eba78 Binary files /dev/null and b/.cache/clangd/index/position_t.hpp.506F5939B170C75A.idx differ diff --git a/.cache/clangd/index/primitive_iterator.hpp.1170A96EE003D502.idx b/.cache/clangd/index/primitive_iterator.hpp.1170A96EE003D502.idx new file mode 100644 index 0000000..d6e0d7d Binary files /dev/null and b/.cache/clangd/index/primitive_iterator.hpp.1170A96EE003D502.idx differ diff --git a/.cache/clangd/index/primitive_iterator.hpp.95B7C71D0080D177.idx b/.cache/clangd/index/primitive_iterator.hpp.95B7C71D0080D177.idx new file mode 100644 index 0000000..c54effd Binary files /dev/null and b/.cache/clangd/index/primitive_iterator.hpp.95B7C71D0080D177.idx differ diff --git a/.cache/clangd/index/serializer.hpp.03D5899F3A9CB88C.idx b/.cache/clangd/index/serializer.hpp.03D5899F3A9CB88C.idx new file mode 100644 index 0000000..fbb15e4 Binary files /dev/null and b/.cache/clangd/index/serializer.hpp.03D5899F3A9CB88C.idx differ diff --git a/.cache/clangd/index/serializer.hpp.EE8E2D8BCD463B77.idx b/.cache/clangd/index/serializer.hpp.EE8E2D8BCD463B77.idx new file mode 100644 index 0000000..cc7860b Binary files /dev/null and b/.cache/clangd/index/serializer.hpp.EE8E2D8BCD463B77.idx differ diff --git a/.cache/clangd/index/to_chars.hpp.6B92F0DD0213E55B.idx b/.cache/clangd/index/to_chars.hpp.6B92F0DD0213E55B.idx new file mode 100644 index 0000000..7f2d57e Binary files /dev/null and b/.cache/clangd/index/to_chars.hpp.6B92F0DD0213E55B.idx differ diff --git a/.cache/clangd/index/to_chars.hpp.A642693BE92CA48B.idx b/.cache/clangd/index/to_chars.hpp.A642693BE92CA48B.idx new file mode 100644 index 0000000..3fbd97d Binary files /dev/null and b/.cache/clangd/index/to_chars.hpp.A642693BE92CA48B.idx differ diff --git a/.cache/clangd/index/to_json.hpp.244831C63D3B9EAF.idx b/.cache/clangd/index/to_json.hpp.244831C63D3B9EAF.idx new file mode 100644 index 0000000..2afa6c8 Binary files /dev/null and b/.cache/clangd/index/to_json.hpp.244831C63D3B9EAF.idx differ diff --git a/.cache/clangd/index/to_json.hpp.E160BFB79EA81F8D.idx b/.cache/clangd/index/to_json.hpp.E160BFB79EA81F8D.idx new file mode 100644 index 0000000..4289163 Binary files /dev/null and b/.cache/clangd/index/to_json.hpp.E160BFB79EA81F8D.idx differ diff --git a/.cache/clangd/index/type_traits.hpp.8754B458E8251A51.idx b/.cache/clangd/index/type_traits.hpp.8754B458E8251A51.idx new file mode 100644 index 0000000..54403f9 Binary files /dev/null and b/.cache/clangd/index/type_traits.hpp.8754B458E8251A51.idx differ diff --git a/.cache/clangd/index/type_traits.hpp.ABCB4E4E7E610FDF.idx b/.cache/clangd/index/type_traits.hpp.ABCB4E4E7E610FDF.idx new file mode 100644 index 0000000..3295ddd Binary files /dev/null and b/.cache/clangd/index/type_traits.hpp.ABCB4E4E7E610FDF.idx differ diff --git a/.cache/clangd/index/value_t.hpp.EBE0F29787A62C58.idx b/.cache/clangd/index/value_t.hpp.EBE0F29787A62C58.idx new file mode 100644 index 0000000..a72632f Binary files /dev/null and b/.cache/clangd/index/value_t.hpp.EBE0F29787A62C58.idx differ diff --git a/.cache/clangd/index/value_t.hpp.FE2C21E499B13E29.idx b/.cache/clangd/index/value_t.hpp.FE2C21E499B13E29.idx new file mode 100644 index 0000000..81304b5 Binary files /dev/null and b/.cache/clangd/index/value_t.hpp.FE2C21E499B13E29.idx differ diff --git a/.cache/clangd/index/void_t.hpp.7BA1398875725DE2.idx b/.cache/clangd/index/void_t.hpp.7BA1398875725DE2.idx new file mode 100644 index 0000000..94cccd6 Binary files /dev/null and b/.cache/clangd/index/void_t.hpp.7BA1398875725DE2.idx differ diff --git a/.cache/clangd/index/void_t.hpp.FAA1F91E4E048462.idx b/.cache/clangd/index/void_t.hpp.FAA1F91E4E048462.idx new file mode 100644 index 0000000..58bca46 Binary files /dev/null and b/.cache/clangd/index/void_t.hpp.FAA1F91E4E048462.idx differ diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..abcc922 --- /dev/null +++ b/.clangd @@ -0,0 +1,27 @@ +CompileFlags: + # Add Emscripten include paths + Add: + - "-isystem" + - "/mnt/douwe/hdd/Projects/Screeps/emsdk/upstream/emscripten/system/include" + - "-isystem" + - "/mnt/douwe/hdd/Projects/Screeps/emsdk/upstream/emscripten/system/lib" + - "-isystem" + - "/mnt/douwe/hdd/Projects/Screeps/emsdk/upstream/emscripten/cache/sysroot/include" + - "-D__EMSCRIPTEN__" + - "-D__EMSCRIPTEN_PTHREADS__" + - "-I/mnt/douwe/hdd/Projects/Screeps/screepsxx/include" # Path to Screeps headers + # Remove ALL Emscripten-specific flags + Remove: + - "-s.*" # Removes ALL -s* flags (e.g., -sSTRICT=0, -sMODULARIZE=1) + - "--no-entry" + - "--bind" + - "--cache" + - "-sEXPORT_ES6=.*" + - "-sEXPORTED_RUNTIME_METHODS=.*" + - "-sASSERTIONS=.*" + - "-sMALLOC=.*" + - "-sEXPORTED_FUNCTIONS=.*" + +# Suppress diagnostics for unused includes and unknown arguments +Diagnostics: + UnusedIncludes: None \ No newline at end of file diff --git a/.gitignore b/.gitignore index 05fade3..d9eadda 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ # Build files build/* dist/* + +# project +.cache diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fc1965..0784405 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,14 @@ cmake_minimum_required(VERSION 3.16) project(douwco_hivemind CXX) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED On) + +# Generate compile commands +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +# Set the Emscripten toolchain +set(CMAKE_TOOLCHAIN_FILE ${EMSCRIPTEN_ROOT}/cmake/Modules/Platform/Emscripten.cmake CACHE STRING "") # set(COMPILE_FLAGS --cache ${CMAKE_BINARY_DIR}/cache) set(LINK_FLAGS -sASSERTIONS=0 -sMALLOC=emmalloc) @@ -18,26 +24,33 @@ set(TARGET_NAME douwco_hivemind) include_directories(${CMAKE_SOURCE_DIR}/douwco_hivemind/include) -file(GLOB SRC_FILES ${CMAKE_SOURCE_DIR}/douwco_hivemind/src/*.cpp) -file(GLOB TEST_FILES ${CMAKE_SOURCE_DIR}/douwco_hivemind/src/Testing/*.cpp) - -# Combine source files -set(ALL_SRC_FILES ${SRC_FILES} ${TEST_FILES}) -add_executable(${TARGET_NAME} ${ALL_SRC_FILES}) +file(GLOB SRC_FILES ${CMAKE_SOURCE_DIR}/douwco_hivemind/src/*.cpp + ${CMAKE_SOURCE_DIR}/douwco_hivemind/src/*/*.cpp) +add_executable(${TARGET_NAME} ${SRC_FILES}) target_link_libraries(${TARGET_NAME} screepsxx) target_link_options(${TARGET_NAME} PUBLIC -sMODULARIZE=1 --no-entry --bind -sEXPORT_ES6=0) +# Post-process compile_commands.json to remove Emscripten flags +add_custom_command( + TARGET ${TARGET_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E echo "Cleaning compile_commands.json for clangd..." + COMMAND python3 ${CMAKE_SOURCE_DIR}/clean_compile_commands.py + ${CMAKE_BINARY_DIR}/compile_commands.json + COMMENT "Post-processing compile_commands.json for clangd compatibility" +) + +# Symlink compile_commands.json to project root for clangd +add_custom_command( + TARGET ${TARGET_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E create_symlink + ${CMAKE_BINARY_DIR}/compile_commands.json + ${CMAKE_SOURCE_DIR}/compile_commands.json + COMMENT "Symlinking compile_commands.json to project root for clangd" +) + # Collect all artifacts in 'dist' directory # WASM-module and corresponding JS-module must have different base names in order to use them in Screeps, so we add suffixes. add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${TARGET_NAME}.wasm ${CMAKE_SOURCE_DIR}/dist/${TARGET_NAME}_module.wasm) add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${TARGET_NAME}.js ${CMAKE_SOURCE_DIR}/dist/${TARGET_NAME}_loader.js) add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/js/main.js ${CMAKE_SOURCE_DIR}/dist/main.js) -add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/js/wasm_loader.js ${CMAKE_SOURCE_DIR}/dist/wasm_loader.js) - -# Following post-build step will automatically upload artifacts to -# official Screeps server. If you want to use it, please, -# set SCREEPS_TOKEN environment variable to your Screeps API token -# (https://docs.screeps.com/auth-tokens.html). -# If you don't want to use this script, please, remove following lines. -#find_package(Python COMPONENTS Interpreter REQUIRED) -#add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${Python_EXECUTABLE} ${screepsxx_SOURCE_DIR}/tools/upload.py ${CMAKE_SOURCE_DIR}/dist $ENV{SCREEPS_TOKEN}) +add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/js/wasm_loader.js ${CMAKE_SOURCE_DIR}/dist/wasm_loader.js) \ No newline at end of file diff --git a/clean_compile_commands.py b/clean_compile_commands.py new file mode 100644 index 0000000..9d7a5f1 --- /dev/null +++ b/clean_compile_commands.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +import json +import re +import sys +import os + +def clean_compile_commands(compile_commands_path): + # Load the compile_commands.json file + with open(compile_commands_path, 'r') as f: + data = json.load(f) + + # Flags to remove (Emscripten-specific) + flags_to_remove = [ + r'-s\w+=\S*', # Matches -sSTRICT=0, -sMODULARIZE=1, etc. + r'-s\w+', # Matches -sWASM, -sASSERTIONS, etc. + r'--no-entry', + r'--bind', + r'--cache', + ] + + # Clean each command + for entry in data: + if 'command' in entry: + command = entry['command'] + # Remove all unwanted flags + for flag_pattern in flags_to_remove: + command = re.sub(flag_pattern, '', command) + # Remove extra spaces + command = ' '.join(command.split()) + entry['command'] = command + + # Save the cleaned file + with open(compile_commands_path, 'w') as f: + json.dump(data, f, indent=2) + + print(f"Cleaned {compile_commands_path}") + +if __name__ == '__main__': + if len(sys.argv) != 2: + print("Usage: python clean_compile_commands.py ") + sys.exit(1) + clean_compile_commands(sys.argv[1]) \ No newline at end of file diff --git a/compile_commands.json b/compile_commands.json new file mode 120000 index 0000000..ef534d6 --- /dev/null +++ b/compile_commands.json @@ -0,0 +1 @@ +/home/douwe/Projects/douwco_hivemind/build/compile_commands.json \ No newline at end of file diff --git a/douwco_hivemind/include/Constants.hpp b/douwco_hivemind/include/Constants.hpp new file mode 100644 index 0000000..d458238 --- /dev/null +++ b/douwco_hivemind/include/Constants.hpp @@ -0,0 +1,9 @@ +#ifndef DOUWCO_HIVEMIND_CONSTANTS_HPP +#define DOUWCO_HIVEMIND_CONSTANTS_HPP + +namespace DouwcoHivemind +{ + enum CreepRole { UNEMPLOYED, SUPPLIER, UPGRADER, BUILDER, MAINTAINER, MINER }; +} + +#endif // DOUWCO_HIVEMIND_CONSTANTS_HPP \ No newline at end of file diff --git a/douwco_hivemind/include/Creeps/CreepBase.hpp b/douwco_hivemind/include/Creeps/CreepBase.hpp index a3b5027..124836b 100644 --- a/douwco_hivemind/include/Creeps/CreepBase.hpp +++ b/douwco_hivemind/include/Creeps/CreepBase.hpp @@ -2,48 +2,36 @@ #define DOUWCO_HIVEMIND_CREEPBASE_HPP #include +#include "Constants.hpp" -namespace Screeps{ - class RoomPosition; - class RoomObject; - class PathStep; -} +namespace Screeps { +class RoomPosition; +class RoomObject; +class PathStep; +} // namespace Screeps -namespace DouwcoHivemind -{ - enum CreepRole - { - UNEMPLOYED, - SUPPLIER, - UPGRADER, - BUILDER, - MAINTAINER - }; +namespace DouwcoHivemind { - class CreepBase - { - public: - CreepRole role; - std::string target_id; +class CreepBase { +public: + CreepRole role; + std::string targetId; - protected: - Screeps::Creep creep; - JSON memory; +protected: + Screeps::Creep creep; + JSON memory; - public: - CreepBase(Screeps::Creep crp); - virtual ~CreepBase(); - virtual void loop() {} +public: + CreepBase(Screeps::Creep crp); + virtual ~CreepBase(); + virtual void loop() {} + bool isNearTo(const Screeps::RoomPosition &pos, int dist); - - bool isNearTo(const Screeps::RoomPosition &pos, int dist); - - - protected: - void moveToTarget(int dist = 1); - std::unique_ptr getRoomObjectTarget(); - }; -} +protected: + void moveToTarget(int dist = 1); + std::unique_ptr getRoomObjectTarget(); +}; +} // namespace DouwcoHivemind #endif // DOUWCO_HIVEMIND_CREEPBASE_HPP \ No newline at end of file diff --git a/douwco_hivemind/include/Creeps/Miner.hpp b/douwco_hivemind/include/Creeps/Miner.hpp index daad7e8..482b586 100644 --- a/douwco_hivemind/include/Creeps/Miner.hpp +++ b/douwco_hivemind/include/Creeps/Miner.hpp @@ -1,22 +1,21 @@ #ifndef DOUWCO_HIVEMIND_MINER_HPP #define DOUWCO_HIVEMIND_MINER_HPP -#include +#include "Creeps/CreepBase.hpp" +#include namespace DouwcoHivemind { class Miner : public CreepBase { private: - bool requestedContainer = false; + std::string sourceId; + bool arrived; + public: Miner(Screeps::Creep crp); ~Miner() override; void loop() override; - - private: - bool mineSource(); - std::unique_ptr getSourceTarget(); }; } diff --git a/douwco_hivemind/include/Creeps/Supplier.hpp b/douwco_hivemind/include/Creeps/Supplier.hpp index 247d299..695c080 100644 --- a/douwco_hivemind/include/Creeps/Supplier.hpp +++ b/douwco_hivemind/include/Creeps/Supplier.hpp @@ -3,20 +3,18 @@ #include "Creeps/Worker.hpp" -namespace DouwcoHivemind -{ - class Supplier : public Worker - { - public: - Supplier(Screeps::Creep creep) : Worker(creep) {} +namespace DouwcoHivemind { +class Supplier : public Worker { +public: + Supplier(Screeps::Creep creep) : Worker(creep) { ignoreStorage = true; } - protected: - void depositEnergy() override; - - private: - std::unique_ptr getEnergyStructureTarget(); - void searchEnergyStructure(); - }; -} +protected: + void depositEnergy() override; + +private: + std::unique_ptr getEnergyStructureTarget(); + void searchEnergyStructure(); +}; +} // namespace DouwcoHivemind #endif // DOUWCO_HIVEMIND_SUPPLIER_HPP \ No newline at end of file diff --git a/douwco_hivemind/include/Creeps/Worker.hpp b/douwco_hivemind/include/Creeps/Worker.hpp index 70ba98e..ca29a6b 100644 --- a/douwco_hivemind/include/Creeps/Worker.hpp +++ b/douwco_hivemind/include/Creeps/Worker.hpp @@ -2,28 +2,30 @@ #define DOUWCO_HIVEMIND_WORKER_HPP #include "Creeps/CreepBase.hpp" +#include "Screeps/StructureContainer.hpp" -namespace DouwcoHivemind -{ - class Worker : public CreepBase - { - private: - bool harvesting; +namespace DouwcoHivemind { +class Worker : public CreepBase { +protected: + bool ignoreStorage = false; - public: - Worker(Screeps::Creep crp); - ~Worker() override; +private: + bool harvesting; - void loop() override; +public: + Worker(Screeps::Creep crp); + ~Worker() override; - protected: - virtual void depositEnergy(){} - - private: - void harvestSource(); - std::unique_ptr getSourceTarget(); - void searchSource(); - }; -} + void loop() override; + +protected: + virtual void depositEnergy() {} + +private: + void getEnergy(); + void searchEnergySource(); + void extractEnergyFromTarget(); +}; +} // namespace DouwcoHivemind #endif // DOUWCO_HIVEMIND_WORKER_HPP \ No newline at end of file diff --git a/douwco_hivemind/include/Engine.hpp b/douwco_hivemind/include/Engine.hpp index a59c437..6a6bf6d 100644 --- a/douwco_hivemind/include/Engine.hpp +++ b/douwco_hivemind/include/Engine.hpp @@ -1,28 +1,46 @@ #ifndef DOUWCO_HIVEMIND_ENGINE_HPP #define DOUWCO_HIVEMIND_ENGINE_HPP +#include +#include #include #include "Creeps/CreepBase.hpp" +#include "Entity/Room.hpp" #include "Structures/StructureBase.hpp" -namespace DouwcoHivemind -{ - class Engine - { - private: - std::vector> creeps; - std::vector> structures; +namespace DouwcoHivemind { +class Engine { +private: +static Engine* instance; - public: - Engine(); - void loop(); +public: + std::map> Rooms; + std::map> Creeps; + std::map> Structures; - private: - void ReadOutCreeps(); - void ReadOutStructures(); - void clearDeadCreepMemory(); - }; -} +public: + // Static singleton access + static Engine* getInstance(){ + return instance; + } + // Readout data from screeps API into C++ vectors + Engine(); + // Loop over all rooms, screeps and structures + void loop(); + + + +private: + // Readout player owned rooms + void ReadOutRooms(); + // Readout player owned screeps and assign their roles + void ReadOutCreeps(); + // Readout player owned buildings based on their structure type + void ReadOutStructures(); + // Clear dead screep memory + void clearDeadCreepMemory(); +}; +} // namespace DouwcoHivemind #endif // DOUWCO_HIVEMIND_ENGINE_HPP \ No newline at end of file diff --git a/douwco_hivemind/include/Entity/Room.hpp b/douwco_hivemind/include/Entity/Room.hpp new file mode 100644 index 0000000..53e07eb --- /dev/null +++ b/douwco_hivemind/include/Entity/Room.hpp @@ -0,0 +1,47 @@ +#ifndef DOUWCO_HIVEMIND_ROOM_HPP +#define DOUWCO_HIVEMIND_ROOM_HPP + +#include "Constants.hpp" +#include +#include + +namespace DouwcoHivemind { +class Room { +public: + Screeps::Room roomJs; + JSON memory; + + std::vector sourceIds = {}; + std::vector sourceContainerIds = {}; + std::vector SpawnIds = {}; + std::vector creepNames = {}; + +private: + int minerIterator; + +public: + Room(Screeps::Room rm); + ~Room(); + + void loop(); + +protected: + void manageStructures(); + void manageScreeps(); + + void updateSourceIds(); + void updateSpawnIds(); + void updateContainerIds(); + + void cleanupManagedCreeps(); + + std::map calculateRequiredJobs(); + std::map countCurrentJobs(); + std::string getNewCreepName(CreepRole role); + std::vector getNewCreepBody(CreepRole role); + JSON getNewCreepOptions(CreepRole role); + +}; +} // namespace DouwcoHivemind + +#endif // DOUWCO_HIVEMIND_ROOM_HPP \ No newline at end of file diff --git a/douwco_hivemind/include/Structures/Spawn.hpp b/douwco_hivemind/include/Structures/Spawn.hpp index 450aba8..4904fd4 100644 --- a/douwco_hivemind/include/Structures/Spawn.hpp +++ b/douwco_hivemind/include/Structures/Spawn.hpp @@ -9,15 +9,13 @@ namespace DouwcoHivemind { class Spawn : public StructureBase { - private: - Screeps::StructureSpawn spawn; + public: + Screeps::StructureSpawn spawnJs; public: - Spawn(Screeps::StructureSpawn spwn) : spawn(spwn), + Spawn(Screeps::StructureSpawn spwn) : spawnJs(spwn), StructureBase() {} ~Spawn() {} - - void loop() override; }; } diff --git a/douwco_hivemind/include/Structures/Tower.hpp b/douwco_hivemind/include/Structures/Tower.hpp new file mode 100644 index 0000000..408e74e --- /dev/null +++ b/douwco_hivemind/include/Structures/Tower.hpp @@ -0,0 +1,24 @@ +#ifndef DOUWCO_HIVEMIND_TOWER_HPP +#define DOUWCO_HIVEMIND_TOWER_HPP + +#include + +#include "Structures/StructureBase.hpp" + +namespace DouwcoHivemind +{ + class Tower : public StructureBase + { + private: + Screeps::StructureTower tower; + + public: + Tower(Screeps::StructureTower twr) : tower(twr), + StructureBase() {} + ~Tower() {} + + void loop() override; + }; +} + +#endif // DOUWCO_HIVEMIND_TOWER_HPP \ No newline at end of file diff --git a/douwco_hivemind/src/CreepBase.cpp b/douwco_hivemind/src/CreepBase.cpp deleted file mode 100644 index eaab95f..0000000 --- a/douwco_hivemind/src/CreepBase.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include - -#include -#include -#include - -#include "Creeps/CreepBase.hpp" - -#include "Tools/JsonTool.hpp" -#include "Tools/PathTool.hpp" -#include "Tools/MeasureTool.hpp" - -DouwcoHivemind::CreepBase::CreepBase(Screeps::Creep crp) : creep(crp), - memory(crp.memory()) -{ - role = memory.contains("role") ? static_cast(memory["role"]) : CreepRole::UNEMPLOYED; - target_id = memory.contains("target_id") ? static_cast(memory["target_id"]) : std::string(); -} - -DouwcoHivemind::CreepBase::~CreepBase() -{ - memory["target_id"] = target_id; - creep.setMemory(memory); -} - -void DouwcoHivemind::CreepBase::moveToTarget(int dist) -{ - // Is move required? - auto target = getRoomObjectTarget(); - if (isNearTo(target->pos(), dist)) - { - memory.erase("path"); - return; - } - - // Is wating? - if (memory.contains("wait") && memory["wait"] > 0) - { - memory["wait"] = memory["wait"].get() - 1; - creep.say("Waiting.."); - return; - } - - // Is there a path to walk? - if (!memory.contains("path") || memory["path"].empty()) - { - creep.say("Searching route!"); - auto target_pos = target->pos(); - auto path = creep.room().findPath(creep.pos(), target_pos); - auto last = path.back(); - if (last.x - target_pos.x() > dist || last.y - target_pos.y() > dist) - { - creep.say("No possible path"); - memory["wait"] = rand() % 20; - return; - } - memory["path"] = vectorToJson(flattenPathSteps(path)); - } - - // JS::console.log(std::string("creep pos: [") + - // std::to_string(creep.pos().x()) + - // std::string(",") + - // std::to_string(creep.pos().y()) + - // std::string("]")); - - // Get step from memory - int pathStepData[5] = {0}; - if (memory["path"].size() > 5) - { - for (int i = 0; i < 5; i++) - { - pathStepData[i] = memory["path"][i]; - } - } - else - { - memory.erase("path"); - return; - } - - // Is the move of last tick executed? - int x = creep.pos().x(); - int y = creep.pos().y(); - - Screeps::Room::PathStep step; - step.x = pathStepData[0]; - step.y = pathStepData[1]; - step.dx = pathStepData[2]; - step.dy = pathStepData[3]; - step.direction = pathStepData[4]; - - if (memory.contains("last_pos")) - { - int last_x = memory["last_pos"]["x"]; - int last_y = memory["last_pos"]["y"]; - memory.erase("last_pos"); - if (x == last_x && y == last_y) - { - creep.say("I'm stuck!"); - memory["wait"] = rand() % 5; - return; - } - } - - // Is the creep on the place intended by the path? - if (!(x == step.x - step.dx && y == step.y - step.dy)) - { - creep.say("I'm lost!"); - memory["wait"] = rand() % 5; - memory.erase("path"); - return; - } - - // Lets move forward - int resp = creep.move(step.direction); - if (resp == Screeps::OK) - { - memory["last_pos"]["x"] = x; - memory["last_pos"]["y"] = y; - - for (int i = 0; i < 5; i++) - { - memory["path"].erase(0); - } - } -} - -std::unique_ptr DouwcoHivemind::CreepBase::getRoomObjectTarget() -{ - // Check if game can find target - auto roomObj = Screeps::Game.getObjectById(target_id); - if (!roomObj) - { - JS::console.log(creep.name() + ": Game can\'t find target id"); - return nullptr; - } - return std::move(roomObj); -} - -bool DouwcoHivemind::CreepBase::isNearTo(const Screeps::RoomPosition &pos, int dist) -{ - return DouwcoHivemind::isNearTo(creep.pos(), pos, dist); -} \ No newline at end of file diff --git a/douwco_hivemind/src/Builder.cpp b/douwco_hivemind/src/Creeps/Builder.cpp similarity index 91% rename from douwco_hivemind/src/Builder.cpp rename to douwco_hivemind/src/Creeps/Builder.cpp index 1bc8f4c..1d7ffe6 100644 --- a/douwco_hivemind/src/Builder.cpp +++ b/douwco_hivemind/src/Creeps/Builder.cpp @@ -19,12 +19,12 @@ #include #include "Creeps/Builder.hpp" +#include "Creeps/CreepBase.hpp" void DouwcoHivemind::Builder::depositEnergy() { auto constructionSite = getConstructionSiteTarget(); - if (!constructionSite) - return; + if (!constructionSite) return; if (isNearTo(constructionSite->pos(), 1)) { @@ -57,7 +57,7 @@ std::unique_ptr DouwcoHivemind::Builder::getConstruct void DouwcoHivemind::Builder::searchConstructionSite() { - int leastProgressLeft = INT16_MAX; + int leastProgressLeft = INT32_MAX; Screeps::ConstructionSite *selectedConstructionSite; auto constructionSites = creep.room().find(Screeps::FIND_MY_CONSTRUCTION_SITES); for (auto &constructionSiteObject : constructionSites) @@ -68,7 +68,7 @@ void DouwcoHivemind::Builder::searchConstructionSite() int progressLeft = constructionSite->progressTotal() - constructionSite->progress(); - if(constructionSite->structureType() == Screeps::STRUCTURE_ROAD) progressLeft *= 100; + if(constructionSite->structureType() == Screeps::STRUCTURE_ROAD) progressLeft *= 10; if (progressLeft < leastProgressLeft) { leastProgressLeft = progressLeft; @@ -77,7 +77,7 @@ void DouwcoHivemind::Builder::searchConstructionSite() } if (selectedConstructionSite) - target_id = selectedConstructionSite->id(); + targetId = selectedConstructionSite->id(); else - target_id.clear(); + creep.suicide(); } diff --git a/douwco_hivemind/src/Creeps/CreepBase.cpp b/douwco_hivemind/src/Creeps/CreepBase.cpp new file mode 100644 index 0000000..e9e4ad4 --- /dev/null +++ b/douwco_hivemind/src/Creeps/CreepBase.cpp @@ -0,0 +1,141 @@ +#include + +#include +#include +#include +#include +#include + +#include "Creeps/CreepBase.hpp" + +#include "Tools/JsonTool.hpp" +#include "Tools/MeasureTool.hpp" +#include "Tools/PathTool.hpp" + +DouwcoHivemind::CreepBase::CreepBase(Screeps::Creep crp) + : creep(crp), memory(crp.memory()) { + role = memory.contains("role") ? static_cast(memory["role"]) + : CreepRole::UNEMPLOYED; + targetId = memory.contains("targetId") + ? static_cast(memory["targetId"]) + : std::string(); +} + +DouwcoHivemind::CreepBase::~CreepBase() { + memory["role"] = role; + memory["targetId"] = targetId; + creep.setMemory(memory); + if (!creep.spawning() && creep.ticksToLive() == 1) + JS::getGlobal("eval")("delete Memory.creeps['" + creep.name() + "']"); +} + +void DouwcoHivemind::CreepBase::moveToTarget(int dist) { + // Is move required? + auto target = getRoomObjectTarget(); + if (isNearTo(target->pos(), dist)) { + memory.erase("path"); + return; + } + + // Is wating? + if (memory.contains("wait") && memory["wait"] > 0) { + memory["wait"] = memory["wait"].get() - 1; + creep.say("Waiting.."); + return; + } + + // Is there a path to walk? + if (!memory.contains("path") || memory["path"].empty()) { + creep.say("Searching route!"); + auto target_pos = target->pos(); + auto path = creep.room().findPath(creep.pos(), target_pos); + auto last = path.back(); + if (dist == 0) { + Screeps::Room::PathStep step; + step.x = target_pos.x(); + step.y = target_pos.y(); + step.dx = step.x - last.x; + step.dy = step.y - last.y; + path.push_back(step); + } + if (abs(last.x - target_pos.x()) > dist || + abs(last.y - target_pos.y()) > dist) { + creep.say("No possible path"); + memory["wait"] = rand() % 20; + return; + } + memory["path"] = vectorToJson(flattenPathSteps(path)); + } + + // Get step from memory + int pathStepData[5] = {0}; + if (memory["path"].size() > 5) { + for (int i = 0; i < 5; i++) { + pathStepData[i] = memory["path"][i]; + } + } else { + memory.erase("path"); + return; + } + + // Is the move of last tick executed? + int x = creep.pos().x(); + int y = creep.pos().y(); + + Screeps::Room::PathStep step; + step.x = pathStepData[0]; + step.y = pathStepData[1]; + step.dx = pathStepData[2]; + step.dy = pathStepData[3]; + step.direction = pathStepData[4]; + + if (memory.contains("last_pos")) { + int last_x = memory["last_pos"]["x"]; + int last_y = memory["last_pos"]["y"]; + memory.erase("last_pos"); + if (x == last_x && y == last_y) { + creep.say("I'm stuck!"); + memory["wait"] = rand() % 5; + return; + } + } + + // Is the creep on the place intended by the path? + if (!(x == step.x - step.dx && y == step.y - step.dy)) { + creep.say("I'm lost!"); + memory["wait"] = rand() % 5; + memory.erase("path"); + return; + } + + // Lets move forward + int resp = creep.move(step.direction); + if (resp == Screeps::OK) { + memory["last_pos"]["x"] = x; + memory["last_pos"]["y"] = y; + + for (int i = 0; i < 5; i++) { + memory["path"].erase(0); + } + } +} + +std::unique_ptr +DouwcoHivemind::CreepBase::getRoomObjectTarget() { + // Check if any target is present + if (targetId.empty()) + return nullptr; + // Check if game can find target + auto roomObj = Screeps::Game.getObjectById(targetId); + if (!roomObj) { + JS::console.log(creep.name() + ": Game can\'t find target id: " + targetId); + targetId.clear(); + return nullptr; + } + return std::move(roomObj); +} + +bool DouwcoHivemind::CreepBase::isNearTo(const Screeps::RoomPosition &pos, + int dist) { + return DouwcoHivemind::isNearTo(creep.pos(), pos, dist); +} \ No newline at end of file diff --git a/douwco_hivemind/src/Creeps/Maintainer.cpp b/douwco_hivemind/src/Creeps/Maintainer.cpp new file mode 100644 index 0000000..b070a85 --- /dev/null +++ b/douwco_hivemind/src/Creeps/Maintainer.cpp @@ -0,0 +1,85 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Creeps/CreepBase.hpp" +#include "Creeps/Maintainer.hpp" +#include "Screeps/Constants.hpp" + +void DouwcoHivemind::Maintainer::depositEnergy() { + auto structure = getDamagedStructureTarget(); + if (!structure) + return; + if (isNearTo(structure->pos(), 1)) { + int resp = creep.repair(*structure); + } else { + moveToTarget(); + } +} + +std::unique_ptr +DouwcoHivemind::Maintainer::getDamagedStructureTarget() { + auto roomObj = getRoomObjectTarget(); + if (!roomObj) { + searchDamagedStructure(); + return nullptr; + } + + auto structure = std::unique_ptr( + dynamic_cast(roomObj.release())); + if (!structure) { + searchDamagedStructure(); + return nullptr; + } + + // Check if the structure is still broken + int damage = structure->hitsMax() - structure->hits(); + if (damage == 0) { + searchDamagedStructure(); + return nullptr; + } + + return std::move(structure); +} + +void DouwcoHivemind::Maintainer::searchDamagedStructure() { + int highestDamage = 0; + Screeps::Structure *selectedStructure; + auto structures = creep.room().find(Screeps::FIND_STRUCTURES); + for (auto &structureObject : structures) { + auto structure = + dynamic_cast(structureObject.release()); + if (!structure) + continue; + + auto structureType = structure->structureType(); + if (structureType == Screeps::STRUCTURE_CONTROLLER) + continue; + int damage = + 100 * (structure->hitsMax() - structure->hits()) / structure->hitsMax(); + if (structureType == Screeps::STRUCTURE_WALL) continue; + if (highestDamage < damage) { + highestDamage = damage; + selectedStructure = structure; + } + } + + if (selectedStructure && + selectedStructure->hits() != selectedStructure->hitsMax()) + targetId = selectedStructure->id(); + else + targetId.clear(); +} diff --git a/douwco_hivemind/src/Creeps/Miner.cpp b/douwco_hivemind/src/Creeps/Miner.cpp new file mode 100644 index 0000000..87bb6ca --- /dev/null +++ b/douwco_hivemind/src/Creeps/Miner.cpp @@ -0,0 +1,64 @@ +#include "Creeps/Miner.hpp" +#include "Creeps/CreepBase.hpp" +#include "Screeps/Constants.hpp" +#include "Screeps/Creep.hpp" +#include "Screeps/Game.hpp" +#include "Screeps/Room.hpp" +#include "Screeps/RoomPosition.hpp" +#include "Screeps/Source.hpp" +#include "Screeps/Structure.hpp" +#include + +DouwcoHivemind::Miner::Miner(Screeps::Creep crp) : CreepBase(crp) { + sourceId = memory.contains("sourceId") + ? static_cast(memory["sourceId"]) + : ""; + arrived = + memory.contains("arrived") ? static_cast(memory["arrived"]) : false; +} + +DouwcoHivemind::Miner::~Miner() { + memory["sourceId"] = sourceId; + memory["arrived"] = arrived; +} + +void DouwcoHivemind::Miner::loop() { + // Find assigned source + auto source = static_cast( + Screeps::Game.getObjectById(sourceId).release()); + if (!source) + return; + // If arrived just harvest the source + if (arrived) { + creep.harvest(*source); + } + // Otherwise move towards the source or a container near it + else { + auto target = getRoomObjectTarget(); + // If target is set move to it or detect if you arrive + if (target) { + bool targetIsSource = target->pos().isEqualTo(source->pos()); + int closenessToTarget = targetIsSource ? 1 : 0; + if (isNearTo(target->pos(), closenessToTarget)) { + arrived = true; + } else { + moveToTarget(closenessToTarget); + } + } + // if no target look if there are containers near the source otherwise go to source directly. + else { + auto structureRoomObjs = + source->pos().findInRange(Screeps::FIND_STRUCTURES, 2); + for (auto &structureRoomObj : structureRoomObjs) { + auto structure = + static_cast(structureRoomObj.get()); + if (Screeps::STRUCTURE_CONTAINER == structure->structureType()) { + targetId = structure->id(); + break; + } + } + if (targetId.empty()) + targetId = sourceId; + } + } +} \ No newline at end of file diff --git a/douwco_hivemind/src/Creeps/Supplier.cpp b/douwco_hivemind/src/Creeps/Supplier.cpp new file mode 100644 index 0000000..d4e3a3c --- /dev/null +++ b/douwco_hivemind/src/Creeps/Supplier.cpp @@ -0,0 +1,122 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Creeps/Supplier.hpp" +#include "Screeps/Constants.hpp" + +void DouwcoHivemind::Supplier::depositEnergy() { + auto structure = getEnergyStructureTarget(); + if (!structure) + return; + + if (isNearTo(structure->pos(), 1)) { + int resp = creep.transfer(*structure, Screeps::RESOURCE_ENERGY); + } else { + moveToTarget(); + } +} + +std::unique_ptr +DouwcoHivemind::Supplier::getEnergyStructureTarget() { + auto roomObj = getRoomObjectTarget(); + if (!roomObj) { + searchEnergyStructure(); + return nullptr; + } + + auto structure = std::unique_ptr( + dynamic_cast(roomObj.release())); + if (!structure) { + searchEnergyStructure(); + return nullptr; + } + + // Check if the structure can receive energy to harvest + int energyCapacity; + auto structureType = structure->structureType(); + if (structureType == Screeps::STRUCTURE_TOWER) { + auto tower = dynamic_cast(structure.get()); + energyCapacity = + tower->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); + } else if (structureType == Screeps::STRUCTURE_SPAWN) { + auto spawn = dynamic_cast(structure.get()); + energyCapacity = + spawn->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); + } else if (structureType == Screeps::STRUCTURE_EXTENSION) { + auto extension = + dynamic_cast(structure.get()); + energyCapacity = + extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); + } else if (structureType == Screeps::STRUCTURE_STORAGE) { + auto storage = dynamic_cast(structure.get()); + energyCapacity = + storage->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); + } + + if (energyCapacity == 0) { + searchEnergyStructure(); + return nullptr; + } + + return std::move(structure); +} + +void DouwcoHivemind::Supplier::searchEnergyStructure() { + int mostEnergyNeeded = 0; + std::string selectedStructureId; + std::string storageStructureId; + auto structures = creep.room().find(Screeps::FIND_MY_STRUCTURES); + for (auto &structureObject : structures) { + auto structure = dynamic_cast(structureObject.get()); + if (!structure) + continue; + + int energyRequired = 0; + + auto structureType = structure->structureType(); + if (structureType == Screeps::STRUCTURE_TOWER) { + auto tower = dynamic_cast(structure); + energyRequired = + tower->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); + } else if (structureType == Screeps::STRUCTURE_SPAWN) { + auto spawn = dynamic_cast(structure); + energyRequired = + spawn->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); + } else if (structureType == Screeps::STRUCTURE_EXTENSION) { + auto extension = dynamic_cast(structure); + energyRequired = + extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); + } else if (structureType == Screeps::STRUCTURE_STORAGE) { + storageStructureId = structure->id(); + } + + if (energyRequired > mostEnergyNeeded) { + mostEnergyNeeded = energyRequired; + selectedStructureId = structure->id(); + } + } + + if (mostEnergyNeeded == 0) + selectedStructureId = storageStructureId; + + if (selectedStructureId.empty()) + targetId.clear(); + else + targetId = selectedStructureId; +} diff --git a/douwco_hivemind/src/Upgrader.cpp b/douwco_hivemind/src/Creeps/Upgrader.cpp similarity index 96% rename from douwco_hivemind/src/Upgrader.cpp rename to douwco_hivemind/src/Creeps/Upgrader.cpp index 814e6d7..6cb9507 100644 --- a/douwco_hivemind/src/Upgrader.cpp +++ b/douwco_hivemind/src/Creeps/Upgrader.cpp @@ -21,7 +21,7 @@ void DouwcoHivemind::Upgrader::depositEnergy() { auto controller = creep.room().controller().value(); - target_id = controller.id(); + targetId = controller.id(); if (isNearTo(controller.pos(), 3)) { int resp = creep.upgradeController(controller); diff --git a/douwco_hivemind/src/Creeps/Worker.cpp b/douwco_hivemind/src/Creeps/Worker.cpp new file mode 100644 index 0000000..fc4b5ce --- /dev/null +++ b/douwco_hivemind/src/Creeps/Worker.cpp @@ -0,0 +1,206 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Constants.hpp" +#include "Creeps/Worker.hpp" +#include "Screeps/Resource.hpp" +#include "Screeps/Ruin.hpp" +#include "Screeps/StructureContainer.hpp" +#include "Screeps/StructureStorage.hpp" +#include "Screeps/Tombstone.hpp" + +DouwcoHivemind::Worker::Worker(Screeps::Creep crp) : CreepBase(crp) { + harvesting = memory.contains("harvesting") + ? static_cast(memory["harvesting"]) + : false; +} + +DouwcoHivemind::Worker::~Worker() { memory["harvesting"] = harvesting; } + +void DouwcoHivemind::Worker::loop() { + if (harvesting) { + if (creep.store().getFreeCapacity(Screeps::RESOURCE_ENERGY) == 0) { + harvesting = false; + targetId.clear(); + } else { + getEnergy(); + } + } else { + if (creep.store().getUsedCapacity(Screeps::RESOURCE_ENERGY) == 0) { + harvesting = true; + targetId.clear(); + } else { + depositEnergy(); + } + } +} + +void DouwcoHivemind::Worker::getEnergy() { + if (targetId.empty()) { + searchEnergySource(); + } else { + auto target = getRoomObjectTarget(); + if (!target) + return; + if (isNearTo(target->pos(), 1)) { + extractEnergyFromTarget(); + } else { + moveToTarget(1); + } + } +} + +void DouwcoHivemind::Worker::searchEnergySource() { + // Search for storage and containers + std::string containerID = std::string(); + auto structureObjects = creep.room().find(Screeps::FIND_STRUCTURES); + if (structureObjects.size() > 0) { + int fullestContents = 0; + for (auto &structureObject : structureObjects) { + auto structure = static_cast(structureObject.get()); + auto structureType = structure->structureType(); + if (structureType == Screeps::STRUCTURE_STORAGE) { + if (ignoreStorage) + continue; + targetId = structure->id(); + return; + } else if (structureType == Screeps::STRUCTURE_CONTAINER) { + auto container = static_cast(structure); + int availableEnergy = container->store() + .getUsedCapacity(Screeps::RESOURCE_ENERGY) + .value_or(0); + if (availableEnergy == 0) + continue; + if (container->pos().inRangeTo(creep.pos(), 3)) { + targetId = container->id(); + return; + } + if (fullestContents < availableEnergy) { + fullestContents = availableEnergy; + containerID = container->id(); + } + } + } + } + + // If no storage go for the containers + if (!containerID.empty()) { + targetId = containerID; + return; + } + + // Search for loose resources + auto resourceObjects = creep.room().find(Screeps::FIND_DROPPED_RESOURCES); + if (resourceObjects.size() > 0) { + int highestAmount = 0; + std::string resourceID = std::string(); + for (auto &resourceObject : resourceObjects) { + auto resource = static_cast(resourceObject.get()); + if (resource->resourceType() != Screeps::RESOURCE_ENERGY) + continue; + int amount = resource->amount(); + if (resource->pos().inRangeTo(creep.pos(), 3)) { + targetId = resource->id(); + return; + } + if (amount < 100) + continue; + if (amount > highestAmount) { + highestAmount = amount; + resourceID = resource->id(); + } + } + if (!resourceID.empty()) { + targetId = resourceID; + return; + } + } + + // Search for existing ruins + auto ruinObjects = creep.room().find(Screeps::FIND_RUINS); + if (ruinObjects.size() > 0) { + int highestAmount = 0; + std::string ruinID = std::string(); + for (auto &ruinObject : ruinObjects) { + auto ruin = static_cast(ruinObject.get()); + if (ruin->ticksToDecay() < 100) + continue; + int amount = + ruin->store().getUsedCapacity(Screeps::RESOURCE_ENERGY).value_or(0); + if (ruin->pos().inRangeTo(creep.pos(), 3) && amount > 0) { + targetId = ruin->id(); + return; + } + if (amount > highestAmount) { + highestAmount = amount; + ruinID = ruin->id(); + } + } + if (!ruinID.empty()) { + targetId = ruinID; + return; + } + } + + // Search for existing tombstones + auto tombstoneObjects = creep.room().find(Screeps::FIND_TOMBSTONES); + if (tombstoneObjects.size() > 0) { + int highestAmount = 0; + std::string TombstoneID = std::string(); + for (auto &tombstoneObject : tombstoneObjects) { + auto tombstone = static_cast(tombstoneObject.get()); + if (tombstone->ticksToDecay() < 100) + continue; + int amount = tombstone->store() + .getUsedCapacity(Screeps::RESOURCE_ENERGY) + .value_or(0); + if (tombstone->pos().inRangeTo(creep.pos(), 3) && amount > 0) { + targetId = tombstone->id(); + return; + } + if (amount > highestAmount) { + highestAmount = amount; + TombstoneID = tombstone->id(); + } + } + if (!TombstoneID.empty()) { + targetId = TombstoneID; + return; + } + } + + // If still nothing found, there is no target and search should start again. + targetId.clear(); +} + +void DouwcoHivemind::Worker::extractEnergyFromTarget() { + auto roomObj = getRoomObjectTarget(); + if (!roomObj) { + targetId.clear(); + return; + } + + auto resource = dynamic_cast(roomObj.get()); + if (resource) + creep.pickup(*resource); + else + creep.withdraw(*roomObj.get(), Screeps::RESOURCE_ENERGY); + targetId.clear(); +} diff --git a/douwco_hivemind/src/Engine.cpp b/douwco_hivemind/src/Engine.cpp index bec200e..219ec32 100644 --- a/douwco_hivemind/src/Engine.cpp +++ b/douwco_hivemind/src/Engine.cpp @@ -1,88 +1,113 @@ #include #include +#include +#include +#include +#include #include "Engine.hpp" -#include "Creeps/Supplier.hpp" -#include "Creeps/Upgrader.hpp" #include "Creeps/Builder.hpp" #include "Creeps/Maintainer.hpp" +#include "Creeps/Miner.hpp" +#include "Creeps/Supplier.hpp" +#include "Creeps/Upgrader.hpp" +#include "Screeps/Constants.hpp" +#include "Screeps/JS.hpp" +#include "Screeps/StructureSpawn.hpp" #include "Structures/Spawn.hpp" +#include "Structures/Tower.hpp" -DouwcoHivemind::Engine::Engine() -{ - ReadOutCreeps(); - ReadOutStructures(); +DouwcoHivemind::Engine::Engine() { + instance = this; + // JS::console.log(std::string("Reading out owned rooms")); + ReadOutRooms(); + // JS::console.log(std::string("Reading out creeps")); + ReadOutCreeps(); + // JS::console.log(std::string("Reading out structures")); + ReadOutStructures(); } -void DouwcoHivemind::Engine::loop() -{ - JS::console.log(std::string("Iterating over creeps")); - for (auto &creep : creeps) - creep->loop(); +void DouwcoHivemind::Engine::loop() { + int totalCost = Screeps::Game.cpuGetUsed(); + for (auto &room : Rooms) + room.second->loop(); + JS::console.log("Used CPU by rooms:\t" + + std::to_string(Screeps::Game.cpuGetUsed() - totalCost)); + totalCost = Screeps::Game.cpuGetUsed(); - JS::console.log(std::string("Iterating over structures")); - for (auto &structure : structures) - structure->loop(); + for (auto &creep : Creeps) + creep.second->loop(); + JS::console.log("Used CPU by creeps:\t" + + std::to_string(Screeps::Game.cpuGetUsed() - totalCost)); + totalCost = Screeps::Game.cpuGetUsed(); - if (Screeps::Game.time() % 1000 == 0) - { - clearDeadCreepMemory(); + for (auto &structure : Structures) + structure.second->loop(); + JS::console.log("Used CPU by structures:\t" + + std::to_string(Screeps::Game.cpuGetUsed() - totalCost)); + totalCost = Screeps::Game.cpuGetUsed(); + + if (Screeps::Game.time() % 1000 == 0) + clearDeadCreepMemory(); +} + +void DouwcoHivemind::Engine::ReadOutRooms() { + auto src_rooms = Screeps::Game.rooms(); + for (auto &room : src_rooms) { + if (!room.second.controller().value().my()) + continue; + Rooms.emplace(room.first, std::make_unique(room.second)); + } +} + +void DouwcoHivemind::Engine::ReadOutCreeps() { + auto src_creeps = Screeps::Game.creeps(); + for (auto &creep : src_creeps) { + CreepRole role = creep.second.memory()["role"]; + if (role == CreepRole::SUPPLIER) + Creeps.emplace(creep.first, std::make_unique(creep.second)); + else if (role == CreepRole::UPGRADER) + Creeps.emplace(creep.first, std::make_unique(creep.second)); + else if (role == CreepRole::BUILDER) + Creeps.emplace(creep.first, std::make_unique(creep.second)); + else if (role == CreepRole::MAINTAINER) + Creeps.emplace(creep.first, std::make_unique(creep.second)); + else if (role == CreepRole::MINER) + Creeps.emplace(creep.first, std::make_unique(creep.second)); + } +} + +void DouwcoHivemind::Engine::ReadOutStructures() { + auto structures_src = Screeps::Game.structures(); + for (auto &structure : structures_src) { + std::string structureType = structure.second.structureType(); + if (structureType == Screeps::STRUCTURE_TOWER) { + Structures.emplace( + structure.first, + std::make_unique( + static_cast(structure.second))); + } else if (structureType == Screeps::STRUCTURE_SPAWN) { + Structures.emplace( + structure.first, + std::make_unique( + static_cast(structure.second))); } + } } -void DouwcoHivemind::Engine::ReadOutCreeps() -{ - JS::console.log(std::string("Reading out creeps")); - auto src_creeps = Screeps::Game.creeps(); - for (auto &creep : src_creeps) - { - CreepRole role = creep.second.memory()["role"]; - if (role == CreepRole::SUPPLIER) - creeps.push_back(std::make_unique(creep.second)); - else if (role == CreepRole::UPGRADER) - creeps.push_back(std::make_unique(creep.second)); - else if (role == CreepRole::BUILDER) - creeps.push_back(std::make_unique(creep.second)); - else if (role == CreepRole::MAINTAINER) - creeps.push_back(std::make_unique(creep.second)); +void DouwcoHivemind::Engine::clearDeadCreepMemory() { + + auto creepMemory = JS::getGlobal("Memory")["creeps"]; + auto creepNames = JS::gObject.call("keys", creepMemory); + int size = creepNames["length"].as(); + + for (int i = 0; i < size; i++) { + auto name = creepNames[i].as(); + if (Engine::getInstance()->Creeps.find(name) == + Engine::getInstance()->Creeps.end()) { + JS::getGlobal("eval")("delete Memory.creeps['" + name + "']"); } -} - -void DouwcoHivemind::Engine::ReadOutStructures() -{ - JS::console.log(std::string("Reading out structures")); - auto spawns = Screeps::Game.spawns(); - for (auto &spawn : spawns) - { - structures.push_back(std::make_unique(spawn.second)); - } -} - -void DouwcoHivemind::Engine::clearDeadCreepMemory() -{ - auto creepMemory = Screeps::Memory["creeps"]; - auto creepsMap = Screeps::Game.creeps(); - int iterator = 0; - for (auto [name, creep] : creepMemory.items()) - { - // avoid cpu overload - iterator++; - if (iterator == 100) - break; - - bool containsname = false; - for (auto creepObject : creepsMap) - { - if (creepObject.first == name) - { - containsname = true; - break; - } - } - if (!containsname) - creepMemory.erase(name); - } - Screeps::Memory.set("creeps", creepMemory); + } } diff --git a/douwco_hivemind/src/Entity/Room.cpp b/douwco_hivemind/src/Entity/Room.cpp new file mode 100644 index 0000000..7f75b53 --- /dev/null +++ b/douwco_hivemind/src/Entity/Room.cpp @@ -0,0 +1,287 @@ +#include "Entity/Room.hpp" + +#include "Engine.hpp" +#include "Screeps/Constants.hpp" +#include "Screeps/Game.hpp" +#include "Screeps/Room.hpp" +#include "Screeps/RoomObject.hpp" +#include "Screeps/RoomPosition.hpp" +#include "Screeps/RoomTerrain.hpp" +#include "Screeps/Source.hpp" +#include "Screeps/Structure.hpp" +#include "Screeps/StructureContainer.hpp" +#include "Screeps/StructureController.hpp" + +#include "Constants.hpp" +#include "Screeps/StructureSpawn.hpp" +#include "Structures/Spawn.hpp" +#include +#include +#include + +DouwcoHivemind::Room::Room(Screeps::Room rm) : roomJs(rm), memory(rm.memory()) { + if (memory.contains("sourceIds")) + sourceIds = static_cast>(memory["sourceIds"]); + if (memory.contains("sourceContainerIds")) + sourceContainerIds = + static_cast>(memory["sourceContainerIds"]); + if (memory.contains("SpawnIds")) + SpawnIds = static_cast>(memory["SpawnIds"]); + if (memory.contains("creepNames")) + creepNames = static_cast>(memory["creepNames"]); + minerIterator = memory.contains("minerIterator") + ? static_cast(memory["minerIterator"]) + : 0; +} + +DouwcoHivemind::Room::~Room() { + memory["sourceIds"] = sourceIds; + memory["sourceContainerIds"] = sourceContainerIds; + memory["SpawnIds"] = SpawnIds; + memory["creepNames"] = creepNames; + memory["minerIterator"] = minerIterator; + roomJs.setMemory(memory); +} + +void DouwcoHivemind::Room::loop() { + manageStructures(); + manageScreeps(); +} + +void DouwcoHivemind::Room::manageStructures() { + updateSourceIds(); + updateSpawnIds(); + updateContainerIds(); +} + +void DouwcoHivemind::Room::manageScreeps() { + // Clean dead creeps from managed creepNames list. + cleanupManagedCreeps(); + + // Get job status + auto requiredJobs = calculateRequiredJobs(); + auto currentJobs = countCurrentJobs(); + + // Check if max energy used + int energyAvailable = roomJs.energyAvailable(); + int energyCapacityAvailable = roomJs.energyCapacityAvailable(); + if (energyAvailable < energyCapacityAvailable && 0 < currentJobs[SUPPLIER]) + return; + + // Select based on priority which role needs to be made first + const std::vector rolePriority = { + CreepRole::MINER, CreepRole::SUPPLIER, CreepRole::UPGRADER, + CreepRole::BUILDER, CreepRole::MAINTAINER}; + + CreepRole role = CreepRole::UNEMPLOYED; + for (CreepRole roleType : rolePriority) { + if (requiredJobs[roleType] > currentJobs[roleType]) { + role = roleType; + break; + } + } + if (role == UNEMPLOYED) + return; + + // Set creep properties + std::string name = getNewCreepName(role); + auto body = getNewCreepBody(role); + JSON opts = getNewCreepOptions(role); + + // Create creep + auto spawn = static_cast( + Engine::getInstance()->Structures[SpawnIds[0]].get()); + spawn->spawnJs.spawnCreep(body, name, opts); + // Store creepname in managed list. + creepNames.push_back(name); +} + +void DouwcoHivemind::Room::cleanupManagedCreeps() { + std::vector cleanedCreepNames; + for (std::string creepName : creepNames) { + if (Engine::getInstance()->Creeps.contains(creepName)) + cleanedCreepNames.push_back(creepName); + } + creepNames = cleanedCreepNames; +} + +void DouwcoHivemind::Room::updateSourceIds() { + if (sourceIds.size() == 0) { + auto sources = roomJs.find(Screeps::FIND_SOURCES); + for (auto &source : sources) { + sourceIds.push_back(static_cast(source.get())->id()); + } + } +} + +void DouwcoHivemind::Room::updateSpawnIds() { + if (SpawnIds.size() == 0 || Screeps::Game.time() % 1000 == 0) { + SpawnIds.clear(); + auto spawnStructures = roomJs.find(Screeps::FIND_MY_SPAWNS); + for (auto &spawnStructure : spawnStructures) { + SpawnIds.push_back( + static_cast(spawnStructure.get())->id()); + } + } +} + +void DouwcoHivemind::Room::updateContainerIds() { + // No containers planned or build, planning now + if (sourceContainerIds.size() < sourceIds.size()) { + int controller_x = roomJs.controller().value().pos().x(); + int controller_y = roomJs.controller().value().pos().y(); + + for (auto sourceId : sourceIds) { + auto roomObj = Screeps::Game.getObjectById(sourceId); + int source_x = roomObj->pos().x(); + int source_y = roomObj->pos().y(); + + int lowest_cost = INT16_MAX; + int best_x; + int best_y; + for (int dx = -1; dx < 2; dx++) { + for (int dy = -1; dy < 2; dy++) { + if (dx == 0 && dy == 0) + continue; + int x = source_x + dx; + int y = source_y + dy; + int terrainType = roomJs.getTerrain().get(x, y); + if (terrainType != Screeps::TERRAIN_MASK_WALL) { + int cost = std::abs(x - controller_x) + std::abs(y - controller_y); + if (cost < lowest_cost) { + lowest_cost = cost; + best_x = x; + best_y = y; + } + } + } + } + roomJs.createConstructionSite(best_x, best_y, + Screeps::STRUCTURE_CONTAINER); + sourceContainerIds.push_back("under_construction"); + } + return; + } + // Check if construction container is done. + for (auto entry : sourceContainerIds) { + if (entry != "under_construction") + continue; + auto structures = roomJs.find(Screeps::FIND_STRUCTURES); + int index = 0; + for (auto &structure : structures) { + auto str = dynamic_cast(structure.get()); + if (str->structureType() == Screeps::STRUCTURE_CONTAINER) { + sourceContainerIds[index] = str->id(); + index++; + } + } + return; + } + // Check if containers still exist + for (int i = 0; i < sourceContainerIds.size(); i++) { + auto roomObj = Screeps::Game.getObjectById(sourceContainerIds[i]); + if (!roomObj) + sourceContainerIds.erase(sourceContainerIds.begin() + i); + } +} + +std::map +DouwcoHivemind::Room::calculateRequiredJobs() { + std::map requiredJobs; + requiredJobs.emplace(UPGRADER, 1); + requiredJobs.emplace(SUPPLIER, 2); + requiredJobs.emplace(MAINTAINER, 1); + requiredJobs.emplace( + BUILDER, + roomJs.find(Screeps::FIND_MY_CONSTRUCTION_SITES).size() > 0 ? 1 : 0); + requiredJobs.emplace(MINER, sourceIds.size()); + return requiredJobs; +} + +std::map +DouwcoHivemind::Room::countCurrentJobs() { + std::map currentJobs; + currentJobs.emplace(UPGRADER, 0); + currentJobs.emplace(SUPPLIER, 0); + currentJobs.emplace(MAINTAINER, 0); + currentJobs.emplace(BUILDER, 0); + currentJobs.emplace(MINER, 0); + + for (std::string creepName : creepNames) { + if (Engine::getInstance()->Creeps.contains(creepName)) { + CreepRole role = Engine::getInstance()->Creeps[creepName]->role; + currentJobs[role] += 1; + } + } + return currentJobs; +} + +std::string DouwcoHivemind::Room::getNewCreepName(CreepRole role) { + std::string name; + switch (role) { + case UPGRADER: + name = "Upgrader"; + break; + case SUPPLIER: + name = "Supplier"; + break; + case MAINTAINER: + name = "Maintainer"; + break; + case BUILDER: + name = "Builder"; + break; + case MINER: + name = "Miner"; + break; + default: + name = "creep"; + break; + } + return name + " - " + std::to_string(Screeps::Game.time()); +} + +std::vector DouwcoHivemind::Room::getNewCreepBody(CreepRole role) { + int energyAvailable = roomJs.energyAvailable(); + + std::vector body; + switch (role) { + case MINER: + body.push_back("move"); + body.push_back("work"); + for (int i = 0; i < (energyAvailable - 150) / 100 && i < 5; i++) { + body.push_back("work"); + } + break; + case SUPPLIER: + for (int i = 0; i < energyAvailable / 100; i++) { + body.push_back("move"); + body.push_back("carry"); + } + break; + default: + for (int i = 0; i < energyAvailable / 200; i++) { + body.push_back("work"); + body.push_back("carry"); + body.push_back("move"); + } + break; + } + + return body; +} + +JSON DouwcoHivemind::Room::getNewCreepOptions(CreepRole role) { + JSON opts; + opts["memory"]["role"] = role; + + switch (role) { + case MINER: + opts["memory"]["sourceId"] = sourceIds[minerIterator]; + minerIterator = (minerIterator + 1) % sourceIds.size(); + break; + default: + break; + } + return opts; +} \ No newline at end of file diff --git a/douwco_hivemind/src/Loop.cpp b/douwco_hivemind/src/Loop.cpp index f90c679..a7dd852 100644 --- a/douwco_hivemind/src/Loop.cpp +++ b/douwco_hivemind/src/Loop.cpp @@ -12,34 +12,21 @@ #include "Testing/TestHarness.hpp" EMSCRIPTEN_KEEPALIVE -extern "C" void loop() -{ - Screeps::Context::update(); +extern "C" void loop() { + Screeps::Context::update(); - JS::console.log(std::string("\n\n\n\n\n\n\n\n\n")); - JS::console.log(std::string("Processing tick:\t") + std::to_string(Screeps::Game.time())); + JS::console.log(std::string("\n\n\n\n\n\n\n\n\n")); + JS::console.log(std::string("Processing tick:\t") + + std::to_string(Screeps::Game.time())); - { - DouwcoHivemind::Engine engine; - engine.loop(); - } + { + DouwcoHivemind::Engine engine; + engine.loop(); + } - JS::console.log("Used CPU:\t" + std::to_string(Screeps::Game.cpuGetUsed())); - JS::console.log("Bucket:\t" + std::to_string(static_cast(Screeps::Game.cpu()["bucket"]))); + JS::console.log("Used CPU:\t" + std::to_string(Screeps::Game.cpuGetUsed())); + JS::console.log("Bucket:\t" + std::to_string(static_cast( + Screeps::Game.cpu()["bucket"]))); } -EMSCRIPTEN_KEEPALIVE -extern "C" void runTests() -{ - DouwcoHivemind::Testing::TestHarness::runAllTests(); -} - -EMSCRIPTEN_BINDINGS(loop) -{ - emscripten::function("loop", &loop); - emscripten::function("runTests", &runTests); - emscripten::function("getTestResults", &DouwcoHivemind::Testing::TestHarness::getTestResults); - emscripten::function("getPassedCount", &DouwcoHivemind::Testing::TestHarness::getPassedCount); - emscripten::function("getFailedCount", &DouwcoHivemind::Testing::TestHarness::getFailedCount); - emscripten::function("getTotalCount", &DouwcoHivemind::Testing::TestHarness::getTotalCount); -} +EMSCRIPTEN_BINDINGS(loop) { emscripten::function("loop", &loop); } diff --git a/douwco_hivemind/src/Maintainer.cpp b/douwco_hivemind/src/Maintainer.cpp deleted file mode 100644 index 46cea3b..0000000 --- a/douwco_hivemind/src/Maintainer.cpp +++ /dev/null @@ -1,89 +0,0 @@ -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Creeps/Maintainer.hpp" - -void DouwcoHivemind::Maintainer::depositEnergy() -{ - auto structure = getDamagedStructureTarget(); - if (!structure) - return; - - if (isNearTo(structure->pos(), 1)) - { - int resp = creep.repair(*structure); - } - else - { - moveToTarget(); - } -} - -std::unique_ptr DouwcoHivemind::Maintainer::getDamagedStructureTarget() -{ - auto roomObj = getRoomObjectTarget(); - if (!roomObj) - { - searchDamagedStructure(); - return nullptr; - } - - auto structure = std::unique_ptr(dynamic_cast(roomObj.release())); - if (!structure) - { - searchDamagedStructure(); - return nullptr; - } - - // Check if the structure is still broken - int damage = structure->hitsMax() - structure->hits(); - if (damage == 0) - { - searchDamagedStructure(); - return nullptr; - } - - return std::move(structure); -} - -void DouwcoHivemind::Maintainer::searchDamagedStructure() -{ - int lowestMaintaince = INT16_MAX; - Screeps::Structure *selectedStructure; - auto structures = creep.room().find(Screeps::FIND_STRUCTURES); - for (auto &structureObject : structures) - { - auto structure = dynamic_cast(structureObject.get()); - if (!structure) - continue; - - int maintance = structure->hits(); - auto structureType = structure->structureType(); - if (structureType == Screeps::STRUCTURE_CONTROLLER) - continue; - if (maintance < lowestMaintaince) - { - lowestMaintaince = maintance; - selectedStructure = structure; - } - } - - if (selectedStructure) - target_id = selectedStructure->id(); - else - target_id.clear(); -} diff --git a/douwco_hivemind/src/Spawn.cpp b/douwco_hivemind/src/Spawn.cpp deleted file mode 100644 index 2580046..0000000 --- a/douwco_hivemind/src/Spawn.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#include - -#include -#include -#include -#include -#include - -#include "Creeps/CreepBase.hpp" -#include "Structures/Spawn.hpp" - -void DouwcoHivemind::Spawn::loop() -{ - // Only run every 50 ticks - if (Screeps::Game.time() % 50 != 0) - return; - - auto room = spawn.room(); - int energyAvailable = room.energyAvailable(); - int energyCapacityAvailable = room.energyCapacityAvailable(); - int constructionSiteCount = room.find(Screeps::FIND_MY_CONSTRUCTION_SITES).size(); - auto structures = room.find(Screeps::FIND_STRUCTURES); - int repairableStructureCount, extensionCount; - for (auto& roomObj : structures) - { - auto structure = dynamic_cast(roomObj.get()); - std::string type = structure->structureType(); - if (type == Screeps::STRUCTURE_CONTROLLER || type == Screeps::STRUCTURE_SPAWN) continue; - repairableStructureCount++; - if (type == Screeps::STRUCTURE_EXTENSION) extensionCount++; - } - - int required_suppliers = std::clamp(extensionCount/5, 1, 2); - int required_maintainers = std::clamp(repairableStructureCount, 0, 1); - int required_builders = std::clamp(constructionSiteCount, 0, 5); - int required_upgraders = std::clamp(5-required_builders-required_maintainers-required_suppliers, 1, 3); - - for (auto &creep : Screeps::Game.creeps()) - { - CreepRole role = creep.second.memory()["role"]; - - if (role == CreepRole::SUPPLIER) - required_suppliers--; - else if (role == CreepRole::UPGRADER) - required_upgraders--; - else if (role == CreepRole::MAINTAINER) - required_maintainers--; - else if (role == CreepRole::BUILDER) - required_builders--; - } - - if (energyAvailable < energyCapacityAvailable && required_suppliers == 0) - return; - std::string name; - JSON opts; - if (required_suppliers > 0) - { - opts["memory"]["role"] = CreepRole::SUPPLIER; - name = "Supplier: "; - } - else if (required_upgraders > 0) - { - opts["memory"]["role"] = CreepRole::UPGRADER; - name = "Upgrader: "; - } - else if (required_builders > 0) - { - opts["memory"]["role"] = CreepRole::BUILDER; - name = "Builder: "; - } - else if (required_maintainers > 0) - { - opts["memory"]["role"] = CreepRole::MAINTAINER; - name = "Maintainer: "; - } - else - return; - - std::vector body; - for (int i = 0; i < energyAvailable / 200; i++) - { - body.push_back("work"); - body.push_back("carry"); - body.push_back("move"); - } - - spawn.spawnCreep( - body, - name + std::to_string(Screeps::Game.time()), - opts); -} \ No newline at end of file diff --git a/douwco_hivemind/src/Structures/Spawn.cpp b/douwco_hivemind/src/Structures/Spawn.cpp new file mode 100644 index 0000000..a9c8ac0 --- /dev/null +++ b/douwco_hivemind/src/Structures/Spawn.cpp @@ -0,0 +1 @@ +#include "Structures/Spawn.hpp" diff --git a/douwco_hivemind/src/Structures/Tower.cpp b/douwco_hivemind/src/Structures/Tower.cpp new file mode 100644 index 0000000..252f1c3 --- /dev/null +++ b/douwco_hivemind/src/Structures/Tower.cpp @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +#include "Creeps/CreepBase.hpp" +#include "Engine.hpp" +#include "Screeps/Constants.hpp" +#include "Screeps/Creep.hpp" +#include "Structures/Tower.hpp" + +void DouwcoHivemind::Tower::loop() { + int minHits = INT16_MAX; + Screeps::Creep *target; + auto hostile_creeps = tower.room().find(Screeps::FIND_HOSTILE_CREEPS); + for (auto &creepRoomObj : hostile_creeps) { + Screeps::Creep* creep = static_cast(creepRoomObj.get()); + int health = creep->hits(); + if(health -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Creeps/Supplier.hpp" - -void DouwcoHivemind::Supplier::depositEnergy() -{ - auto structure = getEnergyStructureTarget(); - if (!structure) - return; - - if (isNearTo(structure->pos(), 1)) - { - int resp = creep.transfer(*structure, Screeps::RESOURCE_ENERGY); - } - else - { - moveToTarget(); - } -} - -std::unique_ptr DouwcoHivemind::Supplier::getEnergyStructureTarget() -{ - auto roomObj = getRoomObjectTarget(); - if (!roomObj) - { - searchEnergyStructure(); - return nullptr; - } - - auto structure = std::unique_ptr(dynamic_cast(roomObj.release())); - if (!structure) - { - searchEnergyStructure(); - return nullptr; - } - - // Check if the structure can receive energy to harvest - int energyCapacity; - auto structureType = structure->structureType(); - if (structureType == Screeps::STRUCTURE_SPAWN) - { - auto spawn = dynamic_cast(structure.get()); - energyCapacity = spawn->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); - } - else if (structureType == Screeps::STRUCTURE_EXTENSION) - { - auto extension = dynamic_cast(structure.get()); - energyCapacity = extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); - } - else if (structureType == Screeps::STRUCTURE_TOWER) - { - auto extension = dynamic_cast(structure.get()); - energyCapacity = extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); - } - - if (energyCapacity == 0) - { - searchEnergyStructure(); - return nullptr; - } - - return std::move(structure); -} - -void DouwcoHivemind::Supplier::searchEnergyStructure() -{ - int mostEnergyNeeded = 0; - Screeps::Structure *selectedStructure; - auto structures = creep.room().find(Screeps::FIND_MY_STRUCTURES); - for (auto &structureObject : structures) - { - auto structure = dynamic_cast(structureObject.get()); - if (!structure) - continue; - - int energyRequired; - - auto structureType = structure->structureType(); - if (structureType == Screeps::STRUCTURE_SPAWN) - { - auto spawn = dynamic_cast(structure); - energyRequired = spawn->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); - } - else if (structureType == Screeps::STRUCTURE_EXTENSION) - { - auto extension = dynamic_cast(structure); - energyRequired = extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); - } - else if (structureType == Screeps::STRUCTURE_TOWER) - { - auto extension = dynamic_cast(structure); - energyRequired = extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value(); - } - - if (energyRequired > mostEnergyNeeded) - { - mostEnergyNeeded = energyRequired; - selectedStructure = structure; - } - } - - if (selectedStructure) - target_id = selectedStructure->id(); - else - target_id.clear(); -} diff --git a/douwco_hivemind/src/Worker.cpp b/douwco_hivemind/src/Worker.cpp deleted file mode 100644 index ce2685b..0000000 --- a/douwco_hivemind/src/Worker.cpp +++ /dev/null @@ -1,123 +0,0 @@ -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Creeps/Worker.hpp" - -DouwcoHivemind::Worker::Worker(Screeps::Creep crp) : CreepBase(crp) -{ - harvesting = memory.contains("harvesting") ? static_cast(memory["harvesting"]) : false; -} - -DouwcoHivemind::Worker::~Worker() -{ - memory["harvesting"] = harvesting; -} - -void DouwcoHivemind::Worker::loop() -{ - if (harvesting) - { - if (creep.store().getFreeCapacity(Screeps::RESOURCE_ENERGY) == 0) - { - harvesting = false; - target_id.clear(); - } - harvestSource(); - } - else - { - if (creep.store().getUsedCapacity(Screeps::RESOURCE_ENERGY) == 0) - { - harvesting = true; - target_id.clear(); - } - depositEnergy(); - } -} - -void DouwcoHivemind::Worker::harvestSource() -{ - auto source = getSourceTarget(); - if (!source) - return; - - if (isNearTo(source->pos(), 1)) - { - int resp = creep.harvest(*source); - } - else - { - moveToTarget(); - } -} - -std::unique_ptr DouwcoHivemind::Worker::getSourceTarget() -{ - auto roomObj = getRoomObjectTarget(); - if (!roomObj) - { - searchSource(); - return nullptr; - } - - // Check if found roomobject is an actual source - auto source = std::unique_ptr(dynamic_cast(roomObj.release())); - if (!source) - { - // EM_ASM({console.log($0 + ': Can\'t cast target to Source')}, creep.name().c_str()); - searchSource(); - return nullptr; - } - - // Check if the source still has energy to harvest - if (source->energy() == 0) - { - searchSource(); - return nullptr; - } - - return std::move(source); -} - -void DouwcoHivemind::Worker::searchSource() -{ - target_id.clear(); - - auto sources = creep.room().find(Screeps::FIND_SOURCES_ACTIVE); - if (sources.size() == 0) - return; - - int x = creep.pos().x(); - int y = creep.pos().y(); - - int closestDistance = INT16_MAX; - Screeps::Source *selectedSource; - for(auto &sourceObject : sources){ - auto source =dynamic_cast(sourceObject.get()); - if(source->energy()==0) continue; - int dx = source->pos().x() - x; - int dy = source->pos().y() - y; - int distance = dx*dx + dy*dy; - if(distance < closestDistance){ - closestDistance = distance; - selectedSource = source; - } - } - if(!selectedSource) return; - target_id = selectedSource->id(); -} diff --git a/screepsxx b/screepsxx index 3567060..c6e4baf 160000 --- a/screepsxx +++ b/screepsxx @@ -1 +1 @@ -Subproject commit 3567060bf5846e7618f64ee9439b76550abc4351 +Subproject commit c6e4bafaa3a20199d2e79dc28ca9acde63ebf84d