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;
                        }
                    }
                }
            }
        }
    }
Exemple #2
0
    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);
    }
Exemple #3
0
    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);
    }
Exemple #4
0
    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!");
        }
    }
Exemple #5
0
    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!");
        }
    }