- added new cell trigger lua function to be able to detect when any unit enters or exits a region of cells:
int registerCellAreaTriggerEvent(Vec4i pos) int getCellTriggeredEventAreaEntryUnitId(); int getCellTriggeredEventAreaExitUnitId();
This commit is contained in:
parent
0449fbea2b
commit
84452f8633
|
@ -211,6 +211,8 @@ ScriptManager::ScriptManager() {
|
|||
currentEventId = 0;
|
||||
inCellTriggerEvent = false;
|
||||
rootNode = NULL;
|
||||
currentCellTriggeredEventAreaEntryUnitId = 0;
|
||||
currentCellTriggeredEventAreaExitUnitId = 0;
|
||||
}
|
||||
|
||||
ScriptManager::~ScriptManager() {
|
||||
|
@ -295,6 +297,7 @@ void ScriptManager::init(World* world, GameCamera *gameCamera, const XmlNode *ro
|
|||
|
||||
luaScript.registerFunction(registerCellAreaTriggerEventForUnitToLocation, "registerCellAreaTriggerEventForUnitToLocation");
|
||||
luaScript.registerFunction(registerCellAreaTriggerEventForFactionToLocation, "registerCellAreaTriggerEventForFactionToLocation");
|
||||
luaScript.registerFunction(registerCellAreaTriggerEvent, "registerCellAreaTriggerEvent");
|
||||
|
||||
luaScript.registerFunction(getCellTriggerEventCount, "getCellTriggerEventCount");
|
||||
luaScript.registerFunction(unregisterCellTriggerEvent, "unregisterCellTriggerEvent");
|
||||
|
@ -306,6 +309,9 @@ void ScriptManager::init(World* world, GameCamera *gameCamera, const XmlNode *ro
|
|||
luaScript.registerFunction(getCellTriggeredEventId, "triggeredCellEventId");
|
||||
luaScript.registerFunction(getTimerTriggeredEventId, "triggeredTimerEventId");
|
||||
|
||||
luaScript.registerFunction(getCellTriggeredEventAreaEntryUnitId, "triggeredEventAreaEntryUnitId");
|
||||
luaScript.registerFunction(getCellTriggeredEventAreaExitUnitId, "triggeredEventAreaExitUnitId");
|
||||
|
||||
luaScript.registerFunction(setRandomGenInit, "setRandomGenInit");
|
||||
luaScript.registerFunction(getRandomGen, "getRandomGen");
|
||||
luaScript.registerFunction(getWorldFrameCount, "getWorldFrameCount");
|
||||
|
@ -599,6 +605,8 @@ void ScriptManager::onCellTriggerEvent(Unit *movingUnit) {
|
|||
__FILE__,__FUNCTION__,__LINE__,movingUnit->getId(),event.type,movingUnit->getPos().getString().c_str(), event.sourceId,event.destId,event.destPos.getString().c_str());
|
||||
|
||||
bool triggerEvent = false;
|
||||
currentCellTriggeredEventAreaEntryUnitId = 0;
|
||||
currentCellTriggeredEventAreaExitUnitId = 0;
|
||||
|
||||
switch(event.type) {
|
||||
case ctet_Unit:
|
||||
|
@ -714,6 +722,51 @@ void ScriptManager::onCellTriggerEvent(Unit *movingUnit) {
|
|||
}
|
||||
break;
|
||||
|
||||
case ctet_AreaPos:
|
||||
{
|
||||
// Is the unit already in the cell range? If no check if they are entering it
|
||||
if(event.eventStateInfo.find(movingUnit->getId()) == event.eventStateInfo.end()) {
|
||||
//printf("ctet_FactionPos event.destPos = [%s], movingUnit->getPos() [%s]\n",event.destPos.getString().c_str(),movingUnit->getPos().getString().c_str());
|
||||
|
||||
bool srcInDst = false;
|
||||
for(int x = event.destPos.x; srcInDst == false && x <= event.destPosEnd.x; ++x) {
|
||||
for(int y = event.destPos.y; srcInDst == false && y <= event.destPosEnd.y; ++y) {
|
||||
|
||||
srcInDst = world->getMap()->isInUnitTypeCells(movingUnit->getType(), Vec2i(x,y),movingUnit->getPos());
|
||||
if(srcInDst == true) {
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugLUA).enabled) SystemFlags::OutputDebug(SystemFlags::debugLUA,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
currentCellTriggeredEventAreaEntryUnitId = movingUnit->getId();
|
||||
event.eventStateInfo[movingUnit->getId()] = Vec2i(x,y).getString();
|
||||
}
|
||||
}
|
||||
}
|
||||
triggerEvent = srcInDst;
|
||||
}
|
||||
// If unit is already in cell range check if they are leaving?
|
||||
else {
|
||||
bool srcInDst = false;
|
||||
for(int x = event.destPos.x; srcInDst == false && x <= event.destPosEnd.x; ++x) {
|
||||
for(int y = event.destPos.y; srcInDst == false && y <= event.destPosEnd.y; ++y) {
|
||||
|
||||
srcInDst = world->getMap()->isInUnitTypeCells(movingUnit->getType(), Vec2i(x,y),movingUnit->getPos());
|
||||
if(srcInDst == true) {
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugLUA).enabled) SystemFlags::OutputDebug(SystemFlags::debugLUA,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
//event.eventStateInfo[movingUnit->getId()] = Vec2i(x,y);
|
||||
}
|
||||
}
|
||||
}
|
||||
triggerEvent = (srcInDst == false);
|
||||
if(triggerEvent == true) {
|
||||
currentCellTriggeredEventAreaExitUnitId = movingUnit->getId();
|
||||
|
||||
event.eventStateInfo.erase(movingUnit->getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if(triggerEvent == true) {
|
||||
|
@ -1126,6 +1179,23 @@ int ScriptManager::registerCellAreaTriggerEventForFactionToLocation(int sourceFa
|
|||
return eventId;
|
||||
}
|
||||
|
||||
int ScriptManager::registerCellAreaTriggerEvent(const Vec4i &pos) {
|
||||
CellTriggerEvent trigger;
|
||||
trigger.type = ctet_AreaPos;
|
||||
trigger.sourceId = -1;
|
||||
trigger.destPos.x = pos.x;
|
||||
trigger.destPos.y = pos.y;
|
||||
trigger.destPosEnd.x = pos.z;
|
||||
trigger.destPosEnd.y = pos.w;
|
||||
|
||||
int eventId = currentEventId++;
|
||||
CellTriggerEventList[eventId] = trigger;
|
||||
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugLUA).enabled) SystemFlags::OutputDebug(SystemFlags::debugLUA,"In [%s::%s Line: %d] trigger cell event when reaching pos: %s, eventId = %d\n",__FILE__,__FUNCTION__,__LINE__,pos.getString().c_str(),eventId);
|
||||
|
||||
return eventId;
|
||||
}
|
||||
|
||||
int ScriptManager::getCellTriggerEventCount(int eventId) {
|
||||
int result = 0;
|
||||
if(CellTriggerEventList.find(eventId) != CellTriggerEventList.end()) {
|
||||
|
@ -1353,6 +1423,17 @@ int ScriptManager::getTimerTriggeredEventId() {
|
|||
return currentTimerTriggeredEventId;
|
||||
}
|
||||
|
||||
int ScriptManager::getCellTriggeredEventAreaEntryUnitId() {
|
||||
ScriptManager_STREFLOP_Wrapper streflopWrapper;
|
||||
return currentCellTriggeredEventAreaEntryUnitId;
|
||||
}
|
||||
|
||||
int ScriptManager::getCellTriggeredEventAreaExitUnitId() {
|
||||
ScriptManager_STREFLOP_Wrapper streflopWrapper;
|
||||
return currentCellTriggeredEventAreaExitUnitId;
|
||||
}
|
||||
|
||||
|
||||
void ScriptManager::setRandomGenInit(int seed) {
|
||||
ScriptManager_STREFLOP_Wrapper streflopWrapper;
|
||||
random.init(seed);
|
||||
|
@ -1796,6 +1877,13 @@ int ScriptManager::registerCellAreaTriggerEventForFactionToLocation(LuaHandle* l
|
|||
return luaArguments.getReturnCount();
|
||||
}
|
||||
|
||||
int ScriptManager::registerCellAreaTriggerEvent(LuaHandle* luaHandle) {
|
||||
LuaArguments luaArguments(luaHandle);
|
||||
int result = thisScriptManager->registerCellAreaTriggerEvent(luaArguments.getVec4i(-1));
|
||||
luaArguments.returnInt(result);
|
||||
return luaArguments.getReturnCount();
|
||||
}
|
||||
|
||||
int ScriptManager::getCellTriggerEventCount(LuaHandle* luaHandle) {
|
||||
LuaArguments luaArguments(luaHandle);
|
||||
int result = thisScriptManager->getCellTriggerEventCount(luaArguments.getInt(-1));
|
||||
|
@ -1973,6 +2061,18 @@ int ScriptManager::getTimerTriggeredEventId(LuaHandle* luaHandle){
|
|||
return luaArguments.getReturnCount();
|
||||
}
|
||||
|
||||
int ScriptManager::getCellTriggeredEventAreaEntryUnitId(LuaHandle* luaHandle){
|
||||
LuaArguments luaArguments(luaHandle);
|
||||
luaArguments.returnInt(thisScriptManager->getCellTriggeredEventAreaEntryUnitId());
|
||||
return luaArguments.getReturnCount();
|
||||
}
|
||||
|
||||
int ScriptManager::getCellTriggeredEventAreaExitUnitId(LuaHandle* luaHandle){
|
||||
LuaArguments luaArguments(luaHandle);
|
||||
luaArguments.returnInt(thisScriptManager->getCellTriggeredEventAreaExitUnitId());
|
||||
return luaArguments.getReturnCount();
|
||||
}
|
||||
|
||||
int ScriptManager::setRandomGenInit(LuaHandle* luaHandle){
|
||||
LuaArguments luaArguments(luaHandle);
|
||||
thisScriptManager->setRandomGenInit(luaArguments.getInt(-1));
|
||||
|
|
|
@ -102,7 +102,8 @@ enum CellTriggerEventType {
|
|||
ctet_Faction,
|
||||
ctet_FactionPos,
|
||||
ctet_UnitAreaPos,
|
||||
ctet_FactionAreaPos
|
||||
ctet_FactionAreaPos,
|
||||
ctet_AreaPos
|
||||
};
|
||||
|
||||
class CellTriggerEvent {
|
||||
|
@ -116,6 +117,8 @@ public:
|
|||
|
||||
int triggerCount;
|
||||
|
||||
std::map<int,string> eventStateInfo;
|
||||
|
||||
void saveGame(XmlNode *rootNode);
|
||||
void loadGame(const XmlNode *rootNode);
|
||||
};
|
||||
|
@ -182,6 +185,10 @@ private:
|
|||
|
||||
int currentTimerTriggeredEventId;
|
||||
int currentCellTriggeredEventId;
|
||||
|
||||
int currentCellTriggeredEventAreaEntryUnitId;
|
||||
int currentCellTriggeredEventAreaExitUnitId;
|
||||
|
||||
int currentEventId;
|
||||
std::map<int,CellTriggerEvent> CellTriggerEventList;
|
||||
std::map<int,TimerTriggerEvent> TimerTriggerEventList;
|
||||
|
@ -280,6 +287,8 @@ private:
|
|||
int registerCellAreaTriggerEventForUnitToLocation(int sourceUnitId, const Vec4i &pos);
|
||||
int registerCellAreaTriggerEventForFactionToLocation(int sourceFactionId, const Vec4i &pos);
|
||||
|
||||
int registerCellAreaTriggerEvent(const Vec4i &pos);
|
||||
|
||||
int getCellTriggerEventCount(int eventId);
|
||||
void unregisterCellTriggerEvent(int eventId);
|
||||
int startTimerEvent();
|
||||
|
@ -287,9 +296,13 @@ private:
|
|||
int resetTimerEvent(int eventId);
|
||||
int stopTimerEvent(int eventId);
|
||||
int getTimerEventSecondsElapsed(int eventId);
|
||||
|
||||
int getCellTriggeredEventId();
|
||||
int getTimerTriggeredEventId();
|
||||
|
||||
int getCellTriggeredEventAreaEntryUnitId();
|
||||
int getCellTriggeredEventAreaExitUnitId();
|
||||
|
||||
void setRandomGenInit(int seed);
|
||||
int getRandomGen(int minVal, int maxVal);
|
||||
int getWorldFrameCount();
|
||||
|
@ -400,6 +413,8 @@ private:
|
|||
static int registerCellAreaTriggerEventForUnitToLocation(LuaHandle* luaHandle);
|
||||
static int registerCellAreaTriggerEventForFactionToLocation(LuaHandle* luaHandle);
|
||||
|
||||
static int registerCellAreaTriggerEvent(LuaHandle* luaHandle);
|
||||
|
||||
static int getCellTriggerEventCount(LuaHandle* luaHandle);
|
||||
static int unregisterCellTriggerEvent(LuaHandle* luaHandle);
|
||||
static int startTimerEvent(LuaHandle* luaHandle);
|
||||
|
@ -411,6 +426,9 @@ private:
|
|||
static int getCellTriggeredEventId(LuaHandle* luaHandle);
|
||||
static int getTimerTriggeredEventId(LuaHandle* luaHandle);
|
||||
|
||||
static int getCellTriggeredEventAreaEntryUnitId(LuaHandle* luaHandle);
|
||||
static int getCellTriggeredEventAreaExitUnitId(LuaHandle* luaHandle);
|
||||
|
||||
static int setRandomGenInit(LuaHandle* luaHandle);
|
||||
static int getRandomGen(LuaHandle* luaHandle);
|
||||
static int getWorldFrameCount(LuaHandle* luaHandle);
|
||||
|
|
Loading…
Reference in New Issue