コード例 #1
0
    IEnumerator fireRound(Vector2 currPos, Vector2 tarPos)
    {
        for (int i = 0; i < bulletPerRound; i++)
        {
            if (target.gameObject.activeSelf)
            {
                GameObject cannonBall = CannonBallFactory.getInstance().generateCannonBall(currPos, tarPos, BallType.MelonBall);
                cannonBall.GetComponent <MelonBallBehavior>().target = target.gameObject;
                cannonBall.GetComponent <MelonBallBehavior>().damage = damage;

                Debug.Log("Positions: " + target.position + " " + transform.position);
                Vector2 dir = target.position - transform.position;

                //            float angle = Vector2.Angle(new Vector2(1, 0), dir);

                float angle;
                if (dir.x == 0)
                {
                    if (dir.y > 0)
                    {
                        angle = 90;
                    }
                    else if (dir.y < 0)
                    {
                        angle = -90;
                    }
                    else
                    {
                        angle = 0;
                    }
                }
                else
                {
                    angle = Mathf.Atan(Mathf.Abs(dir.y / dir.x)) * 57.29f;

                    if (dir.x > 0 && dir.y > 0)
                    {
                        //angle = angle;
                    }
                    else if (dir.x <= 0 && dir.y > 0)
                    {
                        angle = 180 - angle;
                    }
                    else if (dir.x <= 0 && dir.y <= 0)
                    {
                        angle = 180 + angle;
                    }
                    else if (dir.x > 0 && dir.y <= 0)
                    {
                        angle = 360 - angle;
                    }
                }

//                Debug.Log(dir + " " + angle);
                cannonBall.transform.rotation = Quaternion.Euler(0, 0, angle);

                yield return(new WaitForSeconds(roundInterval));
            }
        }
    }
コード例 #2
0
 IEnumerator fireRound(Vector2 currPos, Vector2 tarPos)
 {
     for (int i = 0; i < bulletPerRound; i++)
     {
         GameObject cannonBall = CannonBallFactory.getInstance().generateCannonBall(currPos, tarPos, BallType.MelonBall);
         cannonBall.GetComponent <MelonBallBehavior>().target = target.gameObject;
         cannonBall.GetComponent <MelonBallBehavior>().damage = damage;
         yield return(new WaitForSeconds(roundInterval));
     }
 }
コード例 #3
0
    protected virtual void FixedUpdate()
    {
        //TODO: Define Shooting behavior

        transform.position = Vector2.MoveTowards(transform.position, targetPos, 4f * Time.deltaTime);

        if (Vector2.Distance(transform.position, targetPos) <= 0.2f)
        {
            target.GetComponent <Enemy>().hpMinus(damage);
            CannonBallFactory.getInstance().recycleCannonBall(this.gameObject);
        }
    }
コード例 #4
0
    protected override void FixedUpdate()
    {
        //TODO: Define Shooting behavior

        transform.position = Vector2.MoveTowards(transform.position, targetPos, 4f * Time.deltaTime);

        if (Vector2.Distance(transform.position, targetPos) <= 0.2f)
        {
            target.GetComponent <Enemy>().applySlowBuf(slowTime, slowFactor);
            target.GetComponent <Enemy>().hp -= damage;
            CannonBallFactory.getInstance().recycleCannonBall(this.gameObject);
        }
    }
コード例 #5
0
    protected override void fire()
    {
        base.fire();

        if (target != null)
        {
            Vector2 currPos = new Vector2(this.gameObject.transform.position.x,
                                          this.gameObject.transform.position.y + 0.5f);

            Vector2    tarPos     = target.position;
            GameObject cannonBall = CannonBallFactory.getInstance().generateCannonBall(currPos, tarPos, BallType.DrinkBall);
            cannonBall.GetComponent <DrinkBallBehavior>().target    = target.gameObject;
            cannonBall.GetComponent <DrinkBallBehavior>().damage    = damage;
            cannonBall.GetComponent <DrinkBallBehavior>().stunnTime = stunnTime;
        }
    }
コード例 #6
0
    void FixedUpdate()
    {
        dTime    += Time.fixedDeltaTime;
        gravity.y = g * dTime;    //v=g*t
        //模拟位移
        this.gameObject.transform.Translate(speed * Time.fixedDeltaTime);
        this.gameObject.transform.Translate(gravity * Time.fixedDeltaTime);

        //当处于下落状态,且y方向位置低于target位置,则视为炮弹落地
        if (this.gameObject.transform.position.y < targetPos.y &&
            abs(speed.y) < abs(gravity.y))
        {
            target.GetComponent <Enemy>().hp -= damage;
            CannonBallFactory.getInstance().recycleCannonBall(this.gameObject);
        }
    }
コード例 #7
0
    void Awake()
    {
        stubList  = new Transform[stubManager.transform.childCount];
        towerList = new List <Transform>();
        for (int i = 0; i < stubManager.transform.childCount; i++)
        {
            Transform stub = stubManager.transform.GetChild(i);
            stub.GetComponent <Stub>().ID = i;
            stubList[i] = stub;
        }

        CannonBallFactory.getInstance().initCannonBallItem(CannonBallItem);

        fm   = FinanceManager.getInstance();
        data = GameData.getInstance();
    }
