Esempio n. 1
0
    public void GetDamage(int amount, ShipRoom targetRoom)
    {
        int trueDamage = statsSCR.GetDamage(amount);

        if (trueDamage > 0)
        {
            engineMng.GetDamageOnEngine(targetRoom.engine, trueDamage);
            GameObject[] chars = GameObject.FindGameObjectsWithTag("Character");
            foreach (GameObject myChar in chars)
            {
                if (Vector3.Distance(myChar.transform.position, targetRoom.roomPosition) < 0.45f)
                {
                    myChar.GetComponent<CharacterManager>().GetDamage(trueDamage);
                }
                else
                {
                    foreach (ShipCell cell in targetRoom.cells)
                    {
                        if (Vector3.Distance(myChar.transform.position, cell.position) < 0.45f)
                        {
                            myChar.GetComponent<CharacterManager>().GetDamage(trueDamage);
                        }
                    }
                }
            }
        }
    }
Esempio n. 2
0
    public void GetDamage(int amount, ShipRoom targetRoom)
    {
        int trueDamage = statsSCR.GetDamage(amount);

        if (trueDamage > 0)
        {
            engineMng.GetDamageOnEngine(targetRoom.engine, trueDamage);
            GameObject[] chars = GameObject.FindGameObjectsWithTag("Character");
            foreach (GameObject myChar in chars)
            {
                if (Vector3.Distance(myChar.transform.position, targetRoom.roomPosition) < 0.45f)
                {
                    myChar.GetComponent <CharacterManager>().GetDamage(trueDamage);
                }
                else
                {
                    foreach (ShipCell cell in targetRoom.cells)
                    {
                        if (Vector3.Distance(myChar.transform.position, cell.position) < 0.45f)
                        {
                            myChar.GetComponent <CharacterManager>().GetDamage(trueDamage);
                        }
                    }
                }
            }
        }
    }
Esempio n. 3
0
    public ShipCell SetCharacterPosition(GameObject character, bool ally, Vector3 targetPosition)
    {
        ShipRoom room = GetRoomByPos(targetPosition);

        if (room != null)
        {
            foreach (ShipCell cell in room.cells)
            {
                if (ally)
                {
                    if (cell.crew == null)
                    {
                        cell.crew = character;
                        return(cell);
                    }
                }
                else
                {
                    if (cell.enemy == null)
                    {
                        cell.enemy = character;
                        return(cell);
                    }
                }
            }
        }
        return(null);
    }
Esempio n. 4
0
 void HitOrMiss()
 {
     if (targetID == 0)
     {
         int flee = GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerStats>().flee;
         int rng  = Random.Range(0, 100);
         if (rng > flee)
         {
             ShipRoom targetedRoom = GameObject.FindGameObjectWithTag("Manager").GetComponent <ShipMap>().GetRoomByPos(targetPosition);
             GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerManager>().GetDamage(bulletDamage, targetedRoom);
             Instantiate(explosionGO, transform.position, Quaternion.identity);
             Destroy(gameObject);
         }
         else
         {
             GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerManager>().Flee();
             Instantiate(missText, transform.position, Quaternion.identity);
             Vector3 newTarget = (targetPosition - startPosition) * 100f;
             targetPosition = newTarget;
             //transform.position = Vector3.MoveTowards(transform.position, targetPosition, 0.1f * speed);
             StartCoroutine(WaitAndDestroy());
         }
     }
     else if (targetID == 1)
     {
         EnemyManager enemyMng = GameObject.FindGameObjectWithTag("Enemy").GetComponent <EnemyManager>();
         if (enemyMng == null)
         {
             return;
         }
         int enemyFlee = GameObject.FindGameObjectWithTag("Enemy").GetComponent <EnemyStats>().flee;
         int rng       = Random.Range(0, 100);
         if (rng > enemyFlee)
         {
             ShipRoom targetedRoom = GameObject.FindGameObjectWithTag("Manager").GetComponent <ShipMap>().GetRoomByPos(targetPosition);
             enemyMng.GetDamage(bulletDamage, targetedRoom);
             Instantiate(explosionGO, transform.position, Quaternion.identity);
             Destroy(gameObject);
         }
         else
         {
             Instantiate(missText, transform.position, Quaternion.identity);
             Vector3 newTarget = (targetPosition - startPosition) * 100f;
             targetPosition = newTarget;
             //transform.position = Vector3.MoveTowards(transform.position, targetPosition, 0.1f * speed);
             StartCoroutine(WaitAndDestroy());
         }
     }
     else
     {
         Destroy(gameObject);
     }
 }
