Пример #1
0
 protected override void TraitEnabled(Actor self)
 {
     domainIndex = world.WorldActor.Trait <DomainIndex>();
     resLayer    = world.WorldActor.TraitOrDefault <ResourceLayer>();
     claimLayer  = world.WorldActor.TraitOrDefault <ResourceClaimLayer>();
     scanForIdleHarvestersTicks = Info.ScanForIdleHarvestersInterval;
 }
Пример #2
0
        public HackyAI(HackyAIInfo info, ActorInitializer init)
        {
            Info  = info;
            World = init.World;

            if (World.Type == WorldType.Editor)
            {
                return;
            }

            domainIndex = World.WorldActor.Trait <DomainIndex>();
            resLayer    = World.WorldActor.Trait <ResourceLayer>();
            territory   = World.WorldActor.TraitOrDefault <ResourceClaimLayer>();
            pathfinder  = World.WorldActor.Trait <IPathFinder>();

            isEnemyUnit = unit =>
                          Player.Stances[unit.Owner] == Stance.Enemy &&
                          !unit.Info.HasTraitInfo <HuskInfo>() &&
                          unit.Info.HasTraitInfo <ITargetableInfo>();

            unitCannotBeOrdered = a => a.Owner != Player || a.IsDead || !a.IsInWorld;

            foreach (var decision in info.PowerDecisions)
            {
                powerDecisions.Add(decision.OrderName, decision);
            }
        }
Пример #3
0
 public Freighter(Actor self, FreighterInfo info)
 {
     Info       = info;
     Contents   = new ReadOnlyDictionary <DrResourceTypeInfo, int>(contents);
     mobile     = self.Trait <Mobile>();
     resLayer   = self.World.WorldActor.Trait <ResourceLayer>();
     claimLayer = self.World.WorldActor.Trait <ResourceClaimLayer>();
 }
Пример #4
0
 public HarvestResource(Actor self)
 {
     harv      = self.Trait <Harvester>();
     harvInfo  = self.Info.Traits.Get <HarvesterInfo>();
     facing    = self.Trait <IFacing>();
     territory = self.World.WorldActor.TraitOrDefault <ResourceClaimLayer>();
     resLayer  = self.World.WorldActor.Trait <ResourceLayer>();
 }
Пример #5
0
 public HarvestResource(Actor self)
 {
     harv = self.Trait<Harvester>();
     harvInfo = self.Info.Traits.Get<HarvesterInfo>();
     facing = self.Trait<IFacing>();
     territory = self.World.WorldActor.TraitOrDefault<ResourceClaimLayer>();
     resLayer = self.World.WorldActor.Trait<ResourceLayer>();
 }
 public FindAndDeliverResources(Actor self, Actor deliverActor = null)
 {
     harv              = self.Trait <Harvester>();
     harvInfo          = self.Info.TraitInfo <HarvesterInfo>();
     mobile            = self.Trait <Mobile>();
     claimLayer        = self.World.WorldActor.Trait <ResourceClaimLayer>();
     this.deliverActor = deliverActor;
 }
Пример #7
0
 public SpawnerRefineryHarvest(Actor self)
 {
     harv          = self.Trait <SpawnerRefineryMaster>();
     harvInfo      = self.Info.TraitInfo <SpawnerRefineryMasterInfo>();
     claimLayer    = self.World.WorldActor.TraitOrDefault <ResourceClaimLayer>();
     pathFinder    = self.World.WorldActor.Trait <IPathFinder>();
     domainIndex   = self.World.WorldActor.Trait <DomainIndex>();
     lastScanRange = harvInfo.LongScanRadius;
 }
Пример #8
0
 public AIHarvesterManager(HackyAI ai, Player p)
 {
     this.ai     = ai;
     world       = p.World;
     pathfinder  = world.WorldActor.Trait <IPathFinder>();
     domainIndex = world.WorldActor.Trait <DomainIndex>();
     resLayer    = world.WorldActor.TraitOrDefault <ResourceLayer>();
     claimLayer  = world.WorldActor.TraitOrDefault <ResourceClaimLayer>();
 }
Пример #9
0
 public HarvestResource(Actor self)
 {
     harv       = self.Trait <Harvester>();
     harvInfo   = self.Info.TraitInfo <HarvesterInfo>();
     facing     = self.Trait <IFacing>();
     body       = self.Trait <BodyOrientation>();
     claimLayer = self.World.WorldActor.Trait <ResourceClaimLayer>();
     resLayer   = self.World.WorldActor.Trait <ResourceLayer>();
 }
 public DrFindAndDeliverResources(Actor self, Actor deliverActor = null)
 {
     harv              = self.Trait <Freighter>();
     harvInfo          = self.Info.TraitInfo <FreighterInfo>();
     mobile            = self.Trait <Mobile>();
     claimLayer        = self.World.WorldActor.Trait <ResourceClaimLayer>();
     pathFinder        = self.World.WorldActor.Trait <IPathFinder>();
     domainIndex       = self.World.WorldActor.Trait <DomainIndex>();
     this.deliverActor = deliverActor;
 }