コード例 #8
0
    protected override void fire()
    {
        base.fire();

        if (target != null)
        {
            Vector2 currPos = new Vector2(this.gameObject.transform.position.x,
                                          this.gameObject.transform.position.y + 0.5f);

            Vector2    tarPos     = target.position;
            GameObject cannonBall = CannonBallFactory.getInstance().generateCannonBall(currPos, tarPos, BallType.IceBall);
            cannonBall.GetComponent <IceBallBehavior>().target     = target.gameObject;
            cannonBall.GetComponent <IceBallBehavior>().damage     = damage;
            cannonBall.GetComponent <IceBallBehavior>().slowTime   = slowTime;
            cannonBall.GetComponent <IceBallBehavior>().slowFactor = slowFactor;
            cannonBall.GetComponent <SpriteRenderer>().sprite      = levelCannonBallImages[lv];
        }
    }
コード例 #9
0
    protected override void fire()
    {
        base.fire();

        if (target != null)
        {
            Vector2 currPos = new Vector2(this.gameObject.transform.position.x,
                                          this.gameObject.transform.position.y + 0.5f);

            Vector2 tarPos = target.position;
//            Debug.Log(tarPos);
            GameObject cannonBall = CannonBallFactory.getInstance().generateCannonBall(currPos, tarPos, BallType.PizzaBall);
            cannonBall.GetComponent <PizzaBallBehavior>().target       = target.gameObject;
            cannonBall.GetComponent <PizzaBallBehavior>().damage       = damage;
            cannonBall.GetComponent <PizzaBallBehavior>().explodeRange = explodeRange;
            cannonBall.GetComponent <PizzaBallBehavior>().bleedTime    = bleedTime;
            cannonBall.GetComponent <PizzaBallBehavior>().bleedDamage  = bleedDamage;
        }
    }
コード例 #10
0
    void fire()
    {
        List <GameObject> enemies = enemyFactory.getAllActiveEnemies();

        foreach (GameObject enemy in enemies)
        {
            Transform loc = enemy.transform;

//            Debug.Log(Vector2.Distance(transform.position, loc.position));

            if (Vector2.Distance(transform.position, loc.position) <= I.range)
            {
                Vector2 currPos = new Vector2(this.gameObject.transform.position.x,
                                              this.gameObject.transform.position.y + 0.5f);

                Vector2    tarPos     = loc.position;
                GameObject cannonBall = CannonBallFactory.getInstance().generateCannonBall(currPos, tarPos);
                cannonBall.GetComponent <CannonBallBehavior>().target = enemy;
                break;
            }
        }
    }
コード例 #11
0
    protected override void fire()
    {
        targets.Clear();
        List <GameObject> enemies = enemyFactory.getAllActiveEnemies();

        //Find multiple targets
        foreach (GameObject enemy in enemies)
        {
            if (targets.Count < maxTargetNum)
            {
                Transform loc = enemy.transform;

                if (Vector2.Distance(transform.position, loc.position) <= range)
                {
                    targets.Add(loc);
                }
            }
            else
            {
                break;
            }
        }
        //Fire at each target
        foreach (Transform target in targets)
        {
            if (target != null)
            {
                Vector2 currPos = new Vector2(this.gameObject.transform.position.x,
                                              this.gameObject.transform.position.y + 0.5f);

                Vector2    tarPos     = target.position;
                GameObject cannonBall = CannonBallFactory.getInstance().generateCannonBall(currPos, tarPos, BallType.GuandongBall);
                cannonBall.GetComponent <GuandongBallBehavior>().target = target.gameObject;
                cannonBall.GetComponent <GuandongBallBehavior>().damage = damage;
            }
        }
    }
コード例 #12
0
    protected override void fire()
    {
        targets.Clear();
        List <GameObject> enemies = enemyFactory.getAllActiveEnemies();

        //Find multiple targets
        foreach (GameObject enemy in enemies)
        {
            if (targets.Count < maxTargetNum)
            {
                Transform loc = enemy.transform;

                if (Vector2.Distance(transform.position, loc.position) <= range)
                {
                    targets.Add(loc);
                }
            }
            else
            {
                break;
            }
        }
        //Fire at each target
        foreach (Transform target in targets)
        {
            if (target != null)
            {
                Vector2 currPos = new Vector2(this.gameObject.transform.position.x,
                                              this.gameObject.transform.position.y + 0.5f);

                Vector2    tarPos     = target.position;
                GameObject cannonBall = CannonBallFactory.getInstance().generateCannonBall(currPos, tarPos, BallType.GuandongBall);
                cannonBall.GetComponent <GuandongBallBehavior>().target = target.gameObject;
                cannonBall.GetComponent <GuandongBallBehavior>().damage = damage;
                cannonBall.GetComponent <SpriteRenderer>().sprite       = levelCannonBallImages[lv];

                Vector2 dir = target.position - transform.position;
                float   angle;
                if (dir.x == 0)
                {
                    if (dir.y > 0)
                    {
                        angle = 90;
                    }
                    else if (dir.y < 0)
                    {
                        angle = -90;
                    }
                    else
                    {
                        angle = 0;
                    }
                }
                else
                {
                    angle = Mathf.Atan(Mathf.Abs(dir.y / dir.x)) * 57.29f;

                    if (dir.x > 0 && dir.y > 0)
                    {
                        //angle = angle;
                    }
                    else if (dir.x <= 0 && dir.y > 0)
                    {
                        angle = 180 - angle;
                    }
                    else if (dir.x <= 0 && dir.y <= 0)
                    {
                        angle = 180 + angle;
                    }
                    else if (dir.x > 0 && dir.y <= 0)
                    {
                        angle = 360 - angle;
                    }
                }
                cannonBall.transform.rotation = Quaternion.Euler(0, 0, angle);
            }
        }
    }
コード例 #13
0
 private GameSceneController()
 {
     enemyFactory      = EnemyFactory.getInstance();
     cannonBallFactory = CannonBallFactory.getInstance();
 }