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)); } } }
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)); } }
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); } }
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); } }
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; } }
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); } }
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(); }
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]; } }
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; } }
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; } } }
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; } } }
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); } } }
private GameSceneController() { enemyFactory = EnemyFactory.getInstance(); cannonBallFactory = CannonBallFactory.getInstance(); }