diff --git a/src/action/action_move.cpp b/src/action/action_move.cpp index c01e580e7..3c35c2edb 100644 --- a/src/action/action_move.cpp +++ b/src/action/action_move.cpp @@ -83,7 +83,6 @@ int DoActionMove(CUnit &unit) // FIXME: So units flying up and down are not affected. unit.IX = unit.IY = 0; - MapUnmarkUnitGuard(unit); UnmarkUnitFieldFlags(unit); d = NextPathElement(unit, &posd.x, &posd.y); MarkUnitFieldFlags(unit); diff --git a/src/action/action_still.cpp b/src/action/action_still.cpp index 8f8614154..491498b36 100644 --- a/src/action/action_still.cpp +++ b/src/action/action_still.cpp @@ -80,70 +80,9 @@ -- Functions ----------------------------------------------------------------------------*/ -static void MapMarkTileGuard(const CPlayer &player, const unsigned int index) -{ - ++Map.Field(index)->Guard[player.Index]; -} - - -static void MapUnmarkTileGuard(const CPlayer &player, const unsigned int index) -{ - Assert(Map.Field(index)->Guard[player.Index] > 0); - --Map.Field(index)->Guard[player.Index]; -} - -void MapMarkUnitGuard(CUnit &unit) -{ - if (unit.IsAgressive() && !unit.GuardLock) { - if (!unit.Removed) { - unit.GuardLock = 1; - MapSight(*unit.Player, unit.tilePos, - unit.Type->TileWidth, unit.Type->TileHeight, - unit.GetReactRange(), - MapMarkTileGuard); - } else { - CUnit *c = unit.Container; - if (c && c->Type->AttackFromTransporter) { - unit.GuardLock = 1; - MapSight(*unit.Player, c->tilePos, - c->Type->TileWidth, c->Type->TileHeight, - unit.GetReactRange(), MapMarkTileGuard); - } - } - } -} - -void MapUnmarkUnitGuard(CUnit &unit) -{ - if (unit.IsAgressive() && unit.GuardLock) { - if (!unit.Removed) { - unit.GuardLock = 0; - MapSight(*unit.Player, unit.tilePos, - unit.Type->TileWidth, unit.Type->TileHeight, - unit.GetReactRange(), MapUnmarkTileGuard); - } else { - CUnit *c = unit.Container; - if (c && c->Type->AttackFromTransporter) { - unit.GuardLock = 0; - MapSight(*unit.Player, c->tilePos, - c->Type->TileWidth, c->Type->TileHeight, - unit.GetReactRange(), MapUnmarkTileGuard); - } - } - } -} - void UnHideUnit(CUnit &unit) { - const int action = unit.CurrentAction(); - const bool mark_guard = (action == UnitActionStill || - action == UnitActionStandGround) && - unit.Variable[INVISIBLE_INDEX].Value > 0; unit.Variable[INVISIBLE_INDEX].Value = 0; - if (mark_guard) - { - MapMarkUnitGuard(unit); - } } /** @@ -195,7 +134,6 @@ static bool MoveRandomly(CUnit &unit) order->Range = 0; order->goalPos = pos; unit.State = 0; - MapUnmarkUnitGuard(unit); //return true;//TESTME: new localization } MarkUnitFieldFlags(unit); @@ -340,45 +278,6 @@ bool AutoAttack(CUnit &unit, bool stand_ground) return true; } -void AutoAttack(CUnit &unit, CUnitCache &targets, bool stand_ground) -{ - // Cowards and invisible units don't attack unless ordered. - if (unit.IsAgressive()) { - // Normal units react in reaction range. - if (!stand_ground && !unit.Removed && unit.CanMove()) { - CUnit *goal = AutoAttackUnitsInDistance(unit, unit.GetReactRange(), targets); - - if (goal) { - // Weak goal, can choose other unit, come back after attack - CommandAttack(unit, goal->tilePos, NULL, FlushCommands); - COrder *savedOrder = COrder::NewActionAttack(unit, unit.tilePos); - - if (unit.StoreOrder(savedOrder) == false) { - delete savedOrder; - } - } - // Removed units can only attack in AttackRange, from bunker - } else { - CUnit *goal = AutoAttackUnitsInDistance(unit, unit.Stats->Variables[ATTACKRANGE_INDEX].Max, targets); - - if (goal) { - CUnit *temp = unit.CurrentOrder()->GetGoal(); - if (temp && temp->CurrentAction() == UnitActionDie) { - unit.CurrentOrder()->ClearGoal(); - temp = NoUnitP; - } - if (unit.SubAction < SUB_STILL_ATTACK || temp != goal) { - // New target. - unit.CurrentOrder()->SetGoal(goal); - unit.State = 0; - unit.SubAction = SUB_STILL_ATTACK; // Mark attacking. - UnitHeadingFromDeltaXY(unit, goal->tilePos + goal->Type->GetHalfTileSize() - unit.tilePos); - } - } - } - } -} - /** @@ -401,7 +300,6 @@ void ActionStillGeneric(CUnit &unit, bool stand_ground) switch (unit.SubAction) { case SUB_STILL_INIT: //first entry - MapMarkUnitGuard(unit); unit.SubAction = SUB_STILL_STANDBY; // no break : follow case SUB_STILL_STANDBY: diff --git a/src/include/actions.h b/src/include/actions.h index a5b8430c3..e30c5cf46 100644 --- a/src/include/actions.h +++ b/src/include/actions.h @@ -535,7 +535,6 @@ extern void CommandSharedVision(int player, bool state, int opponent); extern void DropResource(CUnit &unit); extern void ResourceGiveUp(CUnit &unit); extern int GetNumWaitingWorkers(const CUnit &mine); -extern void AutoAttack(CUnit &unit, CUnitCache &targets, bool stand_ground); extern bool AutoAttack(CUnit &unit, bool stand_ground); extern bool AutoRepair(CUnit &unit); extern bool AutoCast(CUnit &unit); diff --git a/src/include/map.h b/src/include/map.h index 2fd5d64ab..476fd4499 100644 --- a/src/include/map.h +++ b/src/include/map.h @@ -581,9 +581,6 @@ void MapMarkUnitSight(CUnit &unit); /// Unmark on vision table the Sight of the unit. void MapUnmarkUnitSight(CUnit &unit); -void MapMarkUnitGuard(CUnit &unit); -void MapUnmarkUnitGuard(CUnit &unit); - /*---------------------------------------------------------------------------- -- Defines ----------------------------------------------------------------------------*/ diff --git a/src/include/player.h b/src/include/player.h index 4024deda8..77db44a6f 100644 --- a/src/include/player.h +++ b/src/include/player.h @@ -363,7 +363,6 @@ public: // Upgrades/Allows: CAllow Allow; /// Allowed for player CUpgradeTimers UpgradeTimers; /// Timer for the upgrades - CUnitCache AutoAttackTargets; /// Current know autoattack targets /// Change player side void SetSide(int side); diff --git a/src/include/tile.h b/src/include/tile.h index 5ccee3c36..de19582ff 100644 --- a/src/include/tile.h +++ b/src/include/tile.h @@ -151,7 +151,6 @@ public: #endif { memset(Visible, 0, sizeof(Visible)); - memset(Guard, 0, sizeof(Guard)); memset(VisCloak, 0, sizeof(VisCloak)); memset(Radar, 0, sizeof(Radar)); memset(RadarJammer, 0, sizeof(RadarJammer)); @@ -165,7 +164,6 @@ public: // different. unsigned char Value; /// HP for walls/ Wood Regeneration unsigned short Visible[PlayerMax]; /// Seen counter 0 unexplored - unsigned short Guard[PlayerMax]; /// Guard counter for autoatack: 0 unguarded unsigned char VisCloak[PlayerMax]; /// Visiblity for cloaking. unsigned char Radar[PlayerMax]; /// Visiblity for radar. unsigned char RadarJammer[PlayerMax]; /// Jamming capabilities. diff --git a/src/include/unit.h b/src/include/unit.h index 650d6aa5c..48eecbf47 100644 --- a/src/include/unit.h +++ b/src/include/unit.h @@ -531,7 +531,6 @@ public: unsigned Active : 1; /// Unit is active for AI unsigned Boarded : 1; /// Unit is on board a transporter. unsigned CacheLock : 1; /// Unit is on lock by unitcache operations. - unsigned GuardLock : 1; /// Unit is on lock by guard operations. /** set to random 1..100 when MakeUnit() ** used for fancy buildings diff --git a/src/stratagus/player.cpp b/src/stratagus/player.cpp index 90494d776..d465781db 100644 --- a/src/stratagus/player.cpp +++ b/src/stratagus/player.cpp @@ -269,30 +269,6 @@ void SavePlayers(CFile *file) } file->printf("}"); - if (p.AutoAttackTargets.size() > 0) { - - file->printf("\n \"enemy-targets\", {"); - - CUnitCache &autoatacktargets = const_cast<CUnitCache &>(p.AutoAttackTargets); - for(unsigned int k = 0; k < autoatacktargets.size();) - { - CUnit &aatarget = *autoatacktargets[k]; - - //Additional security - if (!aatarget.IsAliveOnMap() || - Map.Field(aatarget.tilePos)->Guard[i] == 0) { - autoatacktargets.Units.erase(autoatacktargets.Units.begin() + k); - aatarget.RefsDecrease(); - continue; - } - if (k) { - file->printf(" ,"); - } - file->printf("\"%s\"", UnitReference(aatarget).c_str()); - ++k; - } - file->printf("}"); - } file->printf(")\n\n"); } @@ -321,8 +297,6 @@ void CreatePlayer(int type) // FIXME: A: Johns: currently we need no init for the nobody player. memset(player.Units, 0, sizeof (player.Units)); - player.AutoAttackTargets.clear(); - // // Take first slot for person on this computer, // fill other with computer players. @@ -534,7 +508,6 @@ void CPlayer::Clear() TotalKills = 0; Color = 0; UpgradeTimers.Clear(); - AutoAttackTargets.clear(); } /*---------------------------------------------------------------------------- @@ -760,34 +733,10 @@ void PlayersInitAi() void PlayersEachCycle() { for (int player = 0; player < NumPlayers; ++player) { - CPlayer *p = &Players[player]; - if (p->AutoAttackTargets.size() > 0) { - CUnitCache &autoatacktargets = p->AutoAttackTargets; - /* both loops can not be connected !!!! */ - for (unsigned int i = 0; i < autoatacktargets.size();) { - CUnit *aatarget = autoatacktargets[i]; - if (!aatarget->IsAliveOnMap() || - Map.Field(aatarget->Offset)->Guard[player] == 0) { - autoatacktargets.Units.erase(autoatacktargets.Units.begin() + i); - aatarget->RefsDecrease(); - continue; - } - ++i; - } - if (autoatacktargets.size() > 0) { - for (int j = 0; j < p->TotalNumUnits; ++j) { - CUnit &guard = *p->Units[j]; - bool stand_ground = guard.CurrentAction() == UnitActionStandGround; - if (guard.Type->CanAttack && - (stand_ground || guard.IsIdle()) && - !guard.IsUnusable()) { - AutoAttack(guard, autoatacktargets, stand_ground); - } - } - } - } - if (p->AiEnabled) { - AiEachCycle(p); + CPlayer &p = Players[player]; +// AutoAttack(guard, autoatacktargets, stand_ground); + if (p.AiEnabled) { + AiEachCycle(&p); } } } diff --git a/src/stratagus/script_player.cpp b/src/stratagus/script_player.cpp index 157a0c84f..56f4bee52 100644 --- a/src/stratagus/script_player.cpp +++ b/src/stratagus/script_player.cpp @@ -361,17 +361,6 @@ static int CclPlayer(lua_State *l) player->UpgradeTimers.Upgrades[k] = LuaToNumber(l, -1); lua_pop(l, 1); } - } else if (!strcmp(value, "enemy-targets")) { - if (!lua_istable(l, j + 1)) { - LuaError(l, "incorrect argument"); - } - subargs = lua_objlen(l, j + 1); - for (k = 0; k < subargs; ++k) { - lua_rawgeti(l, j + 1, k + 1); - CclGetUnitFromRef(l); - player->AutoAttackTargets.Insert(CclGetUnitFromRef(l)); - lua_pop(l, 1); - } } else { LuaError(l, "Unsupported tag: %s" _C_ value); } diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index cecc041b6..76bae2385 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -747,10 +747,6 @@ static bool CommandKey(int key) return true; } -#if defined(DEBUG) || defined(PROF) -extern void MapUnmarkUnitGuard(CUnit &unit); -#endif - /** ** Handle cheats ** @@ -774,17 +770,6 @@ int HandleCheats(const std::string &input) SetMessage("Cannot disable 'ai me' cheat"); #endif } else { - - for (int j = 0; j < ThisPlayer->TotalNumUnits; ++j) { - CUnit *guard = ThisPlayer->Units[j]; - bool stand_ground = - guard->CurrentAction() == UnitActionStandGround; - if ((stand_ground || guard->IsIdle()) && - !guard->IsUnusable()) { - MapUnmarkUnitGuard(*guard); - guard->SubAction = 0; - } - } ThisPlayer->AiEnabled = 1; ThisPlayer->Type = PlayerComputer; if (!ThisPlayer->Ai) { diff --git a/src/unit/unit.cpp b/src/unit/unit.cpp index f7522209a..6808bdcf8 100644 --- a/src/unit/unit.cpp +++ b/src/unit/unit.cpp @@ -177,7 +177,6 @@ void CUnit::Init() Moving = 0; ReCast = 0; CacheLock = 0; - GuardLock = 0; memset(&Anim, 0, sizeof(Anim)); CurrentResource = 0; OrderFlush = 0; @@ -793,17 +792,6 @@ static void UnitInXY(CUnit &unit, const Vec2i &pos) unit.tilePos = pos; unit.Offset = Map.getIndex(pos); - if (!unit.Container) { - //Only Top Units - const CMapField *const mf = Map.Field(unit.Offset); - const CPlayer *const p = unit.Player; - for (int player = 0; player < NumPlayers; ++player) { - if(player != p->Index && mf->Guard[player] && p->IsEnemy(player)) { - Players[player].AutoAttackTargets.InsertS(&unit); - unit.RefsIncrease(); - } - } - } for (int i = unit.InsideCount; i--; unit_inside = unit_inside->NextContained) { UnitInXY(*unit_inside, pos); } @@ -843,7 +831,6 @@ void CUnit::Place(const Vec2i &pos) Assert(Removed); if (Container) { - MapUnmarkUnitGuard(*this); MapUnmarkUnitSight(*this); RemoveUnitFromContainer(*this); } @@ -908,7 +895,6 @@ void CUnit::Remove(CUnit *host) Map.Remove(*this); MapUnmarkUnitSight(*this); UnmarkUnitFieldFlags(*this); - MapUnmarkUnitGuard(*this); if (host) { AddInContainer(*host); @@ -1665,11 +1651,9 @@ void CUnit::ChangeOwner(CPlayer &newplayer) *PlayerSlot = this; MapUnmarkUnitSight(*this); - MapUnmarkUnitGuard(*this); Player = &newplayer; Stats = &Type->Stats[newplayer.Index]; UpdateUnitSightRange(*this); - MapMarkUnitGuard(*this); MapMarkUnitSight(*this); // Must change food/gold and other.