internal void DeploySecurity(EnemyProgram enemy, DungeonTile dungeonTile)
 {
     enemy.SetTile(dungeonTile);
     enemy.transform.position = dungeonTile.GetOccupyingCoordinates(enemy.IsFlying(), false);
     enemyPrograms.Add(enemy);
     dungeonTile.Occupy(enemy);
 }
Beispiel #2
0
    private void Consume(EnemyProgram consumeTarget, List <DungeonTile> tempPath)
    {
        DungeonManager.instance.Wait();
        Essence newEssence = Instantiate(myEssence, consumeTarget.transform.position, Quaternion.identity).GetComponent <Essence>();

        newEssence.Harvest(consumeTarget);
        newEssence.SetCourse(tempPath, this);
        Invoke("AttemptConsume", consumeIntervalTime);
    }
    internal List <EnemyProgram> GenerateEnemies(Vector3Int[] enemySpawns)
    {
        List <EnemyProgram> enemies = new List <EnemyProgram>();

        foreach (Vector3Int spawn in enemySpawns)
        {
            EnemyProgram newProgram = Instantiate(enemyPrefabs[spawn.y]).GetComponent <EnemyProgram>();
            enemies.Add(newProgram);
            DungeonManager.instance.DeploySecurity(newProgram, tileGrid[spawn.x][spawn.z]);
        }
        return(enemies);
    }
    internal void DeployReinforcement(GameObject reinforcement)
    {
        DungeonTile  targetTile = SelectRandomAdjacentTile(myTile);
        EnemyProgram newEnemy   = Instantiate(reinforcement).GetComponent <EnemyProgram>();

        if (targetTile != null && newEnemy != null)
        {
            DungeonManager.instance.DeploySecurity(newEnemy, targetTile);
            newEnemy.InitializeReinforcement();
        }
        else
        {
            Destroy(newEnemy.gameObject);
        }
    }
Beispiel #5
0
 internal void SelectConsumeTarget()
 {
     consumeTarget = null;
     foreach (EnemyProgram program in DungeonManager.instance.GetAIControlledPrograms())
     {
         if (CanSee(program))
         {
             if (program != this && (!consumeTarget || (DungeonManager.instance.grid.TileDistance(program.myTile, myTile) < DungeonManager.instance.grid.TileDistance(consumeTarget.myTile, myTile))))
             {
                 consumeTarget = program;
                 Debug.Log("Consume Target selected");
             }
         }
     }
 }
Beispiel #6
0
 internal void Harvest(EnemyProgram consumeTarget)
 {
     if (consumeTarget.basePower > 0 && consumeTarget.basePower > consumeTarget.baseSpeed)
     {
         consumeTarget.basePower--;
         power++;
     }
     else if (consumeTarget.baseSpeed > 0)
     {
         consumeTarget.baseSpeed--;
         speed++;
     }
     consumeTarget.Damage(1);
     size++;
 }