Browse Source

♻️ change M_WalkDir to receive a Monster reference (#4875)

pull/4877/head
Cesar Canassa 4 years ago committed by GitHub
parent
commit
eb2740c7b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 27
      Source/monster.cpp
  2. 2
      Source/monster.h
  3. 2
      Source/sync.cpp

27
Source/monster.cpp

@ -1810,6 +1810,8 @@ void GroupUnity(Monster &monster)
bool RandomWalk(int monsterId, Direction md)
{
Direction mdtemp = md;
Monster &monster = Monsters[monsterId];
bool ok = DirOK(monsterId, md);
if (GenerateRnd(2) != 0)
ok = ok || (md = Left(mdtemp), DirOK(monsterId, md)) || (md = Right(mdtemp), DirOK(monsterId, md));
@ -1825,12 +1827,14 @@ bool RandomWalk(int monsterId, Direction md)
|| (md = Right(Right(mdtemp)), DirOK(monsterId, md));
}
if (ok)
M_WalkDir(monsterId, md);
M_WalkDir(monster, md);
return ok;
}
bool RandomWalk2(int monsterId, Direction md)
{
auto &monster = Monsters[monsterId];
Direction mdtemp = md;
bool ok = DirOK(monsterId, md); // Can we continue in the same direction
if (GenerateRnd(2) != 0) { // Randomly go left or right
@ -1840,7 +1844,7 @@ bool RandomWalk2(int monsterId, Direction md)
}
if (ok)
M_WalkDir(monsterId, mdtemp);
M_WalkDir(monster, mdtemp);
return ok;
}
@ -1919,9 +1923,11 @@ bool AiPlanWalk(int monsterId)
bool DumbWalk(int monsterId, Direction md)
{
Monster &monster = Monsters[monsterId];
bool ok = DirOK(monsterId, md);
if (ok)
M_WalkDir(monsterId, md);
M_WalkDir(monster, md);
return ok;
}
@ -1933,24 +1939,26 @@ Direction Turn(Direction direction, bool turnLeft)
bool RoundWalk(int monsterId, Direction direction, int *dir)
{
Monster &monster = Monsters[monsterId];
Direction turn45deg = Turn(direction, *dir != 0);
Direction turn90deg = Turn(turn45deg, *dir != 0);
if (DirOK(monsterId, turn90deg)) {
// Turn 90 degrees
M_WalkDir(monsterId, turn90deg);
M_WalkDir(monster, turn90deg);
return true;
}
if (DirOK(monsterId, turn45deg)) {
// Only do a small turn
M_WalkDir(monsterId, turn45deg);
M_WalkDir(monster, turn45deg);
return true;
}
if (DirOK(monsterId, direction)) {
// Continue straight
M_WalkDir(monsterId, direction);
M_WalkDir(monster, direction);
return true;
}
@ -4072,11 +4080,8 @@ void PrepDoEnding()
}
}
void M_WalkDir(int monsterId, Direction md)
void M_WalkDir(Monster &monster, Direction md)
{
assert(monsterId >= 0 && monsterId < MaxMonsters);
auto &monster = Monsters[monsterId];
int mwi = monster.type().getAnimData(MonsterGraphic::Walk).frames - 1;
switch (md) {
case Direction::North:
@ -4165,7 +4170,7 @@ void GolumAi(int monsterId)
ok = DirOK(monsterId, md);
}
if (ok)
M_WalkDir(monsterId, md);
M_WalkDir(golem, md);
}
void DeleteMonsterList()

2
Source/monster.h

@ -315,7 +315,7 @@ void M_SyncStartKill(int monsterId, Point position, int pnum);
void M_UpdateLeader(int monsterId);
void DoEnding();
void PrepDoEnding();
void M_WalkDir(int monsterId, Direction md);
void M_WalkDir(Monster &monster, Direction md);
void GolumAi(int monsterId);
void DeleteMonsterList();
void ProcessMonsters();

2
Source/sync.cpp

@ -182,7 +182,7 @@ void SyncMonster(bool isOwner, const TSyncMonster &monsterSync)
if (DirOK(monsterId, md)) {
M_ClearSquares(monsterId);
dMonster[monster.position.tile.x][monster.position.tile.y] = monsterId + 1;
M_WalkDir(monsterId, md);
M_WalkDir(monster, md);
monster._msquelch = UINT8_MAX;
}
}

Loading…
Cancel
Save