Esempio n. 5
0
    void MagicTp()
    {
        aiLerp.ResetToDefault();
        ShipRoom rdmRoom = null;

        if (isAlly)
        {
            rdmRoom = mapSCR.GetRandomAllyRoom();
        }
        else
        {
            rdmRoom = mapSCR.GetRandomEnnemyRoom();
        }
        gameObject.transform.position = rdmRoom.roomPosition;
        MoveToNode(rdmRoom.roomPosition);
    }
Esempio n. 6
0
    IEnumerator RepairCoroutine()
    {
        while (true)
        {
            bool repairing = false;
            if (isMoving)
            {
                yield return(new WaitForSeconds(0.1f));

                continue;
            }
            if (isAlly)  // si allié et sur le ship allié
            {
                ShipRoom myRoom = globalMap.GetRoomByPos(transform.position);
                if (myRoom != null)
                {
                    if (myRoom.engine.currentHp < myRoom.engine.maxHp)
                    {
                        repairing = true;
                        myRoom.engine.Repair(repairPower + repairOpeLevel);
                        GainExp(Engine.engineType.repairModule);
                    }
                }
            }
            else // si pas allié et pas sur le ship allié
            {
                ShipRoom myRoom = globalMap.GetRoomByPos(transform.position);
                if (myRoom != null)
                {
                    if (myRoom.engine.currentHp < myRoom.engine.maxHp)
                    {
                        repairing = true;
                        myRoom.engine.Repair(repairPower + repairOpeLevel);
                    }
                }
            }
            if (repairing)
            {
                isRepairing = true;
            }
            else
            {
                isRepairing = false;
            }
            yield return(new WaitForSeconds(0.1f));
        }
    }
Esempio n. 7
0
    public void GetDamage(int amount, ShipRoom targetRoom)
    {
        int trueDamage = playerStats.GetTrueDamage(amount);

        if (playerStats.maxHealth2 > 0)
        {
            Engine repairEngine = engineMng.GetEngine(Engine.engineType.repair);
            if (repairEngine.operated)
            {
                if (repairEngine.operatedBy != null)
                {
                    repairEngine.operatedBy.GetComponent <CharacterManager>().GainExp(Engine.engineType.repair);
                }
            }
        }
        if (trueDamage > 0)
        {
            engineMng.GetDamageOnEngine(targetRoom.engine, trueDamage);
            GameObject[] chars = GameObject.FindGameObjectsWithTag("Character");
            foreach (GameObject myChar in chars)
            {
                if (Vector3.Distance(myChar.transform.position, targetRoom.roomPosition) < 0.45f)
                {
                    myChar.GetComponent <CharacterManager>().GetDamage(trueDamage);
                }
                else
                {
                    foreach (ShipCell cell in targetRoom.cells)
                    {
                        if (Vector3.Distance(myChar.transform.position, cell.position) < 0.45f)
                        {
                            myChar.GetComponent <CharacterManager>().GetDamage(trueDamage);
                        }
                    }
                }
            }
        }
    }