Пример #11
0
 public SlaveMinerMasterHarvest(Actor self)
 {
     harv             = self.Trait <SlaveMinerMaster>();
     harvInfo         = self.Info.TraitInfo <SlaveMinerMasterInfo>();
     claimLayer       = self.World.WorldActor.TraitOrDefault <ResourceClaimLayer>();
     pathFinder       = self.World.WorldActor.Trait <IPathFinder>();
     domainIndex      = self.World.WorldActor.Trait <DomainIndex>();
     lastScanRange    = harvInfo.LongScanRadius;
     ChildHasPriority = false;
 }
Пример #12
0
 public FindResources(Actor self)
 {
     harv        = self.Trait <Harvester>();
     harvInfo    = self.Info.TraitInfo <HarvesterInfo>();
     mobile      = self.Trait <Mobile>();
     mobileInfo  = self.Info.TraitInfo <MobileInfo>();
     claimLayer  = self.World.WorldActor.Trait <ResourceClaimLayer>();
     pathFinder  = self.World.WorldActor.Trait <IPathFinder>();
     domainIndex = self.World.WorldActor.Trait <DomainIndex>();
 }
Пример #13
0
 public Sandworm(Actor self, SandwormInfo info)
     : base(self, info)
 {
     WormInfo    = info;
     mobile      = self.Trait <Mobile>();
     attackTrait = self.Trait <AttackBase>();
     //manager = self.World.WorldActor.Trait<ActorSpawnManager>();
     resLayer   = self.World.WorldActor.Trait <ResourceLayer>();
     claimLayer = self.World.WorldActor.Trait <ResourceClaimLayer>();
 }
Пример #14
0
 public FindResources(Actor self)
 {
     harv       = self.Trait <Harvester>();
     harvInfo   = self.Info.Traits.Get <HarvesterInfo>();
     mobile     = self.Trait <Mobile>();
     mobileInfo = self.Info.Traits.Get <MobileInfo>();
     resLayer   = self.World.WorldActor.Trait <ResourceLayer>();
     territory  = self.World.WorldActor.TraitOrDefault <ResourceClaimLayer>();
     pathFinder = self.World.WorldActor.Trait <IPathFinder>();
 }
Пример #15
0
 public FindResources(Actor self)
 {
     harv = self.Trait<Harvester>();
     harvInfo = self.Info.Traits.Get<HarvesterInfo>();
     mobile = self.Trait<Mobile>();
     mobileInfo = self.Info.Traits.Get<MobileInfo>();
     resLayer = self.World.WorldActor.Trait<ResourceLayer>();
     territory = self.World.WorldActor.TraitOrDefault<ResourceClaimLayer>();
     pathFinder = self.World.WorldActor.Trait<IPathFinder>();
 }
Пример #16
0
 public EatResource(Actor self, CPos targetcell)
 {
     harv            = self.Trait <Sandworm>();
     harvInfo        = self.Info.TraitInfo <SandwormInfo>();
     facing          = self.Trait <IFacing>();
     body            = self.Trait <BodyOrientation>();
     move            = self.Trait <IMove>();
     claimLayer      = self.World.WorldActor.Trait <ResourceClaimLayer>();
     resLayer        = self.World.WorldActor.Trait <ResourceLayer>();
     this.targetCell = targetcell;
 }
Пример #17
0
 public FindAndEatResources(Actor self, Actor deliverActor = null)
 {
     harv              = self.Trait <Sandworm>();
     harvInfo          = self.Info.TraitInfo <SandwormInfo>();
     mobile            = self.Trait <Mobile>();
     locomotorInfo     = mobile.Info.LocomotorInfo;
     claimLayer        = self.World.WorldActor.Trait <ResourceClaimLayer>();
     pathFinder        = self.World.WorldActor.Trait <IPathFinder>();
     domainIndex       = self.World.WorldActor.Trait <DomainIndex>();
     this.deliverActor = deliverActor;
 }
Пример #18
0
 public HarvestResource(Actor self, CPos targetCell)
 {
     harv                   = self.Trait <Harvester>();
     harvInfo               = self.Info.TraitInfo <HarvesterInfo>();
     facing                 = self.Trait <IFacing>();
     body                   = self.Trait <BodyOrientation>();
     move                   = self.Trait <IMove>();
     claimLayer             = self.World.WorldActor.Trait <ResourceClaimLayer>();
     resourceLayer          = self.World.WorldActor.Trait <IResourceLayer>();
     this.targetCell        = targetCell;
     notifyHarvesterActions = self.TraitsImplementing <INotifyHarvesterAction>().ToArray();
 }
