Exemple #1
0
        public override void Move(int time)
        {
            //Jesli zolnierz zyje.
            if (IsAlive)
            {
                int tileIndex = Mathematics.PositionToIndex(xPos);
                if (tileIndex != startPosition)
                {
                    leftBornTile = true;
                }
                if (canReEnter && //czy moze wejsc ponownie do bunkra.
                    (tileIndex != startPosition) && //jesli bunkier nie jest rodzicem.
                    IsBunker(tileIndex) && //jesli to jest bunkier.
                    (time % ProbabilityCoefficient == 0))    //losowosc.
                {
                    BunkerTile bunker = refToLevel.LevelTiles[tileIndex] as BunkerTile;
                    if (bunker.IsDestroyed && bunker.CanReconstruct)
                    {
                        bunker.Reconstruct();
                        refToLevel.Controller.OnTileRestored(bunker);
                    }
                    if (!bunker.IsDestroyed)
                    {
                        //dodaje zolnierza do bunkra.
                        bunker.AddGeneral();
                        //wyslam sygnal do controllera aby usunal zolnierza z widoku.
                        refToLevel.Controller.UnregisterSoldier(this);
                        //usuwam zolnierza z planszy.
                        _soldierStatus = SoldierStatus.InBunker;
                    }
                    else
                    {
                        ChangeLocation(time);
                    }
                }
                else
                {
                    ChangeLocation(time);
                }


                //sprawdza czy ulynal czas bezsmiertelnosci
                if (!canDie)
                {
                    protectedTime += time;
                    if (protectedTime >= TimeUnit)
                    {
                        canDie = true;
                    }
                }

                //sprawdza czy ponownie moze wejsc do bunkra.
                if (!canReEnter)
                {
                    homelessCounterTime += time;
                    if (homelessCounterTime >= GameConsts.Soldier.HomelessTime)
                    {
                        canReEnter = true;
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Zmienia pozycje zolnierza.
        /// </summary>
        /// <param name="time">Czas od ostatniego ruchu w milisekundach.</param>
        public virtual void Move(int time)
        {
            //Jesli zolnierz zyje.
            if (IsAlive)
            {
                int  tileIndex = Mathematics.PositionToIndex(xPos);
                bool isBunker  = IsBunker(tileIndex);

                if (tileIndex != startPosition)
                {
                    leftBornTile = true;
                }
                if (canReEnter && //czy moze wejsc ponownie do bunkra.
                    (tileIndex != startPosition) && //jesli bunkier nie jest rodzicem.
                    isBunker && //jesli to jest bunkier.
                    (time % ProbabilityCoefficient == 0))    //losowosc.
                {
                    BunkerTile bunker = refToLevel.LevelTiles[tileIndex] as BunkerTile;
                    if (bunker.IsDestroyed && bunker.CanReconstruct)
                    {
                        bunker.Reconstruct();
                        refToLevel.Controller.OnTileRestored(bunker);
                    }
                    if (!bunker.IsDestroyed && bunker.CanAddSoldier)
                    {
                        //dodaje zolnierza do bunkra.
                        bunker.AddSoldier();
                        //wyslam sygnal do controllera aby usunal zolnierza z widoku.
                        refToLevel.Controller.UnregisterSoldier(this);
                        //usuwam zolnierza z planszy.
                        ReturnToBunker();
                    }
                    else
                    {
                        ChangeLocation(time);
                    }
                }
                else
                {
                    // czy zolnierz moze strzelac?
                    if (!isBunker && canDie && ShouldFire && CanFire)
                    {
                        if (preparingToFireTime == 0)
                        {
                            // zolnierz zaczyna sie przygotowywać
                            refToLevel.Controller.OnSoldierPrepareToFire(this, firePrepareDelay);
                        }
                        preparingToFireTime += time;

                        if (preparingToFireTime >= firePrepareDelay)
                        {
                            Random r = new Random();
                            // strzal
                            preparingToFireTime = 0;
                            PointD dir = refToLevel.UserPlane.Position - Position;
                            dir.Normalise();
                            PointD moveVector = GameConsts.Rocket.BaseSpeed * RocketSpeedMultiplier * dir;
                            dir.X *= (moveVector.X >= 0) ? 1.0f : -1.0f;
                            float relative = dir.Angle;
                            lastFireTick = Environment.TickCount;
                            Rocket rocket = Weapon.RocketFire(relative, moveVector, bazookaRotationPerSecond);
                            rocket.MaxDistanceToOwner       *= RocketDistanceMultiplier * Mathematics.RangeRandom(0.8f, 1.2f);
                            rocket.MaxHeightDistanceToOwner *= RocketDistanceMultiplier * Mathematics.RangeRandom(0.8f, 1.2f);
                            // zmniejsz zasieg rakiet

                            refToLevel.Controller.OnSoldierEndPrepareToFire(this);
                        }
                    }
                    else if (!isBunker && canDie && CanFire)
                    {
                        // !ShouldFire -> samolot jest poza zasiegiem
                        if (preparingToFireTime > 0)
                        {
                            // wracamy do punktu wyjscia bez strzalu
                            preparingToFireTime = 0;
                            refToLevel.Controller.OnSoldierEndPrepareToFire(this);
                        }
                        else
                        {
                            ChangeLocation(time);
                        }
                    }
                    else
                    {
                        ChangeLocation(time);
                    }
                }


                //sprawdza czy ulynal czas bezsmiertelnosci
                if (!canDie)
                {
                    protectedTime += time;
                    if (protectedTime >= TimeUnit)
                    {
                        canDie = true;
                    }
                }

                //sprawdza czy ponownie moze wejsc do bunkra.
                if (!canReEnter)
                {
                    homelessCounterTime += time;
                    if (homelessCounterTime >= GameConsts.Soldier.HomelessTime)
                    {
                        canReEnter = true;
                    }
                }
            }
        }