From 45cf5dc4d77c58ca2b337b4063ab56f20cfe6df4 Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Fri, 26 Apr 2024 04:00:10 -0400 Subject: [PATCH] Colony is now defined in C++ --- sc2/src/uqm/gendef.c | 5 +- sc2/src/uqm/plandata.c | 3 +- sc2/src/uqm/planets/generate/Makeinfo | 5 +- .../generate/{gencol.c => gencol-modern.cpp} | 58 +++++++++---------- 4 files changed, 33 insertions(+), 38 deletions(-) rename sc2/src/uqm/planets/generate/{gencol.c => gencol-modern.cpp} (65%) diff --git a/sc2/src/uqm/gendef.c b/sc2/src/uqm/gendef.c index 589b0700d..fac9ce2f8 100644 --- a/sc2/src/uqm/gendef.c +++ b/sc2/src/uqm/gendef.c @@ -27,7 +27,6 @@ extern GenerateFunctions generateDefaultFunctions; extern GenerateFunctions generateAndrosynthFunctions; extern GenerateFunctions generateBurvixeseFunctions; extern GenerateFunctions generateChmmrFunctions; -extern GenerateFunctions generateColonyFunctions; extern GenerateFunctions generateDruugeFunctions; extern GenerateFunctions generateIlwrathFunctions; extern GenerateFunctions generateMelnormeFunctions; @@ -68,12 +67,11 @@ getGenerateFunctions (STAR_DESC *const star, void **sup, const char **supArg ) // Legacy ones are disabled... case SHOFIXTI_DEFINED: case SLYLANDRO_DEFINED: + case START_COLONY_DEFINED: abort(); case SOL_DEFINED: return &generateSolFunctions; - case START_COLONY_DEFINED: - return &generateColonyFunctions; case SPATHI_DEFINED: return &generateSpathiFunctions; case MELNORME0_DEFINED: @@ -96,7 +94,6 @@ getGenerateFunctions (STAR_DESC *const star, void **sup, const char **supArg ) return &generateTrapFunctions; case BURVIXESE_DEFINED: return &generateBurvixeseFunctions; - abort(); case DRUUGE_DEFINED: return &generateDruugeFunctions; case BOMB_DEFINED: diff --git a/sc2/src/uqm/plandata.c b/sc2/src/uqm/plandata.c index 6e949481b..0ab6829a6 100644 --- a/sc2/src/uqm/plandata.c +++ b/sc2/src/uqm/plandata.c @@ -23,6 +23,7 @@ extern struct GeneratorBase slyDef; extern struct GeneratorBase shofDef; +extern struct GeneratorBase colonyDef; // This array has to be sorted in Y coordinate order then X coordinate order. // Items out of order can cause crashes (better, actually) or "ghost" @@ -542,7 +543,7 @@ STAR_DESC starmap_array[] = //{{2908, 269}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), SHOFIXTI_DEFINED, 4, 82}, {{1004, 1083}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), CXX_DEFINED, 2, 27, &slyDef}, - {{1776, 1395}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), START_COLONY_DEFINED, 0, 98}, + {{1776, 1395}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), CXX_DEFINED, 0, 98, &colonyDef}, {{1777, 1405}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 0, 99}, diff --git a/sc2/src/uqm/planets/generate/Makeinfo b/sc2/src/uqm/planets/generate/Makeinfo index 3e1c3cdaa..ccf8bf495 100644 --- a/sc2/src/uqm/planets/generate/Makeinfo +++ b/sc2/src/uqm/planets/generate/Makeinfo @@ -1,7 +1,8 @@ -uqm_CFILES="gendefault.c genand.c genburv.c genchmmr.c gencol.c gendru.c +uqm_CFILES="gendefault.c genand.c genburv.c genchmmr.c gendru.c genilw.c genmel.c genmyc.c genorz.c genpet.c genpku.c genrain.c gensam.c gensol.c genspa.c gensup.c gensyr.c genthrad.c gentrap.c genutw.c genvault.c genvux.c genwreck.c genyeh.c genzfpscout.c genzoq.c" uqm_HFILES="genall.h gendefault.h" -uqm_CXXFILES="cxx-generator.cpp gensly-modern.cpp genshof-modern.cpp" +uqm_CXXFILES="cxx-generator.cpp gensly-modern.cpp genshof-modern.cpp + gencol-modern.cpp" diff --git a/sc2/src/uqm/planets/generate/gencol.c b/sc2/src/uqm/planets/generate/gencol-modern.cpp similarity index 65% rename from sc2/src/uqm/planets/generate/gencol.c rename to sc2/src/uqm/planets/generate/gencol-modern.cpp index 92ae78f33..b074af422 100644 --- a/sc2/src/uqm/planets/generate/gencol.c +++ b/sc2/src/uqm/planets/generate/gencol-modern.cpp @@ -25,31 +25,29 @@ #include "libs/mathlib.h" -static bool GenerateColony_initNpcs (SOLARSYS_STATE *solarSys); -static bool GenerateColony_generatePlanets (SOLARSYS_STATE *solarSys); -static bool GenerateColony_generateOrbital (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); +namespace +{ + using namespace Planets; + + class GenerateColony + : public DefaultGenerator + { + public: + void initNpcs( SolarSystem *solarSys) override; + bool generatePlanets( SolarSystem *solarSys) override; + bool generateOrbital( SolarSystem *solarSys, + PLANET_DESC *world) override; + }; +} + +extern "C" +{ + GenerateColony colonyDef; +} -const GenerateFunctions generateColonyFunctions = { - /* .initNpcs = */ GenerateColony_initNpcs, - /* .reinitNpcs = */ GenerateDefault_reinitNpcs, - /* .uninitNpcs = */ GenerateDefault_uninitNpcs, - /* .generatePlanets = */ GenerateColony_generatePlanets, - /* .generateMoons = */ GenerateDefault_generateMoons, - /* .generateName = */ GenerateDefault_generateName, - /* .generateOrbital = */ GenerateColony_generateOrbital, - /* .generateMinerals = */ GenerateDefault_generateMinerals, - /* .generateEnergy = */ GenerateDefault_generateEnergy, - /* .generateLife = */ GenerateDefault_generateLife, - /* .pickupMinerals = */ GenerateDefault_pickupMinerals, - /* .pickupEnergy = */ GenerateDefault_pickupEnergy, - /* .pickupLife = */ GenerateDefault_pickupLife, -}; - - -static bool -GenerateColony_initNpcs (SOLARSYS_STATE *solarSys) +void +GenerateColony::initNpcs( SolarSystem *const solarSys ) { HIPGROUP hGroup; @@ -63,7 +61,7 @@ GenerateColony_initNpcs (SOLARSYS_STATE *solarSys) SET_GAME_STATE_32 (COLONY_GRPOFFS0, GLOBAL (BattleGroupRef)); } - GenerateDefault_initNpcs (solarSys); + DefaultGenerator::initNpcs (solarSys); if (GLOBAL (BattleGroupRef) && (hGroup = GetHeadLink (&GLOBAL (ip_group_q)))) @@ -79,12 +77,10 @@ GenerateColony_initNpcs (SOLARSYS_STATE *solarSys) GroupPtr->group_counter = 0; UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); } - - return true; } -static bool -GenerateColony_generatePlanets (SOLARSYS_STATE *solarSys) +bool +GenerateColony::generatePlanets( SolarSystem *const solarSys ) { COUNT angle; PLANET_DESC *pMinPlanet; @@ -101,8 +97,8 @@ GenerateColony_generatePlanets (SOLARSYS_STATE *solarSys) return true; } -static bool -GenerateColony_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +bool +GenerateColony::generateOrbital( SolarSystem *const solarSys, PLANET_DESC *const world ) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { @@ -119,7 +115,7 @@ GenerateColony_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) return true; } - GenerateDefault_generateOrbital (solarSys, world); + DefaultGenerator::generateOrbital (solarSys, world); return true; }