Пример #1
0
        private bool ShouldCalculatePath(DroidNode node)
        {
            TransformComponent transformComponent = node.Droid.Target.Get <TransformComponent>();

            if (transformComponent == null)
            {
                return(false);
            }
            PathingComponent pathingComponent = node.Entity.Get <PathingComponent>();

            if (pathingComponent == null)
            {
                return(false);
            }
            Path currentPath = pathingComponent.CurrentPath;

            if (currentPath == null)
            {
                return(false);
            }
            if (currentPath.TurnCount == 0)
            {
                return(false);
            }
            BoardCell turn = currentPath.GetTurn(currentPath.TurnCount - 1);
            int       num  = turn.X - transformComponent.X;
            int       num2 = turn.Z - transformComponent.Z;

            return(num < -1 || num > transformComponent.BoardWidth || num2 < -1 || num2 > transformComponent.BoardDepth);
        }
Пример #2
0
        public void ShowAllDroids()
        {
            NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>();

            for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next)
            {
                droidNode.Entity.Get <GameObjectViewComponent>().MainGameObject.SetActive(true);
                this.AssignDroidPath(droidNode);
            }
        }
Пример #3
0
        private void DestroyAllDroids()
        {
            List <DroidNode>     list     = new List <DroidNode>();
            NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>();

            for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next)
            {
                list.Add(droidNode);
            }
            for (int i = list.Count - 1; i >= 0; i--)
            {
                this.DestroyDroid(list[i]);
            }
        }
Пример #4
0
        private Entity FindIdleDroid(CivilianTypeVO droidType)
        {
            Entity droidHut = this.GetDroidHut();
            NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>();

            for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next)
            {
                if (droidNode.Droid.Target == droidHut || droidNode.Droid.Target == null)
                {
                    return(droidNode.Entity);
                }
            }
            return(this.CreateDroid(droidType));
        }
Пример #5
0
        private void RemoveWorkFromDroid(Entity building, bool hasScaffolding)
        {
            NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>();

            for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next)
            {
                if (droidNode.Droid.Target == building)
                {
                    droidNode.Droid.AnimateTravel = true;
                    droidNode.Droid.Target        = this.GetDroidHut();
                    droidNode.State.CurState      = EntityState.Moving;
                    this.AssignDroidPath(droidNode);
                    break;
                }
            }
        }
Пример #6
0
        protected override void Update(float dt)
        {
            Entity    droidHut = this.droidController.GetDroidHut();
            DroidNode next;

            for (DroidNode droidNode = this.nodeList.Head; droidNode != null; droidNode = next)
            {
                next = droidNode.Next;
                if (droidNode.State.Dirty && droidNode.State.CurState == EntityState.Moving)
                {
                    this.droidController.AssignDroidPath(droidNode);
                }
                if (droidNode.State.CurState == EntityState.Idle)
                {
                    if (droidNode.Droid.Target != null)
                    {
                        droidNode.State.CurState = EntityState.Moving;
                        this.droidController.AssignDroidPath(droidNode);
                    }
                }
                else if (droidNode.State.CurState == EntityState.Moving)
                {
                    if (this.droidController.UpdateDroidTransform(droidNode, dt))
                    {
                        if (droidNode.Droid.Target == droidHut)
                        {
                            droidNode.State.CurState = EntityState.CoolingDown;
                            this.droidController.DestroyDroid(droidNode);
                        }
                        else
                        {
                            droidNode.State.CurState = EntityState.Attacking;
                            droidNode.Droid.Delay    = (float)Service.Rand.ViewRangeInt(1, 4) * 3.033f;
                        }
                    }
                }
                else if (droidNode.State.CurState == EntityState.CoolingDown || droidNode.State.CurState == EntityState.Attacking)
                {
                    droidNode.Droid.Delay -= dt;
                    if (droidNode.Droid.Delay <= 0f)
                    {
                        droidNode.State.CurState = EntityState.Moving;
                        this.droidController.AssignDroidPath(droidNode);
                    }
                }
            }
        }
Пример #7
0
        public void HideAllNonClearableDroids()
        {
            List <DroidNode>     list     = new List <DroidNode>();
            NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>();

            for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next)
            {
                BuildingType type = droidNode.Droid.Target.Get <BuildingComponent>().BuildingType.Type;
                if (type != BuildingType.Clearable)
                {
                    list.Add(droidNode);
                }
            }
            for (int i = list.Count - 1; i >= 0; i--)
            {
                list[i].Entity.Get <GameObjectViewComponent>().MainGameObject.SetActive(false);
            }
        }
Пример #8
0
 public bool UpdateDroidTransform(DroidNode droid, float dt)
 {
     if (droid != null && droid.IsValid() && droid.Entity != null)
     {
         PathingComponent pathingComponent = droid.Entity.Get <PathingComponent>();
         if (pathingComponent != null)
         {
             if ((ulong)pathingComponent.TimeOnSegment > (ulong)((long)pathingComponent.TimeToMove) && this.ShouldCalculatePath(droid))
             {
                 droid.State.CurState = EntityState.Moving;
                 this.AssignDroidPath(droid);
                 return(false);
             }
             return(pathingComponent.CurrentPath == null);
         }
     }
     return(false);
 }
Пример #9
0
 public void AssignDroidPath(DroidNode droid)
 {
     if (droid != null && droid.IsValid())
     {
         int                x = droid.Transform.X;
         int                z = droid.Transform.Z;
         BoardController    boardController = Service.BoardController;
         BoardCell          startCell       = boardController.Board.GetCellAt(x, z);
         SmartEntity        smartEntity     = (SmartEntity)droid.Droid.Target;
         TransformComponent transformComp   = smartEntity.TransformComp;
         if (transformComp == null)
         {
             return;
         }
         int num  = transformComp.X - 1;
         int num2 = transformComp.Z - 1;
         int num3 = Service.Rand.ViewRangeInt(0, transformComp.BoardWidth + transformComp.BoardDepth + 1);
         if (num3 <= transformComp.BoardWidth)
         {
             num += num3;
         }
         else
         {
             num2 += num3 - transformComp.BoardWidth;
         }
         BoardCell cellAt = boardController.Board.GetCellAt(num, num2);
         if (!droid.Droid.AnimateTravel)
         {
             startCell = cellAt;
         }
         if (cellAt != null)
         {
             Service.PathingManager.StartPathingWorkerOrPatrol((SmartEntity)droid.Entity, smartEntity, startCell, cellAt, droid.Size.Width, true);
         }
         droid.Droid.AnimateTravel = true;
     }
 }
Пример #10
0
 public void DestroyDroid(DroidNode droid)
 {
     Service.EntityFactory.DestroyEntity(droid.Entity, true, false);
 }