コード例 #1
0
        public void RemoveExtension(IslandElement IslandElement)
        {
            var element = Elements[IslandElement];

            element.Destroy();
            Elements.Remove(IslandElement);
        }
コード例 #2
0
 public override void Init(IslandElement IslandElement, IslandElementUnityStatsViewFactory IslandElementUnityStatsViewFactory)
 {
     drawLifeStats = false;
     elem          = IslandElement;
     fac           = IslandElementUnityStatsViewFactory;
     base.Init(IslandElement, IslandElementUnityStatsViewFactory);
 }
コード例 #3
0
        public void ExtendIslandElement(IslandElement IslandElement)
        {
            var element = new CollisionSizeManager(IslandElement, this);

            Elements.Add(IslandElement, element);
            IslandElement.ChangeSizeListeners.Add(element);
        }
コード例 #4
0
        public bool Update(IslandElement islandElement, float deltaTime)
        {
            if (!islandElement.CanUseMana)
            {
                return(true);
            }
            var island = islandElement.Island;

            if (island == null)
            {
                return(true);
            }
            totalActionTime += deltaTime;
            if (totalActionTime < 1f)
            {
                return(false);
            }
            islandElement.MagicController.RemoveMana(10);
            var team        = islandElement.TeamController.Team;
            var unitBuilder = island.WorldBuilder.uBuilder;
            var relativeToContainerPosition = islandElement.RelativeToContainerPosition + new Vector3(0.8f, 0, 0.8f);
            var fighter = unitBuilder.GetSpawnedFighter(islandElement, island, relativeToContainerPosition, team, isArcher);

            fighter.ActionHandler.SetNextCommand(new FollowAndProtectCommand(islandElement));
            fighter.SpawnController.SetSpawn(60);
            return(true);
        }
コード例 #5
0
        public void ExtendIslandElement(IslandElement IslandElement)
        {
            var element = new IslandElementHydrationController(IslandElement, this);

            Elements.Add(IslandElement, element);
            IslandElement.ChangeCanDehydrateListeners.Add(element);
        }
コード例 #6
0
 public void DestroyIslandElementSafe(IslandElement IslandElement)
 {
     if (elements.Contains(IslandElement))
     {
         DestroyIslandElement(IslandElement);
     }
 }
コード例 #7
0
 public override void Init(IslandElement IslandElement, IslandElementHydrationControllerFactory IslandElementHydrationControllerFactory)
 {
     IslandElement.HydrationController = this;
     this.elem = IslandElement;
     this.fac  = IslandElementHydrationControllerFactory;
     base.Init(IslandElement, IslandElementHydrationControllerFactory);
 }
コード例 #8
0
        public bool Update(IslandElement islandElement, float deltaTime)
        {
            var toAttack =
                islandElement.NearOthersController.GetNearElements()
                .Where(e => islandElement.TeamController.IsHostileTowards(e)).ToList();

            if (toAttack.Count == 0)
            {
                return(follow.Update(islandElement, deltaTime));
            }
            var closest = toAttack[0];

            for (int i = 1; i < toAttack.Count; i++)
            {
                var distance    = (toAttack[i].RelativeToContainerPosition - islandElement.RelativeToContainerPosition).sqrMagnitude;
                var oldDistance = (closest.RelativeToContainerPosition - islandElement.RelativeToContainerPosition).sqrMagnitude;
                if (distance < oldDistance)
                {
                    closest = toAttack[i];
                }
            }


            if (previousToAttack == closest)
            {
                attack.Update(islandElement, deltaTime);
                return(false);
            }
            previousToAttack = closest;
            attack           = new AttackAction(previousToAttack);
            return(false);
        }
コード例 #9
0
 public void AddIslandElement(IslandElement element)
 {
     if (element.NearOthersController.IsActive)
     {
         index.Add(element);
     }
 }
