EndPost() public méthode

Mark either "post" queue of commands as ready to be displayed
public EndPost ( ) : void
Résultat void
Exemple #1
0
        public void Move(Wizard self, World world, Game game, Move move)
        {
#if DEBUG
            // один раз вызвать Begin*()
            vc.BeginPost();
#endif
            move.Speed       = game.WizardForwardSpeed;
            move.StrafeSpeed = game.WizardStrafeSpeed;
            move.Turn        = game.WizardMaxTurnAngle;
            move.Action      = ActionType.MagicMissile;
#if DEBUG
            // вывод отладочной информации
            vc.Text(self.X - 35, self.Y - 37, string.Format("{0:D} | {1:F0} : {2:F0}", self.RemainingCooldownTicksByAction[(int)ActionType.MagicMissile], self.X, self.Y));
            vc.Line(self.X, self.Y, self.X + Math.Cos(self.Angle - game.StaffSector / 2f) * self.CastRange, self.Y + Math.Sin(self.Angle - game.StaffSector / 2f) * self.CastRange, 1f, 0.7f, 0.7f);
            vc.Line(self.X, self.Y, self.X + Math.Cos(self.Angle + game.StaffSector / 2f) * self.CastRange, self.Y + Math.Sin(self.Angle + game.StaffSector / 2f) * self.CastRange, 1f, 0.7f, 0.7f);
            vc.Arc(self.X, self.Y, self.CastRange, self.Angle - game.StaffSector / 2f, game.StaffSector, 1f, 0.7f, 0.7f);
#endif
            move.Turn   = 0.01;
            move.Speed  = 3;
            move.Action = ActionType.MagicMissile;
#if DEBUG
            // в конце вызвать End*()
            vc.EndPost();
#endif
        }
