Implemented buttons to apply advanced controls directly to units

This commit is contained in:
Pax1601
2023-11-08 23:33:27 +01:00
parent b9830f0190
commit 9caee0c77c
16 changed files with 276 additions and 95 deletions

View File

@@ -278,10 +278,11 @@ private:
class Delete : public Command
{
public:
Delete(unsigned int ID, bool explosion, bool immediate, function<void(void)> callback = [](){}) :
Delete(unsigned int ID, bool explosion, string explosionType, bool immediate, function<void(void)> callback = [](){}) :
Command(callback),
ID(ID),
explosion(explosion),
explosionType(explosionType),
immediate(immediate)
{
priority = CommandPriority::HIGH;
@@ -293,6 +294,7 @@ public:
private:
const unsigned int ID;
const bool explosion;
const string explosionType;
const bool immediate;
};

View File

@@ -20,7 +20,7 @@ public:
void update(json::value& missionData, double dt);
void runAILoop();
void getUnitData(stringstream &ss, unsigned long long time);
void deleteUnit(unsigned int ID, bool explosion, bool immediate);
void deleteUnit(unsigned int ID, bool explosion, string explosionType, bool immediate);
void acquireControl(unsigned int ID);
void loadDatabases();
Unit* getClosestUnit(Unit* unit, unsigned char coalition, vector<string> categories, double &distance);

View File

@@ -165,7 +165,8 @@ string Delete::getString()
commandSS.precision(10);
commandSS << "Olympus.delete, "
<< ID << ", "
<< (explosion ? "true" : "false");
<< (explosion ? "true" : "false") << ", "
<< "\"" << explosionType << "\"";
return commandSS.str();
}

View File

@@ -408,10 +408,11 @@ void Scheduler::handleRequest(string key, json::value value, string username, js
{
unsigned int ID = value[L"ID"].as_integer();
bool explosion = value[L"explosion"].as_bool();
string explosionType = to_string(value[L"explosionType"]);
bool immediate = value[L"immediate"].as_bool();
Unit* unit = unitsManager->getUnit(ID);
if (unit != nullptr) {
unitsManager->deleteUnit(ID, explosion, immediate);
unitsManager->deleteUnit(ID, explosion, explosionType, immediate);
log(username + " deleted unit " + unit->getUnitName() + "(" + unit->getName() + ")", true);
}
}

View File

@@ -142,11 +142,11 @@ void UnitsManager::getUnitData(stringstream &ss, unsigned long long time)
p.second->getData(ss, time);
}
void UnitsManager::deleteUnit(unsigned int ID, bool explosion, bool immediate)
void UnitsManager::deleteUnit(unsigned int ID, bool explosion, string explosionType, bool immediate)
{
if (getUnit(ID) != nullptr)
{
Command* command = dynamic_cast<Command*>(new Delete(ID, explosion, immediate));
Command* command = dynamic_cast<Command*>(new Delete(ID, explosion, explosionType, immediate));
scheduler->appendCommand(command);
}
}