From d25fc14244294a82b690c42a5e28535ebf696d9e Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Tue, 27 Mar 2012 07:05:07 +0000 Subject: [PATCH] - added some new 'predictable' random number generation for use in lua scripts --- source/glest_game/game/script_manager.cpp | 37 +++++++++++++++++++++++ source/glest_game/game/script_manager.h | 11 +++++++ 2 files changed, 48 insertions(+) diff --git a/source/glest_game/game/script_manager.cpp b/source/glest_game/game/script_manager.cpp index cfc8f2a1..fdbb5dac 100644 --- a/source/glest_game/game/script_manager.cpp +++ b/source/glest_game/game/script_manager.cpp @@ -277,6 +277,10 @@ void ScriptManager::init(World* world, GameCamera *gameCamera, const XmlNode *ro luaScript.registerFunction(getCellTriggeredEventId, "triggeredCellEventId"); luaScript.registerFunction(getTimerTriggeredEventId, "triggeredTimerEventId"); + luaScript.registerFunction(setRandomGenInit, "setRandomGenInit"); + luaScript.registerFunction(getRandomGen, "getRandomGen"); + luaScript.registerFunction(getWorldFrameCount, "getWorldFrameCount"); + luaScript.registerFunction(getStartLocation, "startLocation"); luaScript.registerFunction(getUnitPosition, "unitPosition"); luaScript.registerFunction(getUnitFaction, "unitFaction"); @@ -1130,6 +1134,21 @@ int ScriptManager::getTimerTriggeredEventId() { return currentTimerTriggeredEventId; } +void ScriptManager::setRandomGenInit(int seed) { + ScriptManager_STREFLOP_Wrapper streflopWrapper; + random.init(seed); +} + +int ScriptManager::getRandomGen(int minVal, int maxVal) { + ScriptManager_STREFLOP_Wrapper streflopWrapper; + return random.randRange(minVal,maxVal); +} + +int ScriptManager::getWorldFrameCount() { + ScriptManager_STREFLOP_Wrapper streflopWrapper; + return world->getFrameCount(); +} + bool ScriptManager::getGameWon() { ScriptManager_STREFLOP_Wrapper streflopWrapper; return gameWon; @@ -1630,6 +1649,24 @@ int ScriptManager::getTimerTriggeredEventId(LuaHandle* luaHandle){ return luaArguments.getReturnCount(); } +int ScriptManager::setRandomGenInit(LuaHandle* luaHandle){ + LuaArguments luaArguments(luaHandle); + thisScriptManager->setRandomGenInit(luaArguments.getInt(-1)); + return luaArguments.getReturnCount(); +} + +int ScriptManager::getRandomGen(LuaHandle* luaHandle){ + LuaArguments luaArguments(luaHandle); + luaArguments.returnInt(thisScriptManager->getRandomGen(luaArguments.getInt(-2),luaArguments.getInt(-1))); + return luaArguments.getReturnCount(); +} + +int ScriptManager::getWorldFrameCount(LuaHandle* luaHandle){ + LuaArguments luaArguments(luaHandle); + luaArguments.returnInt(thisScriptManager->getWorldFrameCount()); + return luaArguments.getReturnCount(); +} + int ScriptManager::getLastDeadUnitName(LuaHandle* luaHandle){ LuaArguments luaArguments(luaHandle); luaArguments.returnString(thisScriptManager->getLastDeadUnitName()); diff --git a/source/glest_game/game/script_manager.h b/source/glest_game/game/script_manager.h index 471da6ba..b72771b9 100644 --- a/source/glest_game/game/script_manager.h +++ b/source/glest_game/game/script_manager.h @@ -21,6 +21,7 @@ #include "game_constants.h" #include #include "xml_parser.h" +#include "randomgen.h" #include "leak_dumper.h" using std::string; @@ -30,6 +31,7 @@ using Shared::Graphics::Vec2i; using Shared::Lua::LuaScript; using Shared::Lua::LuaHandle; using Shared::Xml::XmlNode; +using Shared::Util::RandomGen; namespace Glest{ namespace Game{ @@ -176,6 +178,7 @@ private: bool inCellTriggerEvent; std::vector unRegisterCellTriggerEventList; + RandomGen random; const XmlNode *rootNode; private: @@ -264,6 +267,10 @@ private: int getCellTriggeredEventId(); int getTimerTriggeredEventId(); + void setRandomGenInit(int seed); + int getRandomGen(int minVal, int maxVal); + int getWorldFrameCount(); + bool getAiEnabled(int factionIndex); bool getConsumeEnabled(int factionIndex); @@ -357,6 +364,10 @@ private: static int getCellTriggeredEventId(LuaHandle* luaHandle); static int getTimerTriggeredEventId(LuaHandle* luaHandle); + static int setRandomGenInit(LuaHandle* luaHandle); + static int getRandomGen(LuaHandle* luaHandle); + static int getWorldFrameCount(LuaHandle* luaHandle); + static int setPlayerAsWinner(LuaHandle* luaHandle); static int endGame(LuaHandle* luaHandle);