From 656cca578ee919f853d421b4c259c31969634f78 Mon Sep 17 00:00:00 2001 From: douwe Date: Fri, 19 Dec 2025 09:19:32 +0100 Subject: [PATCH] [untested] Implemented Miner role. Not in spawner yet. --- .cache/jb/UpdateWork.dat | Bin 0 -> 3912 bytes .cache/jb/version.txt | 1 + .idea/modules.xml | 8 --- douwco_hivemind/include/Creeps/Miner.hpp | 23 ++++++++ douwco_hivemind/include/Creeps/Worker.hpp | 6 +- douwco_hivemind/src/Miner.cpp | 67 ++++++++++++++++++++++ 6 files changed, 94 insertions(+), 11 deletions(-) create mode 100644 .cache/jb/UpdateWork.dat create mode 100644 .cache/jb/version.txt delete mode 100644 .idea/modules.xml create mode 100644 douwco_hivemind/include/Creeps/Miner.hpp create mode 100644 douwco_hivemind/src/Miner.cpp diff --git a/.cache/jb/UpdateWork.dat b/.cache/jb/UpdateWork.dat new file mode 100644 index 0000000000000000000000000000000000000000..96efdac2ca8478e462d735b8f00b89cc707ce3d1 GIT binary patch literal 3912 zcmXSoY@5C2()4r&B*2fv9%YV(z-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By Q2rw`#|73PKQX) - - - - - - - \ No newline at end of file diff --git a/douwco_hivemind/include/Creeps/Miner.hpp b/douwco_hivemind/include/Creeps/Miner.hpp new file mode 100644 index 0000000..daad7e8 --- /dev/null +++ b/douwco_hivemind/include/Creeps/Miner.hpp @@ -0,0 +1,23 @@ +#ifndef DOUWCO_HIVEMIND_MINER_HPP +#define DOUWCO_HIVEMIND_MINER_HPP + +#include + +namespace DouwcoHivemind +{ + class Miner : public CreepBase + { + private: + bool requestedContainer = false; + public: + Miner(Screeps::Creep crp); + ~Miner() override; + void loop() override; + + private: + bool mineSource(); + std::unique_ptr getSourceTarget(); + }; +} + +#endif // DOUWCO_HIVEMIND_MINER_HPP \ No newline at end of file diff --git a/douwco_hivemind/include/Creeps/Worker.hpp b/douwco_hivemind/include/Creeps/Worker.hpp index 7804459..70ba98e 100644 --- a/douwco_hivemind/include/Creeps/Worker.hpp +++ b/douwco_hivemind/include/Creeps/Worker.hpp @@ -1,5 +1,5 @@ -#ifndef DOUWCO_HIVEMIND_HARVESTER_HPP -#define DOUWCO_HIVEMIND_HARVESTER_HPP +#ifndef DOUWCO_HIVEMIND_WORKER_HPP +#define DOUWCO_HIVEMIND_WORKER_HPP #include "Creeps/CreepBase.hpp" @@ -26,4 +26,4 @@ namespace DouwcoHivemind }; } -#endif // DOUWCO_HIVEMIND_HARVESTER_HPP \ No newline at end of file +#endif // DOUWCO_HIVEMIND_WORKER_HPP \ No newline at end of file diff --git a/douwco_hivemind/src/Miner.cpp b/douwco_hivemind/src/Miner.cpp new file mode 100644 index 0000000..b70370c --- /dev/null +++ b/douwco_hivemind/src/Miner.cpp @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include + +#include "Creeps/Miner.hpp" + +DouwcoHivemind::Miner::Miner(Screeps::Creep crp) : CreepBase(crp) +{ + requestedContainer = memory.contains("requestedContainer") ? static_cast(memory["requestedContainer"]) : false; +} + +DouwcoHivemind::Miner::~Miner() +{ + memory["requestedContainer"] = requestedContainer; +} + +void DouwcoHivemind::Miner::loop() +{ + if (mineSource() && !requestedContainer) + { + creep.room().createConstructionSite(creep.pos(), Screeps::STRUCTURE_CONTAINER); + requestedContainer = true; + } +} + +bool DouwcoHivemind::Miner::mineSource() +{ + auto source = getSourceTarget(); + if (!source){ + EM_ASM({console.log($0 + ': Miner doesn\'t have valid source target')}, creep.name().c_str()); + return false; + } + + if (isNearTo(source->pos(), 1)) + { + int resp = creep.harvest(*source); + return true; + } + else + { + moveToTarget(); + return false; + } +} + +std::unique_ptr DouwcoHivemind::Miner::getSourceTarget() +{ + auto roomObj = getRoomObjectTarget(); + if (!roomObj) + { + // todo: request source from room + 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()); + // todo: request source from room + return nullptr; + } + + return std::move(source); +}