コード例 #10
0
        public void ExtendIslandElement(IslandElement IslandElement)
        {
            var element = new HarvestController(IslandElement, this);

            Elements.Add(IslandElement, element);
            IslandElement.ChangeHarvestControllerListeners.Add(element);
        }
コード例 #11
0
 public void RemoveIslandElement(IslandElement element)
 {
     if (element.NearOthersController.IsActive)
     {
         index.Remove(element);
     }
 }
コード例 #12
0
 public bool Update(IslandElement islandElement, float deltaTime)
 {
     if (!harvest && islandElement.ManaPoints < costMana)
     {
         return(true);
     }
     if (!islandElement.CanUseMana)
     {
         return(true);
     }
     if (islandElement.Island == null)
     {
         return(true);
     }
     if (!islandElement.Island.SizeController.CanRemoveByMagic())
     {
         return(true);
     }
     totalActionTime += deltaTime;
     if (totalActionTime < 1f)
     {
         return(false);
     }
     if (harvest)
     {
         islandElement.Island.SizeController.RemoveByMagic((1 + magmaLevel));
         islandElement.MagicController.AddMana(1);
         return(true);
     }
     islandElement.Island.SizeController.GiveByMagic(1 + magmaLevel);
     islandElement.MagicController.RemoveMana(1);
     return(true);
 }
コード例 #13
0
 public override void Init(IslandElement IslandElement, IslandElementSpawnControllerFactory IslandElementSpawnControllerFactory)
 {
     IslandElement.SpawnController = this;
     elem = IslandElement;
     base.Init(IslandElement, IslandElementSpawnControllerFactory);
     this.fac = IslandElementSpawnControllerFactory;
 }
コード例 #14
0
        public void ExtendIslandElement(IslandElement IslandElement)
        {
            var element = new NearOthersController(IslandElement, this);

            Elements.Add(IslandElement, element);
            IslandElement.ChangeRelativeToContainerPositionListeners.Add(element);
        }
コード例 #15
0
        public bool Update(IslandElement unit, float deltaTime)
        {
            if (unit.Island == null || Island == null)
            {
                return(true);
            }
            CurrentIslandRelativeGoalPosition = RelativePosition;
            if (this.Island != unit.Island)
            {
                SetGoalPositionTowardsOtherIsland(unit);
            }
            if (unit.RelativeGoalPosition != CurrentIslandRelativeGoalPosition || unit.HasRelativeGoalPosition == false)
            {
                unit.RelativeGoalPosition    = CurrentIslandRelativeGoalPosition;
                unit.HasRelativeGoalPosition = true;
            }
            unit.MovementController.Update(deltaTime, arrivedDistance);
            var onsame = this.Island == unit.Island;

            if (onsame)
            {
                return(onsame && !unit.HasRelativeGoalPosition);
            }
            return(onsame && !unit.HasRelativeGoalPosition);
        }
コード例 #16
0
 public override void Init(IslandElement IslandElement, InventoryControllerFactory InventoryControllerFactory)
 {
     base.Init(IslandElement, InventoryControllerFactory);
     this.IslandElement = IslandElement;
     this.IslandElement.InventoryController = this;
     UpdateView();
 }
コード例 #17
0
 public override void Init(IslandElement IslandElement, HarvestControllerFactory HarvestControllerFactory)
 {
     this.IslandElement = IslandElement;
     this.IslandElement.HarvestController = this;
     this.fac = HarvestControllerFactory;
     base.Init(IslandElement, HarvestControllerFactory);
 }
コード例 #18
0
 public void DestroyIslandElement(IslandElement IslandElement)
 {
     elements.Remove(IslandElement);
     foreach (var subFactory in SubFactories)
     {
         subFactory.RemoveExtension(IslandElement);
     }
 }
コード例 #19
0
 public void Attack(IslandElement other)
 {
     if (!CanAttackOther(other))
     {
         return;
     }
     other.FightingController.GetAttacked(AttackValue);
 }
