示例#1
0
    public void SpawnEnemy(float nrOfCollums, float nrOfRows, string enemyType, int health, int power, int shootTime)
    {
        float collum     = 30f / nrOfCollums;
        float row        = 18f / nrOfRows;
        float spaceShipZ = -2f;
        float distance   = 50f;

        if (enemyType == "LaserEnemy")
        {
            currentEnemy = enemy[0];
        }
        else if (enemyType == "RocketEnemy")
        {
            currentEnemy = enemy[1];
        }
        else if (enemyType == "FireEnemy")
        {
            currentEnemy = enemy[2];
        }
        for (float j = row * 2 + spaceShipZ; j <= 18; j += row)
        {
            for (float i = collum / 2; i <= 30; i += collum)
            {
                Vector3    enemyCoordonates = new Vector3(i, 0f, j);
                LaserEnemy Enemy            = Instantiate(currentEnemy, new Vector3(i - distance, 0, j), Quaternion.identity).GetComponent <LaserEnemy>();
                Enemy.Initialize(health, power, shootTime, enemyCoordonates);
                enemiesAlive++;
                enemyinGame.Add(Enemy.gameObject); // new
            }
            distance -= 10f;
        }
    }
示例#2
0
 public ChargeAttack(StateMachineClassic sm, IChargeAttack attack, Transform owner, Transform objective, Transform castAttackPoint, LaserEnemy laserInstantiator) : base(sm)
 {
     this.attack            = attack;
     this.owner             = owner;
     this.objective         = objective;
     this.castAttackPoint   = castAttackPoint;
     this.laserInstantiator = laserInstantiator;
 }
 private void Update()
 {
     if (Input.GetKeyDown(KeyCode.Return))
     {
         for (int i = 0; i < number_of_spawners; i++)
         {
             LaserEnemy script = laser_enemies[i].GetComponent <LaserEnemy>();
             script.moveToAttackPoint();
         }
     }
 }
        public EnemyBullet[] GetBullets(LaserEnemy host)
        {
            float hostRotation  = host.RotationDegrees;
            float hostWidthHalf = host.WidthHalf;

            var ret         = base.GetBullets();
            var laserBullet = (LaserEnemyBullet)ret[0];

            laserBullet.SpawnPoint      = host.transform.position;
            laserBullet.RotationDegrees = hostRotation;

            float   laserWidthHalf = laserBullet.WidthHalf;
            float   length         = hostWidthHalf + laserWidthHalf;
            Vector3 positionOffset = MathUtil.Vector3AtDegreeAngle(host.RotationDegrees, length);

            laserBullet.transform.position = host.transform.position + positionOffset;

            return(ret);
        }
    /// <summary>
    /// Establece los puntos de aparicion de los enemigos laser basado en las
    /// dimensiones de la pantalla y la cantidad de enemigos disponibles.
    /// </summary>
    void setSpawnPoints()
    {
        laser_enemies = new GameObject[number_of_spawners];

        int segment   = Mathf.RoundToInt(rect_width / number_of_spawners);
        int mid_point = Mathf.RoundToInt(segment / 2);

        for (int i = 0; i < number_of_spawners; i++)
        {
            laser_enemies[i] = (GameObject)(Instantiate(laser_enemy_prefab));
            LaserEnemy script = laser_enemies[i].GetComponent <LaserEnemy>();

            Vector3 pos     = new Vector3(mid_point + segment * i, rect_height, 0f);
            Vector3 new_pos = Camera.main.ScreenToWorldPoint(pos);

            // Inicializacion de la instancia del enemigo laser
            script.setSpawnPoint(
                new_pos,
                rect_height / 2 + pixel_height_offset,
                rect_height / screen_height_divider + pixel_height_offset
                );
        }
    }
