Пример #1
0
        public void CurrentQueueTroopMove()
        {
            if (this.CurrentTroop != null)
            {
                this.TroopMoveThread(this.CurrentTroop);

                /*Thread thread;
                *
                *  thread = new Thread(new ThreadStart(this.CurrentTroop.Move));
                *  thread.Start();
                *  thread.Join();*/

                if (this.CurrentTroop.StepNotFinished || (this.CurrentTroop.MovabilityLeft <= 0))
                {
                    if (!this.CurrentTroop.OperationDone)
                    {
                        this.troopQueue.Enqueue(this.CurrentTroop);
                    }
                    this.CurrentTroop = null;
                }
            }
            else if (!this.CheckAmbushList())
            {
                Queue <Troop> queue = new Queue <Troop>();
                if ((this.CurrentQueue.Count == 0) && (this.troopQueue.Count > 0))
                {
                    this.CurrentQueue.Enqueue(this.troopQueue.Dequeue());
                }
                while (this.CurrentQueue.Count > 0)
                {
                    Troop item = this.CurrentQueue.Dequeue();
                    if (!item.Destroyed)
                    {
                        if (item.mingling == "待命")
                        {
                            item.OperationDone = true;
                            break;
                        }

                        if (item.Destroyed ||
                            (item.Status != TroopStatus.一般 && item.Status != TroopStatus.伪报 && item.Status != TroopStatus.挑衅))
                        {
                            item.MovabilityLeft = -1;
                            item.OperationDone  = true;
                        }

                        if (Session.Current.Scenario.IsPlayer(item.BelongedFaction))
                        {
                            if (!(item.HasToDoCombatAction || !item.ToDoCombatAction()))
                            {
                                item.HasToDoCombatAction = true;
                                this.CurrentQueue.Enqueue(item);
                                break;
                            }
                            if (item.HasToDoCombatAction)
                            {
                                item.HasToDoCombatAction = false;
                                item.DoCombatAction();
                                this.CurrentQueue.Enqueue(item);
                                break;
                            }
                            if (this.troopQueue.Count > 0)
                            {
                                this.CurrentQueue.Enqueue(this.troopQueue.Dequeue());
                            }

                            if (item.MovabilityLeft > 0)
                            {
                                this.TroopChangeRealDestination(item);
                                this.TroopMoveThread(item);
                            }
                        }
                        else
                        {
                            if (!item.Destroyed)
                            {
                                if (item.MovabilityLeft > 0)
                                {
                                    this.TroopChangeRealDestination(item);
                                    this.TroopMoveThread(item);
                                }

                                if (item.MovabilityLeft <= 0)
                                {
                                    if (!item.HasToDoCombatAction && item.ToDoCombatAction())
                                    {
                                        item.HasToDoCombatAction = true;
                                        this.CurrentQueue.Enqueue(item);
                                        break;
                                    }
                                    if (item.HasToDoCombatAction)
                                    {
                                        item.HasToDoCombatAction = false;
                                        item.DoCombatAction();
                                        this.CurrentQueue.Enqueue(item);
                                        break;
                                    }
                                }
                            }
                        }

                        if (item.Destroyed ||
                            (item.Status != TroopStatus.一般 && item.Status != TroopStatus.伪报 && item.Status != TroopStatus.挑衅))
                        {
                            item.MovabilityLeft = -1;
                            item.OperationDone  = true;
                        }

                        if ((!item.OperationDone && item.OffenceOnlyBeforeMove) && (item.Position != item.PreviousPosition))
                        {
                            item.OperationDone = true;
                        }
                        if ((!item.StepNotFinished || item.chongshemubiaoweizhibiaoji) && item.MovabilityLeft >= 0)
                        {
                            this.CurrentTroop = item;
                            break;
                        }
                        if (!this.queueEnded)
                        {
                            if (item.MovabilityLeft > 0)
                            {
                                item.WaitOnce = true;
                                queue.Enqueue(item);
                            }
                            else if (!(item.OperationDone || item.QueueEnded))
                            {
                                queue.Enqueue(item);
                            }
                        }
                    }
                }
                while (queue.Count > 0)
                {
                    this.troopQueue.Enqueue(queue.Dequeue());
                }
                if (!this.queueEnded && this.TotallyEmpty)
                {
                    this.queueEnded = true;
                    TroopList list = new TroopList();
                    foreach (Troop troop2 in base.GameObjects)
                    {
                        if (troop2.QueueEnded)
                        {
                            list.Add(troop2);
                        }
                    }
                    foreach (Troop troop2 in list.GetRandomList())
                    {
                        this.troopQueue.Enqueue(troop2);
                    }
                }
            }
        }