コード例 #20
0
 public override void Init(IslandElement IslandElement,
                           IslandElementMagicControllerFactory IslandElementMagicControllerFactory)
 {
     IslandElement.MagicController = this;
     base.Init(IslandElement, IslandElementMagicControllerFactory);
     this._elem = IslandElement;
     DisableMagic();
 }
コード例 #21
0
 public void Harvest(float harvestEffort, IslandElement other)
 {
     if (harvestTactic == null)
     {
         return;
     }
     harvestTactic.Harvest(harvestEffort, other);
 }
コード例 #22
0
 public override void Init(IslandElement IslandElement, IslandElementLifeControllerFactory IslandElementLifeControllerFactory)
 {
     this.elem                = IslandElement;
     this.elem.LifePoints     = 10;
     this.elem.MaxLifePoints  = 10;
     this.elem.LifeController = this;
     this.elem.IsAlive        = true;
 }
コード例 #23
0
        public void ExtendIslandElement(IslandElement IslandElement)
        {
            var element = new IslandElementLightController(IslandElement, this);

            Elements.Add(IslandElement, element);
            IslandElement.ChangehasLightListeners.Add(element);
            IslandElement.ChangePositionListeners.Add(element);
        }
コード例 #24
0
 public List <IslandElement> GetElementsNear(IslandElement element)
 {
     return
         (index.GetElements(element.RelativeToContainerPosition)
          .Where(e => e != element)
          .Select(e => (IslandElement)e)
          .ToList());
 }
コード例 #25
0
        public void ExtendIslandElement(IslandElement IslandElement)
        {
            var element = new IslandElementContainerManager(IslandElement, this);

            Elements.Add(IslandElement, element);
            IslandElement.ChangeIslandToEnterListeners.Add(element);
            IslandElement.ChangeIslandPositionListeners.Add(element);
            IslandElement.ChangeRelativeToContainerPositionListeners.Add(element);
        }
コード例 #26
0
 public override void Init(IslandElement IslandElement, IslandElementFightingControllerFactory IslandElementFightingControllerFactory)
 {
     IslandElement.FightingController = this;
     DefenseValue = 1;
     this.DisableAttack();
     CanBeAttacked      = false;
     this.IslandElement = IslandElement;
     base.Init(IslandElement, IslandElementFightingControllerFactory);
 }
コード例 #27
0
        public bool IsCloseEnoughToAttack(IslandElement other)
        {
            var otherRadius = other.CircleElementProperties.Radius;
            var myRadius    = IslandElement.CircleElementProperties.Radius;

            var maxRange = otherRadius + myRadius + AttackRange * 0.1f + 0.1f;

            return(maxRange * maxRange > (other.Position - IslandElement.Position).sqrMagnitude);
        }
コード例 #28
0
        public void ExtendIslandElement(IslandElement IslandElement)
        {
            var element = new IslandElementActionHandler(IslandElement, this);

            Elements.Add(IslandElement, element);
            IslandElement.ChangeCurrentCommandListeners.Add(element);
            IslandElement.ChangeCurrentActionListeners.Add(element);
            IslandElement.ChangeCurrentLifeActionListeners.Add(element);
        }
コード例 #29
0
        void IHarvestControllerTactic.Harvest(float harvestEffort, IslandElement harvested)
        {
            var resources = harvested.HarvestController.GetHarvested(harvestEffort);

            if (!resources.Empty())
            {
                element.InventoryController.AddResources(resources);
            }
        }
コード例 #30
0
 public Vector3 MoveElementWithoutColliding(IslandElement islandElement, Vector3 oldPosition, Vector3 newPosition)
 {
     if (!CanMoveTowards(islandElement, oldPosition, newPosition))
     {
         newPosition = spaceIndex.GetElementPositionWithoutColliding(islandElement, oldPosition, newPosition);
     }
     MoveElement(islandElement, newPosition);
     return(newPosition);
 }