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); } } } } } }
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); } } } } } }
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); }
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); } }
void MagicTp() { aiLerp.ResetToDefault(); ShipRoom rdmRoom = null; if (isAlly) { rdmRoom = mapSCR.GetRandomAllyRoom(); } else { rdmRoom = mapSCR.GetRandomEnnemyRoom(); } gameObject.transform.position = rdmRoom.roomPosition; MoveToNode(rdmRoom.roomPosition); }
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)); } }
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); } } } } } }
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)); } }
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); }
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); } } } } } }
/** * changes the state of a room, given the room and the status to modify */ public void SetRoomStatus(ShipRoom room, bool occupied) { RoomStatus[room] = occupied; }
/** * 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; }
/** * 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; }
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; } } } } }