Пример #19
0
 public SpawnerHarvesterHarvest(Actor self)
 {
     harv        = self.Trait <SpawnerHarvesterMaster>();
     harvInfo    = self.Info.TraitInfo <SpawnerHarvesterMasterInfo>();
     mobile      = self.Trait <Mobile>();
     mobileInfo  = self.Info.TraitInfo <MobileInfo>();
     deploy      = self.Trait <GrantConditionOnDeploy>();
     claimLayer  = self.World.WorldActor.TraitOrDefault <ResourceClaimLayer>();
     pathFinder  = self.World.WorldActor.Trait <IPathFinder>();
     domainIndex = self.World.WorldActor.Trait <DomainIndex>();
     tranforms   = self.Trait <Transforms>();
 }
Пример #20
0
        protected override void TraitEnabled(Actor self)
        {
            pathfinder  = world.WorldActor.Trait <IPathFinder>();
            domainIndex = world.WorldActor.Trait <DomainIndex>();
            resLayer    = world.WorldActor.TraitOrDefault <ResourceLayer>();
            claimLayer  = world.WorldActor.TraitOrDefault <ResourceClaimLayer>();

            // Avoid all AIs scanning for idle harvesters on the same tick, randomize their initial scan delay.
            scanForIdleHarvestersTicks = world.LocalRandom.Next(Info.ScanForIdleHarvestersInterval, Info.ScanForIdleHarvestersInterval * 2);

            scanForEnoughHarvestersTicks = Info.ProduceHarvestersInterval;
        }
Пример #21
0
        public HackyAI(HackyAIInfo info, ActorInitializer init)
        {
            Info  = info;
            World = init.World;

            domainIndex = World.WorldActor.Trait <DomainIndex>();
            resLayer    = World.WorldActor.TraitOrDefault <ResourceLayer>();
            claimLayer  = World.WorldActor.TraitOrDefault <ResourceClaimLayer>();
            pathfinder  = World.WorldActor.Trait <IPathFinder>();

            isEnemyUnit = unit =>
                          Player.Stances[unit.Owner] == Stance.Enemy &&
                          !unit.Info.HasTraitInfo <HuskInfo>() &&
                          unit.Info.HasTraitInfo <ITargetableInfo>();

            unitCannotBeOrdered = a => a.Owner != Player || a.IsDead || !a.IsInWorld;
        }
Пример #22
0
        public AutoDeployMinersBotModule(Actor self, AutoDeployMinersBotModuleInfo info)
            : base(info)
        {
            world  = self.World;
            player = self.Owner;

            resourceLayer = self.World.WorldActor.Trait <ResourceLayer>();
            claimLayer    = self.World.WorldActor.Trait <ResourceClaimLayer>();
            pathFinder    = self.World.WorldActor.Trait <IPathFinder>();
            domainIndex   = self.World.WorldActor.Trait <DomainIndex>();
            var resourceTypes = self.World.WorldActor.TraitsImplementing <ResourceType>().ToArray();
            var resourceType  = resourceTypes.FirstOrDefault(a =>
                                                             string.Equals(a.Info.Type, info.TargetResourceType, StringComparison.InvariantCultureIgnoreCase));

            if (resourceType == null)
            {
                throw new ArgumentException($"Couldn't find resource type: {info.TargetResourceType}");
            }
        }
Пример #23
0
        public static bool CanHarvestAt(this Actor self, CPos pos, ResourceLayer resLayer, HarvesterInfo harvInfo,
			ResourceClaimLayer territory)
        {
            var resType = resLayer.GetResource(pos);
            if (resType == null)
                return false;

            // Can the harvester collect this kind of resource?
            if (!harvInfo.Resources.Contains(resType.Info.Type))
                return false;

            if (territory != null)
            {
                // Another harvester has claimed this resource:
                ResourceClaim claim;
                if (territory.IsClaimedByAnyoneElse(self as Actor, pos, out claim))
                    return false;
            }

            return true;
        }
Пример #24
0
		public HackyAI(HackyAIInfo info, ActorInitializer init)
		{
			Info = info;
			World = init.World;

			if (World.Type == WorldType.Editor)
				return;

			domainIndex = World.WorldActor.Trait<DomainIndex>();
			resLayer = World.WorldActor.Trait<ResourceLayer>();
			territory = World.WorldActor.TraitOrDefault<ResourceClaimLayer>();
			pathfinder = World.WorldActor.Trait<IPathFinder>();

			isEnemyUnit = unit =>
				Player.Stances[unit.Owner] == Stance.Enemy
					&& !unit.Info.HasTraitInfo<HuskInfo>()
					&& unit.Info.HasTraitInfo<ITargetableInfo>();

			unitCannotBeOrdered = a => a.Owner != Player || a.IsDead || !a.IsInWorld;

			foreach (var decision in info.PowerDecisions)
				powerDecisions.Add(decision.OrderName, decision);
		}