Exemple #2
0
        public void Move(Wizard self, World world, Game game, Move move)
        {
            #region
            //1. Стратегическая составляющая.
            //Это выбор стратегии для всех участников (если мы - верховный)
            //Выбор стратегии из пожеланий верховного
            //Это выбор актуальной стратегии на данный момент
            //(рашить или обороняться, где именно рашить, куда отступать и т.д.)
            //по каим-то иипирическим коэффициентам учитывает:
            //количество врагов (и их уровень/здоровье)
            //колчество союзников (и их уровень/здоровье)
            //перспективность прорыва
            //критичность обороны
            //расстояние до этой точки
            //наличие близких бонусов
            // и т.д.
            //Выдает координаты (или точку), куда двигаться нашему магу (и союзным магам, если мы - верховный)
            //Ответственный - Литвинов Михаил

            //2. Прокладка маршрута до точки из стратегической составляющей
            //Берем текущие наши координаты и желаемые координаты (из стратегической сост).
            //Учитывая деревья, врагов и союзников, прокладываем оптимальный маршрут до точки назначения.
            //Работает до какого-то порога расстояния (если мы дальше порогового значения).

            //3. Тактическая составляющая
            //Поведение нашего мага в приоритетной зоне:
            //атака крипов или магов противника
            //атака на башню противника
            //тактическое отступление за спины союзников
            //выбор типа атаки
            //подбор бонуса
            //уворачивание от стрел противника
            //принятие стрелы соперника в себя, защита союзника
            //подсвет башням
            //и т.д.
            //Здесь необходимо просчитывать физику наперед
            //Здесь может быть полезно использовать генетические алгопритмы и другие приемы ИИ
            //Ответственный - Ткаченко Сергей

            //4. Просчет вариантов прокачки
            //Учитывание пожеланий верховного
            //Выбор пожеланий для прокачки всех союзников (если мы - верховный)
            //


            //5. Выполнение действий
            //Это может быть регулятор
            //Это выполнение атак
            //и т.д.
            #endregion

            if (world.TickIndex < 1)
            {
                setVisual();
            }

            if (vc != null)
            {
                vc.BeginPre();
                vc.FillRect(0, 0, 500, 500, 1.0f, 0.0f, 1.0f);
                vc.FillRect(3500, 3500, 4000, 4000, 1.0f, 1.0f, 0.0f);
                vc.FillRect(1650, 1650, 2350, 2350, 1.0f, 0.0f, 1.0f);
                vc.EndPre();
                vc.BeginPost(); //начинаем отрисовку поверх всех объектов локал-раннера
                string str = Convert.ToString(self.X) + " : " + Convert.ToString(self.Y);
                vc.Text(self.X, self.Y, str, 0.0f, 0.0f, 1.0f);
            }
            if (game.IsSkillsEnabled == true)
            {
                if (self.Level != oldLevel)
                {
                    move.SkillToLearn = myStrat.getSkill(move, self);
                }
            }

            hotZone = myStrat.getHotZone(world, game, self);
            //myStrat.getHotZone2(world, game, self, vc);
            if (vc != null)
            {
                if (hotZone != null)
                {
                    vc.Line(self.X, self.Y, hotZone.getX(), hotZone.getY(), 1.0f, 0.0f, 0.0f);
                }

                vc.Circle(self.X, self.Y, HOT_ZONE_POROG, 1.0f, 1.0f, 0.0f);
                vc.Circle(self.X, self.Y, ENEMY_POROG, 1.0f, 0.0f, 1.0f);
                List <LinePoint> MapPoint = myTracer.getPointMap(world);
                foreach (LinePoint LP in MapPoint)
                {
                    vc.FillCircle(LP.X, LP.Y, 5, 0.0f, 1.0f, 0.0f);
                    //string str = Convert.ToString(LP.X)+" : " + Convert.ToString(LP.Y);
                    //vc.Text(LP.X, LP.Y, str, 0.0f, 0.0f, 1.0f);
                }
            }
            int    CD = self.RemainingCooldownTicksByAction[2];
            double nearestTargetDistance = myTactic.getNearestTargetDistance(world, self);
            if (world.TickIndex > game.FactionMinionAppearanceIntervalTicks * 0.75D)
            {
                if /*((nearestTargetDistance<ENEMY_POROG*0.9D || (nearestTargetDistance < ENEMY_POROG && CD<10) || self.GetDistanceTo(hotZone.getX(), hotZone.getY()) < HOT_ZONE_POROG)&&*/ (!myTactic.TacticIsAll(world, self, game))//)
                {
                    myTactic.getTacticMove(world, game, self, move);
                    if (vc != null)
                    {
                        vc.Text(self.X, self.Y + 50, "TACTIC", 0.0f, 0.0f, 1.0f);
                    }
                }
                else
                {
                    if (vc == null)
                    {
                        myTracer.goTo(hotZone, world, game, self, move);
                    }
                    else
                    {
                        myTracer.goToVisual(hotZone, world, game, self, move, vc);

                        vc.Text(self.X, self.Y + 50, "TRACER", 0.0f, 0.0f, 1.0f);
                    }
                }
            }

            /*if(nearestTargetDistance < ENEMY_POROG-50 ||(isTactic && nearestTargetDistance < ENEMY_POROG) || self.GetDistanceTo(hotZone.getX(), hotZone.getY()) < HOT_ZONE_POROG)
             * {
             *  myTactic.getTacticMove(world, game, self, move);
             *  if (vc != null) vc.Text(self.X, self.Y + 50, "TACTIC", 0.0f, 0.0f, 1.0f);
             *  isTactic = true;
             * } else
             * {
             *  if (vc == null)
             *  {
             *      myTracer.goTo(hotZone, world, game, self, move);
             *  } else
             *  {
             *      myTracer.goToVisual(hotZone, world, game, self, move, vc);
             *
             *      vc.Text(self.X, self.Y + 50, "TRACER", 0.0f, 0.0f, 1.0f);
             *  }
             *  isTactic = false;
             * }*/

            //вызываем метод getHotZone у объекта-стратегии

            if (vc != null)
            {
                vc.EndPost();          //заканчиваем отрисовку
            }
            oldLevel = self.Level;
        }