예제 #1
0
 protected static void copy(ability src, ability tgt)
 {
     tgt.parent     = src.parent;
     tgt.iconSprite = Sprite.Instantiate(src.iconSprite);
     tgt.range      = src.range;
     tgt.targeted   = src.targeted;
 }
 // sets ability
 public void setAbility1(ePlayer owner)
 {
     if (currentAbility == ability.none)
     {
         bombOwner      = owner;
         currentAbility = ability.ability1;
     }
 }
예제 #3
0
    public virtual ability clone()
    {
        ability ret = new ability();

        ret.Initialize();
        ability.copy(this, ret);
        return(ret);
    }
        private void ability2()   // gary
        // returns if the users right clicks
        {
            if (Input.GetMouseButton(1))
            {
                currentAbility = ability.none;
                return;
            }
            // code to change the mouse sprite, yes, it is redundant in some ways
            // I just copied it from my own ability and altered it a little
            overEnemyTower = false;
            Tower        tower    = null;
            Vector3      mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector3      pos      = new Vector3(mousePos.x, mousePos.y, 0);
            RaycastHit2D hitTower = Physics2D.Raycast(mousePos, Vector2.zero);

            if (hitTower.collider != null)
            {
                tower = hitTower.collider.gameObject.GetComponent <Tower> ();
                if (tower != null && magThrower != tower.myOwner && tower.myOwner != ePlayer.Neutral)
                {
                    overEnemyTower = true;
                }
            }
            //end redundant code ------------------------------------
            if (clickTime < Time.time && Input.GetMouseButtonUp(0))
            {
                RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
                if (hit.collider == null)
                {
                    return;
                }
                Tower thingClicked = hit.collider.gameObject.GetComponent <Tower>();
                if (thingClicked == null)
                {
                    return;
                }
                if (thingClicked.myOwner == ePlayer.Neutral || thingClicked.myOwner == magThrower)
                {
                    return;
                }
                GameObject mag     = (GameObject)Instantiate(magnetPrefab, throwMagFrom, Quaternion.Euler(0, 0, 0));
                Vector2    toMouse = (Camera.main.ScreenToWorldPoint(Input.mousePosition) - throwMagFrom) * magForce;
                mag.GetComponent <Rigidbody2D>().AddForce(toMouse);
                mag.GetComponent <Rigidbody2D>().AddTorque(magTorque);
                MagnetBehavior mb = mag.GetComponent <MagnetBehavior>();
                mb.target = hit.collider;
                active    = false;
                gameManager.resetScore();
                currentAbility = ability.none;
            }
        }
 public void setAbility2(ePlayer thrower)
 {
     //Cant initialize on start as towers aren't placed until game begins
     if (p1DeathRay == null || p2DeathRay == null)
     {
         p1DeathRay = GameObject.Find("DeathRayPlayer1(Clone)");
         p2DeathRay = GameObject.Find("DeathRayPlayer2(Clone)");
     }
     active         = true;
     currentAbility = ability.ability2;
     throwMagFrom   = (thrower == ePlayer.Player1) ? p1DeathRay.transform.position : p2DeathRay.transform.position;
     clickTime      = Time.time;
     magThrower     = thrower;        //Used for the ability2()
 }
        public void ability0()   // erick
        {
            print("ability0");
            overMyTower = false;
            Tower        tower    = null;
            Vector3      mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector3      pos      = new Vector3(mousePos.x, mousePos.y, 0);
            RaycastHit2D hit      = Physics2D.Raycast(mousePos, Vector2.zero);

            if (hit.collider != null)
            {
                tower = hit.collider.gameObject.GetComponent <Tower> ();
                if (tower != null && shieldOwner == tower.myOwner)
                {
                    overMyTower = true;
                }
            }
            if (Input.GetMouseButton(1))
            {
                currentAbility = ability.none;
                return;
            }
            if (Input.GetMouseButton(0))
            {
                if (tower != null)
                {
                    if (shieldOwner == ePlayer.Player1 && tower.myOwner == ePlayer.Player1)
                    {
                        GameObject one = (GameObject)Instantiate(shieldP1, tower.transform.position, Quaternion.Euler(0, 0, 0));
                        currentAbility = ability.none;
                        gameManager.resetScore();
                        tower       = null;
                        overMyTower = false;
                    }
                    else if (shieldOwner == ePlayer.Player2 && tower.myOwner == ePlayer.Player2)
                    {
                        GameObject two = (GameObject)Instantiate(shieldP2, tower.transform.position, Quaternion.Euler(0, 0, 0));
                        currentAbility = ability.none;
                        gameManager.resetScore();
                        tower       = null;
                        overMyTower = false;
                    }
                }
            }
        }
 // does ability
 public void ability1()
 {
     // reset the abiltyManabger if the user right clicks
     if (Input.GetMouseButton(1))
     {
         currentAbility = ability.none;
         return;
     }
     if (Input.GetMouseButton(0))
     {
         Vector3     mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
         GameObject  e        = Instantiate(bombManagerPrefab, new Vector3(mousePos.x, mousePos.y, 0), Quaternion.LookRotation(Vector3.forward, Vector3.forward)) as GameObject;
         BombManager BM       = e.GetComponent <BombManager> ();
         if (BM != null)
         {
             BM.changeOwner(bombOwner);
         }
         currentAbility = ability.none;
         gameManager.resetScore();
     }
 }
