- added some new 'predictable' random number generation for use in lua scripts

This commit is contained in:
Mark Vejvoda 2012-03-27 07:05:07 +00:00
parent 5cc39e7c53
commit d25fc14244
2 changed files with 48 additions and 0 deletions

View File

@ -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());

View File

@ -21,6 +21,7 @@
#include "game_constants.h"
#include <map>
#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<int> 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);