Fix botmodules querying the Player actor before it is assigned.

This commit is contained in:
matjaeck
2019-11-02 10:39:00 +01:00
committed by reaperrr
parent a74235bdbc
commit 5ac9d2c2f1
6 changed files with 55 additions and 14 deletions

View File

@@ -76,9 +76,17 @@ namespace OpenRA.Mods.Common.Traits
unitCannotBeOrdered = a => a.Owner != self.Owner || a.IsDead || !a.IsInWorld;
}
protected override void Created(Actor self)
{
// Special case handling is required for the Player actor.
// Created is called before Player.PlayerActor is assigned,
// so we must query player traits from self, which refers
// for bot modules always to the Player actor.
requestUnitProduction = self.TraitsImplementing<IBotRequestUnitProduction>().ToArray();
}
protected override void TraitEnabled(Actor self)
{
requestUnitProduction = player.PlayerActor.TraitsImplementing<IBotRequestUnitProduction>().ToArray();
pathfinder = world.WorldActor.Trait<IPathFinder>();
domainIndex = world.WorldActor.Trait<DomainIndex>();
resLayer = world.WorldActor.TraitOrDefault<ResourceLayer>();