예제 #1
0
파일: Alien.cs 프로젝트: Annuvian/Game-Jam
 // Start is called before the first frame update
 void Start()
 {
     if (transform.position.y == 4.6f)
     {
         myspawner = GameObject.Find("Alien Spawner");
     }
     else if (transform.position.y == 3.5f)
     {
         myspawner = GameObject.Find("Alien Spawner (1)");
     }
     else if (transform.position.y == 2.4f)
     {
         myspawner = GameObject.Find("Alien Spawner (2)");
     }
     else if (transform.position.y == 1.3f)
     {
         myspawner = GameObject.Find("Alien Spawner (3)");
     }
     else if (transform.position.y == 0.2f)
     {
         myspawner = GameObject.Find("Alien Spawner (4)");
     }
     spawner = myspawner.GetComponent <AlienSpawner>();
     speed   = Random.Range(1f, 5f);
     xPos    = transform.position.x;
     if (xPos < leftLimit)
     {
         left = true;
     }
     else
     {
         left = false;
     }
 }
예제 #2
0
    public void ActivateAlienSpawner()
    {
        alienSpawnerObject = GameObject.Find("AlienSpawner");
        AlienSpawner alienSpawner = alienSpawnerObject.GetComponent <AlienSpawner>();

        alienSpawner.SetPanelHeightBottom(panelHeightBottom);
        alienSpawner.startSpawning = true;
    }
예제 #3
0
 void AlienWaveButton()
 {
     GUI.enabled = true;
     if (GUILayout.Button("Send Alien Wave", ButtonStyle, GUILayout.Height(75)))
     {
         AlienSpawner.BeginInvasion();
     }
 }
예제 #4
0
        private void SpawnAliens()
        {
            var cornerOffset = ALIEN_TILE_SPAWN_RADIUS + 2; // spacing from walls
            var corners      = new List <Tuple <int, int> > {
                new Tuple <int, int>(cornerOffset, cornerOffset),
                new Tuple <int, int>(Constants.MAP_TILES_WIDE - cornerOffset, cornerOffset),
                new Tuple <int, int>(Constants.MAP_TILES_WIDE - cornerOffset, Constants.MAP_TILES_HIGH - cornerOffset),
                new Tuple <int, int>(cornerOffset, Constants.MAP_TILES_HIGH - cornerOffset),
            };

            var spawnPoints = corners.OrderBy(r => random.Next()).Take(2);

            //// Spawning aliens works on a points system: 12n-ish points on wave n, xarlins are one point, etc.
            // We have a hard limit of 25 (5x5) aliens per spawn-point. if we hit the limit but still have
            // more points left to use, um, do nothing for now.
            foreach (var spawnPoint in spawnPoints)
            {
                var pointsLeft = this.CurrentWaveNumber * ALIEN_POINTS_PER_WAVE;

                var minX       = spawnPoint.Item1;
                var minY       = spawnPoint.Item2;
                var maxX       = spawnPoint.Item1 + 5;
                var maxY       = spawnPoint.Item2 + 5;
                var iterations = 0;

                while (pointsLeft > 0 && iterations++ < 1000)
                {
                    var x = random.Next(minX, maxX);
                    var y = random.Next(minY, maxY);

                    if (x >= 0 && y >= 0 && x < this.width && y < this.height && this.isWalkable[x, y] &&
                        (this.Player.TileX != x && this.Player.TileY != y))
                    {
                        var alienThere = this.Aliens.SingleOrDefault(a => a.TileX == x && a.TileY == y);
                        IEnumerable <KeyValuePair <string, int> > possibilities;
                        possibilities = this.alienCostPoints.Where(kvp => kvp.Value <= pointsLeft);

                        // Picked a spot with an alien. Probably because we've used all valid locations but have points left.
                        if (alienThere != null)
                        {
                            possibilities = possibilities.Where(kvp => kvp.Value > alienCostPoints[alienThere.Name]);
                        }

                        // Make sure they don't spawn too early
                        possibilities = possibilities.Where(kvp => this.alienMinimumWave[kvp.Key] <= this.CurrentWaveNumber);
                        if (possibilities.Any())
                        {
                            var alien = possibilities.ElementAt(random.Next(possibilities.Count())).Key;
                            this.Aliens.Add(AlienSpawner.Spawn(alien, x, y));
                            pointsLeft -= this.alienCostPoints[alien];
                            this.Aliens.Remove(alienThere); // No points refund, sorry mate.
                        }
                    }
                }
            }
        }
예제 #5
0
 public bool TakeDamage(int amount = 1)
 {
     Health -= amount;
     if (Health <= 0)
     {
         ExplosionSound.Play();
         AlienSpawner.RemovAlien(gameObject);
         return(false);
     }
     UpdateHealthbar();
     return(true);
 }
    // Use this for initialization
    void Start()
    {
        _spriteRenderer = GetComponent <SpriteRenderer>();
        _rigidBody      = GetComponent <Rigidbody2D>();
        alienSpawner    = GameObject.FindObjectOfType <AlienSpawner>();

        StartCoroutine(CycleAlienSpriteImage());

        fireRate = fireRate + Random.Range(minFR, maxFR);

        movement            = new Vector3(1, 0);
        _rigidBody.velocity = movement * moveSpeed;
    }
예제 #7
0
 public void SendAlienWave()
 {
     AlienSpawner.BeginInvasion();
 }