Esempio n. 8
0
 IEnumerator UseWeaponCRT(int weaponIndex, int mapIndex)
 {
     weapons[weaponIndex].weaponFireCoroutine = true;
     while (true)
     {
         if (weapons[weaponIndex].initialized)
         {
             if (weapons[weaponIndex].weaponPwr > 0)
             {
                 if (weapons[weaponIndex].weaponItem.itemCurrentCD >= weapons[weaponIndex].weaponItem.itemCD && weapons[weaponIndex].weaponPwr > 0)
                 {
                     ShipRoom aimedRoom = globalMap.GetRandomAllyRoom();
                     if (mapIndex == 0)
                     {
                         displayMng.Fire(weaponIndex, aimedRoom.roomPosition, weapons[weaponIndex].weaponItem.itemDamage);
                         weapons[weaponIndex].weaponItem.itemCurrentCD = 0;
                     }
                 }
             }
         }
         yield return(new WaitForSeconds(0.02f));
     }
 }
Esempio n. 9
0
    public ShipCell IsRoomEmpty(Vector3 targetPos, bool ally)
    {
        ShipRoom myRoom = GetRoomByPos(targetPos);

        foreach (ShipCell cell in myRoom.cells)
        {
            if (ally)
            {
                if (cell.crew == null)
                {
                    return(cell);
                }
            }
            else
            {
                if (cell.enemy == null)
                {
                    return(cell);
                }
            }
        }
        return(null);
    }
Esempio n. 10
0
 public void GetDamage(int amount, ShipRoom targetRoom)
 {
     int trueDamage = playerStats.GetTrueDamage(amount);
     if(playerStats.maxHealth2 > 0)
     {
         Engine repairEngine = engineMng.GetEngine(Engine.engineType.repair);
         if (repairEngine.operated)
         {
             if (repairEngine.operatedBy != null)
             {
                 repairEngine.operatedBy.GetComponent<CharacterManager>().GainExp(Engine.engineType.repair);
             }
         }
     }
     if (trueDamage > 0)
     {
         engineMng.GetDamageOnEngine(targetRoom.engine, trueDamage);
         GameObject[] chars = GameObject.FindGameObjectsWithTag("Character");
         foreach (GameObject myChar in chars)
         {
             if (Vector3.Distance(myChar.transform.position, targetRoom.roomPosition) < 0.45f)
             {
                 myChar.GetComponent<CharacterManager>().GetDamage(trueDamage);
             }
             else
             {
                 foreach (ShipCell cell in targetRoom.cells)
                 {
                     if (Vector3.Distance(myChar.transform.position, cell.position) < 0.45f)
                     {
                         myChar.GetComponent<CharacterManager>().GetDamage(trueDamage);
                     }
                 }
             }
         }
     }
 }
Esempio n. 11
0
 /**
  * changes the state of a room, given the room and the status to modify
  */
 public void SetRoomStatus(ShipRoom room, bool occupied)
 {
     RoomStatus[room] = occupied;
 }
Esempio n. 12
0
    /**
     * updates the health of the given room
     */
    public void UpdateRoomHealth(ShipRoom room, float health)
    {
        //clamp room health [ 0, 1.0 ]
        health = Mathf.Max(Mathf.Min(1f, health), 0f);

        switch (room)
        {
        case ShipRoom.COMMUNICATIONS:

            //the communications room is either disabled or enabled
            health = Mathf.Round(health);

            if (health == 0f)
            {
                // TODO DISABLE COMMUNICATIONS ROOM
            }
            else
            {
                // TODO enable communications room
            }

            break;


        case ShipRoom.CONTROL:

            //nothing to do here

            break;


        case ShipRoom.WEAPON:

            //nothing to do here

            break;


        case ShipRoom.POWER:

            //nothing to do here

            break;


        case ShipRoom.ENGINE:

            //nothing to do here

            break;


        case ShipRoom.STORAGE:

            if (health == 0f)
            {
                GameOver = true;
            }

            break;
        }

        //store the new health of the given room into the dictionary
        roomHealth[room] = health;
    }