示例#6
0
        /// <summary>
        /// act on key sets to move player and shoot
        /// </summary>
        private void Move()
        {
            //For gunSprite
            Vector2 aimPos    = GM.inputM.MouseLocation;
            Vector2 direction = aimPos - Position2D;

            direction = Vector2.Normalize(direction);
            RotationHelper.FaceDirection(gunSprite, direction, DirectionAccuracy.free, 0);
            gunSprite.Position2D = Position2D + (direction * 15);
            Vector2 currentPosition = Position2D;

            //For console
            if (GM.inputM.KeyPressed(Keys.C))
            {
                debugMode = true;
            }
            if (debugMode == true)
            {
                GM.textM.Draw(FontBank.arcadePixel, "Debug", GM.screenSize.Left + 175, GM.screenSize.Top + 40, TextAtt.TopLeft);

                if (GM.inputM.KeyPressed(Keys.F5))
                {
                    LaserEnemy laserEnemy = new LaserEnemy(GM.inputM.MouseLocation, false);
                }
                if (GM.inputM.KeyPressed(Keys.F12))
                {
                    GameSetup.EnemySpawnSystem.Kill();
                }
            }

            //For dodging
            Vector3 d = new Vector3(0, 0, 0);

            if (tiBoostDelay == null || tiBoostDelay.ElapsedSoFar > 0.25f)
            {
                if (GM.inputM.KeyDown(MoveLeft))
                {
                    d += Vector3.Left;
                }
                if (GM.inputM.KeyDown(MoveRight))
                {
                    d += Vector3.Right;
                }
                if (GM.inputM.KeyDown(Forward))
                {
                    d += Vector3.Down;
                }
                if (GM.inputM.KeyDown(Backward))
                {
                    d += Vector3.Up;
                }
                if (d == new Vector3(0, 0, 0))
                {
                    RotationHelper.FaceDirection(this, Vector3.Down, DirectionAccuracy.free, 0);
                }
                else
                {
                    RotationHelper.FaceDirection(this, d, DirectionAccuracy.free, 0);
                    RotationHelper.VelocityInCurrentDirection(this, 500, 0);
                }
            }

            //For directionSprite
            Vector3 dNorm = d;

            dNorm.Normalize();
            RotationHelper.FaceDirection(directionSprite, dNorm, DirectionAccuracy.free, 0);
            directionSprite.Position = Position + (dNorm * 20);

            //For firing
            if ((GM.inputM.KeyDown(Fire) || GM.inputM.MouseLeftButtonHeld()) && GM.eventM.Elapsed(tiFireCooldown))
            {
                //create bullet and pass reference to player and angle
                new Bullet(this, aimPos, 1500f, 10);
            }

            if (GM.inputM.KeyDown(SpecialFire) && (tiSpecialFireCooldown == null || GM.eventM.Elapsed(tiSpecialFireCooldown)))
            {
                for (int i = 0; i < 360; i += 5)
                {
                    Vector3 v3ShootAngle = RotationHelper.MyDirection(this, i);
                    Vector2 v2ShootAngle = new Vector2(v3ShootAngle.X, v3ShootAngle.Y);

                    RotationHelper.Direction2DFromAngle(i, 0);

                    //create bullet and pass reference to player and angle
                    new Bullet(this, Position2D + v2ShootAngle, 750, 50);
                }

                for (int i = 0; i < 360; i += 10)
                {
                    Vector3 v3ShootAngle = RotationHelper.MyDirection(this, i);
                    Vector2 v2ShootAngle = new Vector2(v3ShootAngle.X, v3ShootAngle.Y);

                    RotationHelper.Direction2DFromAngle(i, 0);

                    //create bullet and pass reference to player and angle
                    new Bullet(this, Position2D + v2ShootAngle, 500, 50);
                }

                if (tiSpecialFireCooldown == null)
                {
                    GM.eventM.AddTimer(tiSpecialFireCooldown = new Event(10f, "Special Fire Cooldown"));
                }
            }

            //For boosting
            if (GM.inputM.KeyPressed(Boost) && (tiBoostDelay == null || GM.eventM.Elapsed(tiBoostDelay)) && d != Vector3.Zero)
            {
                if (tiBoostDelay == null)
                {
                    GM.eventM.AddTimer(tiBoostDelay = new Event(0.5f, "dodge delay"));
                }

                //Raycasting to check for collisions and offset to avoid collision
                //Position += d * 100;
                //Ray findHits = new Ray(Position, d);

                Friction     = 0f;
                Velocity    += dNorm * 800;
                invulnerable = true;
                Wash         = Color.LightGreen;
            }

            //Resetting dodge delay for displaying
            if (tiBoostDelay != null && tiBoostDelay.ElapsedSoFar > 0.25f)
            {
                Friction     = 10f;
                invulnerable = false;
                Wash         = Color.LimeGreen;
            }

            //Locking sequence
            if (GM.inputM.MouseRightButtonPressed())
            {
                lockSprite.Visible = true;

                attack = null;
                float bestDistance = int.MaxValue;

                foreach (Sprite s in GM.engineM.SpriteList)
                {
                    if (s is Enemy)
                    {
                        if (attack == null || Vector2.DistanceSquared(aimPos, s.Centre2D) < bestDistance)
                        {
                            attack       = s;
                            bestDistance = Vector2.DistanceSquared(aimPos, s.Centre2D);
                        }
                    }
                }
                if (attack != null)
                {
                    lockSprite.Position2D = attack.Position2D;
                }
            }

            if (GM.inputM.MouseRightButtonHeld() && GM.eventM.Elapsed(tiLockingDelay) && attack != null)
            {
                GM.eventM.AddEventRaiseOnce(beepCountDown = new Event(0.25f, "Beep Countdown"));
                float graphicsLockAmount = lockAmount / 4;
                Color color = new Color();
                if (lockAmount < 1)
                {
                    lockAmount += tiLockingDelay.Interval * 4;
                    lockSprite.RotationAngle = 360 * graphicsLockAmount;
                    color.R = (byte)(250 * lockAmount);
                    color.B = (byte)(255 - color.R);
                }
                else
                {
                    lockSprite.RotationAngle = 0;
                    color.R = (byte)(255);
                    color.B = (byte)(0);
                }
                if (GM.eventM.Elapsed(beepCountDown))
                {
                    //Beep sound effect
                }

                lockSprite.Position2D = attack.Position2D;
                lockSprite.ScaleBoth  = 1.5f + (1 - lockAmount);
                lockSprite.Wash       = color;
            }

            if (GM.inputM.MouseRightButtonReleased())
            {
                if (lockAmount >= 1 && (tiAltFireCooldown == null || GM.eventM.Elapsed(tiAltFireCooldown)))
                {
                    FireMissile(attack);
                }
                lockSprite.Visible = false;
                lockAmount         = 0;
            }
        }
示例#7
0
 public LaserEnemyModel(LaserEnemyView view, Transform owner, List <ANode> availableNodes, float speed, List <Transform> patrolWaypoints, bool patrolLoop, Transform objective, float distArroundPlayer, Laser attack, Transform castPoint, LaserEnemy entity)
 {
     _view         = view;
     _stateMachine = new StateMachineClassic();
     _stateMachine.AddState(new MyPatrolState(_stateMachine, owner, speed, patrolWaypoints, patrolLoop));
     _stateMachine.AddState(new MoveNearObjective(_stateMachine, availableNodes, owner, objective, distArroundPlayer, speed));
     _stateMachine.AddState(new ChargeAttack(_stateMachine, attack, owner, objective, castPoint, entity));
 }