예제 #8
0
        IEnumerator UseStrongAbility(pratiti Atker, pratiti Defer, GameObject AtkerObj, GameObject DeferObj, ability AtkerAbility)
        {
            yield return(new WaitForSeconds(Atker.abilityStartHitRecoveryTime));

            while (AtkerAbility.hitTimes < AtkerAbility.totalHitTimes)
            {
                AtkerAbility.hitTimes += 1;
                if (AtkerAbility.leftSide <= DeferObj.transform.position.x && DeferObj.transform.position.x < AtkerAbility.rightSide)
                {
                    attack(Atker, Defer, AtkerAbility);
                }
                yield return(new WaitForSeconds(0.2f));
            }
            AtkerAbility.hitTimes = 0;
        }
예제 #9
0
        public void attack(pratiti atker, pratiti defer, ability ability)
        {
            if (defer.def < 0)
            {
                defer.def = 0;
            }
            if (defer.mDef < 0)
            {
                defer.mDef = 0;
            }
            chance = Random.Range(1, 101);

            if ((chance + defer.agi - atker.agi) <= ability.hitRate)
            {
                if (defer.isParry == true)
                {
                    print("盾反成功");
                    defer.isParry = false;
                    StartCoroutine(ParryTimeSlowDown());
                    defer.ParrySuccess = true;
                    ParryShieldAnimator.SetTrigger("Success");
                    Damage = 0.0005f * ability.power * 0.1f * (atker.atk + atker.mAtk);
                    StartCoroutine(NumberChange(Damage, defer, "hp"));
                    StartCoroutine(NumberChange(ability.gainEnergy, atker, "gainEnergy"));
                    Damage = (int)Damage;
                    damage.GetComponentInChildren <Text>().text = "-" + Damage.ToString();
                    random01 = Random.Range(-3, 5);
                    random02 = Random.Range(3, 6);
                    Instantiate(damage, defer.gameObj01.transform.position + new Vector3(random01 * 0.2f, random02 * 0.2f), new Quaternion(0, 0, 0, 0));
                    defer.gameObj01.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj02.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj03.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj04.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.hurtTime = 0.25f;
                    if (ability.gainEnergy > 0)
                    {
                        if (defer.gameObj01 == Player)
                        {
                            EnemyAbility01Obj = Instantiate(EnemyAbility01, defer.gameObj01.transform.position + new Vector3(0, 4.5f), new Quaternion(0, 0, 0, 0));
                        }
                        else
                        {
                            PlayerAbility01Obj = Instantiate(PlayerAbility01, defer.gameObj01.transform.position, new Quaternion(0, 0, 0, 0));
                        }
                    }
                    Damage = 0.0005f * ability.power * (atker.atk + atker.mAtk);
                    StartCoroutine(NumberChange(Damage, atker, "hp"));
                    Damage = (int)Damage;
                    damage.GetComponentInChildren <Text>().text = "-" + Damage.ToString();
                    random01 = Random.Range(-3, 5);
                    random02 = Random.Range(3, 6);
                    Instantiate(damage, atker.gameObj01.transform.position + new Vector3(random01 * 0.2f, random02 * 0.2f), new Quaternion(0, 0, 0, 0));
                    //Instantiate(damage, new Vector3(-3.1f,3.1f), new Quaternion(0, 0, 0, 0));
                    //Instantiate(damage, new Vector3(3.1f, 2.9f), new Quaternion(0, 0, 0, 0));
                    atker.gameObj01.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    atker.gameObj02.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    atker.gameObj03.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    atker.gameObj04.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    atker.hurtTime = 0.25f;
                }
                else
                {
                    //傷害值計算                                                                  //90%是滿減傷
                    Damage = 0.0005f * ability.power * (atker.atk + atker.mAtk - defer.defStatus * 0.9f *
                                                        (atker.atk * defer.def / defer.maxDef + atker.mAtk * defer.mDef / defer.maxMDef));
                    Damage = (int)Damage;

                    //呼叫各數值遞減的協程函式
                    StartCoroutine(NumberChange(Damage, defer, "hp"));
                    StartCoroutine(NumberChange(0.0005f * ability.power * atker.atk * defer.defStatus * defer.defEmpty, defer, "def"));
                    StartCoroutine(NumberChange(0.0005f * ability.power * atker.mAtk * defer.defStatus * defer.mDefEmpty, defer, "mDef"));
                    StartCoroutine(NumberChange(ability.gainEnergy, atker, "gainEnergy"));

                    //產生顯示傷害數值位置的偏移亂數
                    random01 = Random.Range(-3, 5);
                    random02 = Random.Range(3, 6);
                    damage.GetComponentInChildren <Text>().text = "-" + Damage.ToString(); //將傷害數值文字化
                    //在畫面上產生傷害數值
                    Instantiate(damage, defer.gameObj01.transform.position + new Vector3(random01 * 0.2f, random02 * 0.2f), new Quaternion(0, 0, 0, 0));

                    //受傷害角色身體顏色轉為紅色
                    defer.gameObj01.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj02.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj03.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj04.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.hurtTime = 0.25f;
                    if (ability.gainEnergy > 0)
                    {
                        if (defer.gameObj01 == Player)
                        {
                            EnemyAbility01Obj = Instantiate(EnemyAbility01, defer.gameObj01.transform.position + new Vector3(0, 4.5f), new Quaternion(0, 0, 0, 0));
                        }
                        else
                        {
                            PlayerAbility01Obj = Instantiate(PlayerAbility01, defer.gameObj01.transform.position, new Quaternion(0, 0, 0, 0));
                        }
                    }
                }
            }
            else
            {
                if (defer.isParry == true)
                {
                    defer.ParrySuccess = true;
                }
                random01 = Random.Range(-4, 5);
                random02 = Random.Range(1, 6);
                Instantiate(miss, defer.gameObj01.transform.position + new Vector3(random01 * 0.3f, random02 * 0.3f), new Quaternion(0, 0, 0, 0));
            }
        }
예제 #10
0
 public static boolean SaveAbilityHandle(hashtable table, integer parentKey, integer childKey, ability whichAbility)
 {
     table.Add(parentKey.ToString("x8") + childKey.ToString("x8"), whichAbility);
     return(true);
 }
 public void setAbility0(ePlayer owner)
 {
     currentAbility = ability.ability0;
     shieldOwner    = owner;
 }
예제 #12
0
 void learnAbility(ability newMove)
 {
     moves[newMove.name] = newMove;
 }