Esempio n. 13
0
    /**
     * updates the health of the given room
     */
    public void UpdateRoomHealth( ShipRoom room, float health )
    {
        //clamp room health [ 0, 1.0 ]
        health = Mathf.Max( Mathf.Min ( 1f, health ), 0f );

        switch( room )
        {
        case ShipRoom.COMMUNICATIONS:

            //the communications room is either disabled or enabled
            health = Mathf.Round( health );

            if( health == 0f )
            {
                // TODO DISABLE COMMUNICATIONS ROOM
            }
            else
            {
                // TODO enable communications room
            }

            break;

        case ShipRoom.CONTROL:

            //nothing to do here

            break;

        case ShipRoom.WEAPON:

            //nothing to do here

            break;

        case ShipRoom.POWER:

            //nothing to do here

            break;

        case ShipRoom.ENGINE:

            //nothing to do here

            break;

        case ShipRoom.STORAGE:

            if( health == 0f ) GameOver = true;

            break;
        }

        //store the new health of the given room into the dictionary
        roomHealth[ room ] = health;
    }
Esempio n. 14
0
 /**
  * changes the state of a room, given the room and the status to modify
  */
 public void SetRoomStatus(ShipRoom room, bool occupied)
 {
     RoomStatus[room] = occupied;
 }
Esempio n. 15
0
    IEnumerator CrewPositionManagement()
    {
        while (true)
        {
            yield return(new WaitForSeconds(0.1f));

            if (mapScr == null)
            {
                continue;
            }
            // Si un personnage est dans une salle, update sa priority à celle actuelle de la salle
            foreach (Crew2 crew2 in crew2List)
            {
                ShipCell playerCell = crew2.crew.GetComponent <CharacterManager>().playerCell;
                if (playerCell != null)
                {
                    ShipRoom playerRoom = mapScr.GetRoomByPos(playerCell.position);
                    if (playerRoom != null)
                    {
                        Engine myEng = playerRoom.engine;
                        if (myEng != null)
                        {
                            foreach (Engine2 eng2 in eng2List)
                            {
                                if (eng2.engine == myEng)
                                {
                                    crew2.priority = eng2.priority;
                                }
                            }
                        }
                    }
                }
            }
            yield return(new WaitForSeconds(0.1f));

            foreach (Crew2 crew2 in crew2List)
            {
                CharacterManager charMng   = crew2.crew.GetComponent <CharacterManager>();
                float            HpPercent = (charMng.currentHp * 100) / (float)charMng.maxHp;
                if (HpPercent < 40)
                {
                    if (!crew2.isHealing)
                    {
                        crew2.isHealing = true;
                        Vector3 tempPos = mapScr.GetEnginePos(Engine.engineType.medic, false);
                        crew2.crew.GetComponent <PlayerMovement>().MoveToNode(tempPos);
                    }
                }
                else
                {
                    crew2.isHealing = false;
                }
            }
            // Si un salle est endommagée, change sa priority
            foreach (Engine2 eng2 in eng2List)
            {
                if (eng2.engine.currentHp < eng2.engine.maxHp)
                {
                    eng2.priority = 0;
                }
                else
                {
                    eng2.priority = eng2.basePriority;
                }
            }
            yield return(new WaitForSeconds(0.1f));

            // envoi tous les personnages dans les salles par priorité
            foreach (Engine2 eng2 in eng2List)
            {
                Crew2    crewToMove  = GetLowestPriorityMember();
                Vector3  engPosition = mapScr.GetEnginePos(eng2.engine.engine, false);
                ShipRoom room        = mapScr.GetRoomByPos(engPosition);
                bool     emptyRoom   = true;
                foreach (ShipCell cell in room.cells)
                {
                    if (cell.enemy != null)
                    {
                        emptyRoom = false;
                    }
                }
                if (crewToMove != null)
                {
                    if (eng2.priority < crewToMove.priority && emptyRoom)
                    {
                        crewToMove.crew.GetComponent <PlayerMovement>().MoveToNode(engPosition);
                        crewToMove.priority = eng2.priority;
                    }
                }
            }
        }
    }