Skip to content

Commit

Permalink
SLUDGE: Objectify Region Manager
Browse files Browse the repository at this point in the history
  • Loading branch information
yinsimei committed Apr 14, 2018
1 parent 825331c commit af9d07a
Show file tree
Hide file tree
Showing 11 changed files with 125 additions and 77 deletions.
20 changes: 10 additions & 10 deletions engines/sludge/builtin.cpp
Expand Up @@ -1312,9 +1312,9 @@ builtIn(skipSpeech) {

builtIn(getOverObject) {
UNUSEDALL
if (overRegion)
if (g_sludge->_regionMan->getOverRegion())
// Return value
setVariable(fun->reg, SVT_OBJTYPE, overRegion->thisType->objectNum);
setVariable(fun->reg, SVT_OBJTYPE, g_sludge->_regionMan->getOverRegion()->thisType->objectNum);
else
// Return value
setVariable(fun->reg, SVT_INT, 0);
Expand Down Expand Up @@ -1346,7 +1346,7 @@ builtIn(getObjectX) {
if (pers) {
setVariable(fun->reg, SVT_INT, pers->x);
} else {
ScreenRegion *la = getRegionForObject(objectNumber);
ScreenRegion *la = g_sludge->_regionMan->getRegionForObject(objectNumber);
if (la) {
setVariable(fun->reg, SVT_INT, la->sX);
} else {
Expand All @@ -1367,7 +1367,7 @@ builtIn(getObjectY) {
if (pers) {
setVariable(fun->reg, SVT_INT, pers->y);
} else {
ScreenRegion *la = getRegionForObject(objectNumber);
ScreenRegion *la = g_sludge->_regionMan->getRegionForObject(objectNumber);
if (la) {
setVariable(fun->reg, SVT_INT, la->sY);
} else {
Expand Down Expand Up @@ -1404,7 +1404,7 @@ builtIn(addScreenRegion) {
if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
return BR_ERROR;
trimStack(fun->stack);
if (addScreenRegion(x1, y1, x2, y2, sX, sY, di, objectNumber))
if (g_sludge->_regionMan->addScreenRegion(x1, y1, x2, y2, sX, sY, di, objectNumber))
return BR_CONTINUE;
return BR_ERROR;

Expand All @@ -1416,19 +1416,19 @@ builtIn(removeScreenRegion) {
if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
return BR_ERROR;
trimStack(fun->stack);
removeScreenRegion(objectNumber);
g_sludge->_regionMan->removeScreenRegion(objectNumber);
return BR_CONTINUE;
}

builtIn(showBoxes) {
UNUSEDALL
showBoxes();
g_sludge->_regionMan->showBoxes();
return BR_CONTINUE;
}

builtIn(removeAllScreenRegions) {
UNUSEDALL
killAllRegions();
g_sludge->_regionMan->killAll();
return BR_CONTINUE;
}

Expand Down Expand Up @@ -1708,7 +1708,7 @@ static BuiltReturn moveChr(int numParams, LoadedFunction *fun, bool force, bool
if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
return BR_ERROR;
trimStack(fun->stack);
reggie = getRegionForObject(toObj);
reggie = g_sludge->_regionMan->getRegionForObject(toObj);
if (reggie == NULL)
return BR_CONTINUE;

Expand Down Expand Up @@ -1945,7 +1945,7 @@ builtIn(isScreenRegion) {
if (!getValueType(objectNumber, SVT_OBJTYPE, fun->stack->thisVar))
return BR_ERROR;
trimStack(fun->stack);
setVariable(fun->reg, SVT_INT, getRegionForObject(objectNumber) != NULL);
setVariable(fun->reg, SVT_INT, g_sludge->_regionMan->getRegionForObject(objectNumber) != NULL);
return BR_CONTINUE;
}

Expand Down
15 changes: 7 additions & 8 deletions engines/sludge/event.cpp
Expand Up @@ -36,8 +36,6 @@ namespace Sludge {

extern Variable *launchResult;
extern VariableStack *noStack;
extern ScreenRegion *overRegion;
extern ScreenRegion *lastRegion;

EventManager::EventManager(SludgeEngine *vm) {
_vm = vm;
Expand Down Expand Up @@ -152,23 +150,23 @@ void EventManager::checkInput() {
bool EventManager::handleInput() {
static int l = 0;

if (!g_sludge->launchMe.empty()) {
if (!_vm->launchMe.empty()) {
if (l) {
// Still paused because of spawned thingy...
} else {
l = 1;

setVariable(*launchResult, SVT_INT, 0/*launch(launchMe) > 31*/); //TODO:false value
g_sludge->launchMe.clear();
_vm->launchMe.clear();
launchResult = nullptr;
}
return true;
} else {
l = 0;
}

if (!overRegion)
getOverRegion();
if (!_vm->_regionMan->getOverRegion())
_vm->_regionMan->updateOverRegion();

if (_input.justMoved) {
if (_currentEvents->func[kMoveMouse]) {
Expand All @@ -178,12 +176,13 @@ bool EventManager::handleInput() {
}
_input.justMoved = false;

if (lastRegion != overRegion && _currentEvents->func[kFocus]) {
if (_vm-> _regionMan->isRegionChanged()&& _currentEvents->func[kFocus]) {
VariableStack *tempStack = new VariableStack;
if (!checkNew(tempStack))
return false;

initVarNew(tempStack->thisVar);
ScreenRegion *overRegion = _vm->_regionMan->getOverRegion();
if (overRegion) {
setVariable(tempStack->thisVar, SVT_OBJTYPE, overRegion->thisType->objectNum);
} else {
Expand Down Expand Up @@ -333,7 +332,7 @@ bool EventManager::handleInput() {
_input.rightRelease = false;
_input.leftRelease = false;
_input.keyPressed = 0;
lastRegion = overRegion;
_vm->_regionMan->updateLastRegion();
return true;
}

Expand Down
10 changes: 3 additions & 7 deletions engines/sludge/freeze.cpp
Expand Up @@ -95,10 +95,7 @@ bool GraphicsManager::freeze() {
return false;
newFreezer->frozenStatus = copyStatusBarStuff(newStatusStuff);

newFreezer->allScreenRegions = allScreenRegions;
allScreenRegions = NULL;
overRegion = NULL;

_vm->_regionMan->freeze(newFreezer);
_vm->_cursorMan->freeze(newFreezer);
_vm->_speechMan->freeze(newFreezer);
_vm->_evtMan->freeze(newFreezer);
Expand Down Expand Up @@ -139,8 +136,8 @@ void GraphicsManager::unfreeze(bool killImage) {
killAllPeople();
allPeople = _frozenStuff->allPeople;

killAllRegions();
allScreenRegions = _frozenStuff->allScreenRegions;
g_sludge->_regionMan->killAll();
g_sludge->_regionMan->resotre(_frozenStuff);

killLightMap();

Expand Down Expand Up @@ -171,7 +168,6 @@ void GraphicsManager::unfreeze(bool killImage) {
_vm->_speechMan->restore(_frozenStuff);

_frozenStuff = _frozenStuff->next;
overRegion = NULL;

// free current frozen screen struct
if (killMe->backdropSurface.getPixels())
Expand Down
6 changes: 3 additions & 3 deletions engines/sludge/loadsave.cpp
Expand Up @@ -375,7 +375,7 @@ bool saveGame(const Common::String &fname) {
g_sludge->_evtMan->saveHandlers(fp);

// Save regions
saveRegions(fp);
g_sludge->_regionMan->saveRegions(fp);

g_sludge->_cursorMan->saveCursor(fp);

Expand Down Expand Up @@ -504,7 +504,7 @@ bool loadGame(const Common::String &fname) {
g_sludge->_txtMan->loadFont(ssgVersion, fp);

killAllPeople();
killAllRegions();
g_sludge->_regionMan->killAll();

int camerX = fp->readUint16BE();
int camerY = fp->readUint16BE();
Expand All @@ -519,7 +519,7 @@ bool loadGame(const Common::String &fname) {

g_sludge->_gfxMan->loadHSI(fp, 0, 0, true);
g_sludge->_evtMan->loadHandlers(fp);
loadRegions(fp);
g_sludge->_regionMan->loadRegions(fp);

if (!g_sludge->_cursorMan->loadCursor(fp)) {
return false;
Expand Down
15 changes: 5 additions & 10 deletions engines/sludge/people.cpp
Expand Up @@ -51,13 +51,11 @@ extern VariableStack *noStack;
extern int ssgVersion;

ScreenRegion personRegion;
extern ScreenRegion *lastRegion;
extern Floor *currentFloor;

OnScreenPerson *allPeople = NULL;
int16 scaleHorizon = 75;
int16 scaleDivide = 150;
extern ScreenRegion *allScreenRegions;

void setFrames(OnScreenPerson &m, int a) {
m.myAnim = m.myPersona->animation[(a * m.myPersona->numDirections) + m.direction];
Expand Down Expand Up @@ -161,8 +159,6 @@ bool initPeople() {
personRegion.sX = 0;
personRegion.sY = 0;
personRegion.di = -1;
allScreenRegions = NULL;

return true;
}

Expand Down Expand Up @@ -410,8 +406,6 @@ void setPersonColourise(int ob, byte r, byte g, byte b, byte colourmix) {
moveMe->colourmix = colourmix;
}

extern ScreenRegion *overRegion;

void shufflePeople() {
OnScreenPerson **thisReference = &allPeople;
OnScreenPerson *A, *B;
Expand Down Expand Up @@ -445,7 +439,7 @@ void drawPeople() {

OnScreenPerson *thisPerson = allPeople;
PersonaAnimation *myAnim = NULL;
overRegion = NULL;
g_sludge->_regionMan->resetOverRegion();

while (thisPerson) {
if (thisPerson->show) {
Expand Down Expand Up @@ -480,9 +474,9 @@ void drawPeople() {
if (r) {
if (!thisPerson->thisType->screenName.empty()) {
if (personRegion.thisType != thisPerson->thisType)
lastRegion = NULL;
g_sludge->_regionMan->resetLastRegion();
personRegion.thisType = thisPerson->thisType;
overRegion = &personRegion;
g_sludge->_regionMan->setOverRegion(&personRegion);
}
}
}
Expand Down Expand Up @@ -943,8 +937,9 @@ void removeOneCharacter(int i) {
OnScreenPerson *p = findPerson(i);

if (p) {
ScreenRegion *overRegion = g_sludge->_regionMan->getOverRegion();
if (overRegion == &personRegion && overRegion->thisType == p->thisType) {
overRegion = NULL;
overRegion = nullptr;
}

if (p->continueAfterWalking)
Expand Down

0 comments on commit af9d07a

Please sign in to comment.