void OnTriggerEnter2D(Collider2D col) { if (this.tag == "RangeCollider" && col.tag == "BodyCollider") { if (this.transform.parent.tag != col.transform.parent.tag) { Character_Network character = GetComponentInParent <Character_Network> (); Character_Network enemyChar = col.GetComponentInParent <Character_Network> (); Base enemyBase = col.GetComponentInParent <Base>(); if (character != null) { if (enemyChar != null) { character.targets.Add(enemyChar.gameObject); if (character.target == null) { character.target = enemyChar.gameObject; } } else if (enemyBase != null) { character.targets.Add(enemyBase.gameObject); if (character.target == null) { character.target = enemyBase.gameObject; } } } } } }
void CmdSpawn(int characterId, bool isPlayer1) { Character_Network character = null; if (characters[characterId] != null) { character = characters[characterId]; } else { Debug.LogError("Character ID not found!"); return; } if (isPlayer1) { Character_Network c = Instantiate(character, SpawnManager_Network.instance.base1.transform); c.transform.position = SpawnManager_Network.instance.base1.transform.position + SpawnManager_Network.instance.spawnOffsetFromBase; NetworkServer.Spawn(c.gameObject); RpcSetCharacterTag(c.gameObject, true); } else { Character_Network c = Instantiate(character, SpawnManager_Network.instance.base2.transform); c.transform.position = new Vector3(SpawnManager_Network.instance.base2.transform.position.x - SpawnManager_Network.instance.spawnOffsetFromBase.x, SpawnManager_Network.instance.base2.transform.position.y + SpawnManager_Network.instance.spawnOffsetFromBase.y, SpawnManager_Network.instance.base2.transform.position.z + SpawnManager_Network.instance.spawnOffsetFromBase.z); NetworkServer.Spawn(c.gameObject); RpcSetCharacterTag(c.gameObject, false); } TargetSpendMana(connectionToClient, characterId); }
public bool CanSpawn(Character_Network character) { if (freeSpawn) { return(true); } if (character == null) { Debug.LogWarning("Trying to spawn a null reference Character!"); return(false); } Mana_Network targetMana = null; foreach (Mana_Network mana in allManas) { if (mana.manaType == character.type) { targetMana = mana; break; } } if (targetMana != null && character.manaCost <= targetMana.manaPoints) { return(true); } return(false); }
void TargetSpendMana(NetworkConnection conn, int characterId) { Character_Network character = null; if (characters[characterId] != null) { character = characters[characterId]; } else { Debug.LogError("Character ID not found!"); return; } Mana_Network targetMana = Mana_Network.GetMana(character.type, SpawnManager_Network.instance.allManas); if (targetMana != null) { targetMana.SpendMana(character.manaCost); } else { Debug.LogError("TargetMana reference not found!"); } }
public void Spawn(int characterId) { Character_Network character = null; if (characters[characterId] != null) { character = characters[characterId]; } else { Debug.LogError("Character ID not found!"); return; } if (SpawnManager_Network.instance.CanSpawn(character)) { if (isServer) { CmdSpawn(characterId, true); } else { CmdSpawn(characterId, false); } } else { Debug.LogWarning("Cannot spawn this character!"); } }
IEnumerator DamageColorChange(GameObject target) { if (target == null) { Debug.LogError("Target not found!"); } Character_Network c = target.GetComponent <Character_Network>(); Base b = target.GetComponent <Base>(); if (c != null) { c.spriteRend.color = Color.red; yield return(new WaitForSeconds(0.5f)); c.spriteRend.color = c.spriteDefaultColor; } else if (b != null) { b.spriteRend.color = Color.red; yield return(new WaitForSeconds(0.5f)); b.spriteRend.color = b.spriteDefaultColor; } else { Debug.LogError("Target not found!"); } }
IEnumerator Attack(Character_Network enemyChar) { attackCoroutineIsActive = true; if (enemyChar != null) { while (this.dead == false && enemyChar.dead == false) { animator.SetBool("Attacking", true); animator.SetFloat("Attack_Speed", attackSpeed); yield return(new WaitForSeconds(1f / attackSpeed / 2)); RpcPlayAttackSound(); Damage(enemyChar); yield return(new WaitForSeconds(1f / attackSpeed / 2)); } } if (this.dead == false) { targets.Remove(target); target = null; attackCoroutineIsActive = false; animator.SetBool("Attacking", false); Move(); } }
void UpdateHealthBar(Character_Network enemyChar) { if (enemyChar != null) { float v = enemyChar.health / enemyChar.maxHealth; enemyChar.healthBar.value = v; RpcUpdateHealthBar(enemyChar.gameObject, v); } }
void FixedUpdate() { if (isServer == false) { return; } if (moving) { Move(); } else { Stop(); } if (dead) { Stop(); target = null; targets.Clear(); } if (target != null && !attackCoroutineIsActive) { if (moving) { Stop(); } Character_Network enemyChar = target.GetComponent <Character_Network>(); Base enemyBase = target.GetComponent <Base>(); if (enemyChar != null) { StartCoroutine(Attack(enemyChar)); } else if (enemyBase != null) { StartCoroutine(Attack(enemyBase)); } } else if (targets.Count > 0) { target = targets [0]; } }
void Damage(Character_Network enemyChar) { if (enemyChar != null && enemyChar != dead) { enemyChar.health -= this.strength; UpdateHealthBar(enemyChar); if (enemyChar.health <= 0) { enemyChar.dead = true; StartCoroutine(Kill(enemyChar)); } RpcDamageColorChange(enemyChar.gameObject); } }
IEnumerator Kill(Character_Network enemyChar) { if (enemyChar != null) { enemyChar.animator.SetBool("Dead", true); enemyChar.rangeCollider.enabled = false; enemyChar.bodyCollider.enabled = false; enemyChar.healthBar.gameObject.SetActive(false); } yield return(new WaitForSeconds(2f)); if (enemyChar != null) { Destroy(enemyChar.gameObject); NetworkServer.Destroy(enemyChar.gameObject); } }
void RpcUpdateHealthBar(GameObject target, float healthBarValue) { if (target == null) { Debug.LogError("Target not found!"); return; } Character_Network c = target.GetComponent <Character_Network>(); Base b = target.GetComponent <Base>(); if (c != null) { c.healthBar.value = healthBarValue; } else if (b != null) { b.healthBar.value = healthBarValue; } else { Debug.LogError("Target not found!"); } }