public void AttackTree() { if (m_Character.m_currentWeapon.m_item != ItemType.AXE) { return; } MusicHandler.PlaySound(SoundType.AXE_SOUND); m_health--; Debug.Log("tree is attacked"); if (m_health < 0) { gameObject.SetActive(false); Debug.Log("Tree is destroyed"); SpriteManage.DESTROY_SPRITE(gameObject); // generate tree log after tree is cut down for (int i = 0; i < NUMBER_OF_TREE_LOG; i++) { GameObject temp = SpriteManage.CREATE_SPRITE(SpriteType.TREE_LOG); Debug.Assert(temp); Vector2 newPos = SpriteManage.randomAroundPoint(transform.position, 16); temp.transform.position = newPos; } } }
public void AttackRock() { // set the selection square is show // if characters holding axe and clicked on the tree in range, then tree health is -1 if (m_Character.m_currentWeapon.m_item != ItemType.AXE) { return; } const float OFFSET = 16; float distance = Vector2.Distance(Camera.main.WorldToScreenPoint(m_Character.transform.position), Camera.main.WorldToScreenPoint(transform.position)); MusicHandler.PlaySound(SoundType.AXE_SOUND); m_health--; Debug.Log("rock is attacked"); if (m_health < 0) { gameObject.SetActive(false); Debug.Log("rock is destroyed"); SpriteManage.DESTROY_SPRITE(gameObject); // generate tree log after tree is cut down for (int i = 0; i < NUMBER_OF_STONE; i++) { GameObject temp = SpriteManage.CREATE_SPRITE(SpriteType.STONE); Debug.Assert(temp); Vector2 newPos = SpriteManage.randomAroundPoint(transform.position, 16); temp.transform.position = newPos; } } }
// angle in radian public void throwSpear(float angle) { if (m_Health <= 0) { return; } if (m_currentWeapon != null) { if (m_weaponDelay > 0) { return; } if (m_currentWeapon.m_Quantity <= 0) { return; } if (m_currentWeapon.m_item == ItemType.SPEAR) { m_currentWeapon.m_Quantity--; m_Weapons.setQuantity(m_currentWeapon); GameObject temp = SpriteManage.CREATE_SPRITE(SpriteType.SPEAR); Spear spear = temp.GetComponent <Spear>(); spear.transform.position = transform.position; spear.Init(angle, ObjectSide.OUR_SIDE); MusicHandler.PlaySound(SoundType.SPEAR_THROW); m_weaponDelay = AXE_DELAY; if (m_currentWeapon.m_Quantity <= 0) { changeWeapon(0); } } } }
public override void Attack() { if (!m_IsPlaced) { return; } if (m_AttackDelay <= 0) { if (m_EnemyTarget != null) { if (!m_EnemyTarget.active || m_EnemyTarget.GetComponent <AI>().getHealth() <= 0) { m_EnemyTarget = null; return; } MusicHandler.PlaySound(SoundType.SPEAR_THROW); m_AttackDelay = DEFAULT_ATTACK_DELAY; float angle = Mathf.Atan2(m_EnemyTarget.transform.position.y - transform.position.y, m_EnemyTarget.transform.position.x - transform.position.x); GameObject obj = SpriteManage.CREATE_SPRITE(SpriteType.SPEAR); Debug.Assert(obj); obj.transform.position = transform.position; Spear spear = obj.GetComponent <Spear>(); spear.Init(angle, ObjectSide.OUR_SIDE); } else { m_AttackDelay = 0; } } }
void generateBoss() { if (m_CurrentWay == m_LevelManage.m_Levels.Count - 1) { Debug.Log("generate boss"); if (boss == null) { boss = SpriteManage.CREATE_SPRITE(SpriteType.FINAL_BOSS); } } }
public override void Attack() { float distance = Vector2.Distance(transform.position, m_EnemyTarget.transform.position); calculateAttackDistance(); if (transform.position.x > m_EnemyTarget.transform.position.x) { m_Facing = FACING_LEFT; } else { m_Facing = FACING_RIGHT; } // if in attack range then attack if (distance < m_AttackDistance) { if (m_AttackDelay <= 0) { MusicHandler.PlaySound(SoundType.RED_ENEMY_ATTACK); m_AttackDelay = DEFAULT_ATTACK_SPEED; AI ai = m_EnemyTarget.GetComponent <AI>(); ai.setHealth(ai.getHealth() - m_Damage); if (ai.getHealth() <= 0) { m_EnemyTarget = null; } } } else { float angle = Mathf.Atan2(m_EnemyTarget.transform.position.y - transform.position.y, m_EnemyTarget.transform.position.x - transform.position.x); Vector2 newPos = transform.position; newPos.x += Mathf.Cos(angle) * MOVING_SPEED * Time.fixedDeltaTime; newPos.y += Mathf.Sin(angle) * MOVING_SPEED * Time.fixedDeltaTime; transform.position = newPos; } if (m_Health <= 0) { // generate heart for player to gain health float ran = Random.Range(0, 101); if (Debug.isDebugBuild) { ran = 80; } if (ran >= 70) { var heart = SpriteManage.CREATE_SPRITE(SpriteType.HEART); heart.transform.position = transform.position; } } checkHealth(); }
void generateEater() { GameLevel level = m_LevelManage.m_Levels[m_CurrentWay]; if (m_ReoucesEaterGenerateTime <= 0) { if (level.m_NumberOfEater > 0) { level.m_NumberOfEater--; GameObject eater = SpriteManage.CREATE_SPRITE(SpriteType.RESOURCE_EATER); Vector2 pos = SpriteManage.RandomPos(); eater.transform.position = pos; } m_ReoucesEaterGenerateTime = DEFAULT_RESOURCE_EATER_TIME; } }
void FixedUpdate() { if (mainGame.m_IsPause) { return; } if (!m_Arrived) { float angle = Mathf.Atan2(m_Castle.transform.position.y - transform.position.y, m_Castle.transform.position.x - transform.position.x); Vector2 pos = transform.position; pos.x += Mathf.Cos(angle) * MOVE_SPEED * Time.fixedDeltaTime; pos.y += Mathf.Sin(angle) * MOVE_SPEED * Time.fixedDeltaTime; transform.position = pos; } else { m_TimeRespawnEnemy -= Time.fixedDeltaTime; if (m_TimeRespawnEnemy <= 0) { if (m_NumberEnemies > 0) { m_TimeRespawnEnemy = RESPAWN_TIME; m_NumberEnemies--; Vector2 castlePos = m_Castle.transform.position; Vector2 currentPos = transform.position; float angle = Mathf.Atan2(castlePos.y - currentPos.y, castlePos.x - currentPos.x); float offset = m_Wall.GetComponent <BoxCollider2D>().size.x; currentPos.x += Mathf.Cos(angle) + offset; currentPos.x += Mathf.Sin(angle) + offset; GameObject enemy = SpriteManage.CREATE_SPRITE(SpriteType.RED_ENEMY); enemy.transform.position = currentPos; } // delete the boat else { SpriteManage.DESTROY_SPRITE(gameObject); } } } checkHealth(); }
void prepareTowerToPlace() { // cancel placing tower if (m_isPlacingTower) { // if the placing tower still active, then cancel it if (m_currentBuilding != null) { SpriteManage.DESTROY_SPRITE(m_currentBuilding); m_currentBuilding = null; } m_isPlacingTower = false; } // start placing tower else { m_isPlacingTower = true; m_currentBuilding = SpriteManage.CREATE_SPRITE(SpriteType.TOWER); } }
void generateAttackableBoat() { if (m_LevelManage.m_Levels[m_CurrentWay].m_NumberOfAttackableBoat <= 0) { return; } m_LevelManage.m_Levels[m_CurrentWay].m_NumberOfAttackableBoat--; GameObject castle = GameObject.Find("castle"); GameObject obj = SpriteManage.CREATE_SPRITE(SpriteType.ATTACKABLE_BOAT); // random angle float angle = Random.Range(0, Mathf.PI * 2); Debug.Log("angle boat: " + angle); float distance = 10; int wallRan = (int)Random.Range(0, 4); Vector3 offset = Random.insideUnitCircle * 30; Vector3 newpos = offset + GameObject.Find("castle").transform.position; bool generate = false; while (!generate) { generate = true; offset = Random.insideUnitCircle * 30; newpos = offset + GameObject.Find("castle").transform.position; Collider2D[] list = Physics2D.OverlapBoxAll(newpos, obj.GetComponent <SpriteRenderer>().bounds.size, 0); for (int i = 0; i < list.Length; i++) { Collider2D collider = list[i]; if (collider.tag == "castle") { generate = false; } } } obj.transform.position = newpos; }
public override void Attack() { Vector2 newPos = transform.position; Vector2 origin = m_Castle.transform.position; float radius = Vector2.Distance(transform.position, origin); m_CurrentAngle += ANGLE_MOVE * Time.fixedDeltaTime; newPos.x = origin.x + Mathf.Cos(m_CurrentAngle) * radius; newPos.y = origin.y + Mathf.Sin(m_CurrentAngle) * radius; transform.position = newPos; if (m_AttackDelay <= 0) { m_AttackDelay = DEFAULT_ATTACK_DELAY; if (m_EnemyTarget != null) { var s = SpriteManage.CREATE_SPRITE(SpriteType.SPEAR); var spear = s.GetComponent <Spear>(); float attackAngle = Mathf.Atan2(m_EnemyTarget.transform.position.y - newPos.y, m_EnemyTarget.transform.position.x - newPos.x); spear.transform.position = transform.position; spear.Init(attackAngle, ObjectSide.ENEMY_SIDE); MusicHandler.PlaySound(SoundType.SPEAR_THROW); } } }
// generate resources void generateResouces() { if (m_LevelManage.m_Levels[m_CurrentWay].m_TotalResouces < 0) { return; } if (m_CurrentGenerateTreeTimeStep < 0) { m_CurrentGenerateTreeTimeStep = m_LevelManage.m_Levels[m_CurrentWay].m_ReseoucesInterval; Debug.Log("generate resouces"); m_LevelManage.m_Levels[m_CurrentWay].m_TotalResouces--; int chanceWood = m_LevelManage.m_Levels[m_CurrentWay].m_ChanceWood; int ran = (int)Random.Range(0, 101); GameObject ob = null; if (ran <= chanceWood) { ob = SpriteManage.CREATE_SPRITE(SpriteType.TREE); } else { ob = SpriteManage.CREATE_SPRITE(SpriteType.ROCK); } bool generated = false; // number of attem for item generate int attemp = 10; while (!generated && attemp > 0) { //generated = true; Vector2 pos = SpriteManage.RandomPos(); var colliders = Physics2D.OverlapBoxAll(pos, ob.GetComponent <SpriteRenderer>().bounds.size, 0); if (colliders.Length == 0) { generated = true; } else { for (int i = 0; i < colliders.Length; i++) { Collider2D collider = colliders[i]; Debug.Log("collider tag: " + collider.tag); Debug.Log("type: " + collider.GetType()); if (collider.GetType() == typeof(BoxCollider2D)) { generated = false; } else if (collider.GetType() == typeof(CircleCollider2D)) { if (collider.tag == "castle") { generated = true; } } } } if (generated) { ob.transform.position = pos; } attemp--; } Debug.Log("generated: " + generated); if (!generated) { SpriteManage.DestroyObject(ob); } } }
public override void Attack() { if (m_EnemyTarget == null) { if (m_Character.m_Health > 0) { m_EnemyTarget = m_Character.gameObject; } else { m_EnemyTarget = m_Castle.gameObject; } } if (m_EnemyTarget != null) { if (!m_EnemyTarget.active) { m_EnemyTarget = null; return; } float distance = Vector2.Distance(m_EnemyTarget.transform.position, transform.position); // attack if (distance <= ATTACK_RANGE) { if (m_UltimateAttack <= 0) { for (int i = 0; i < MAX_SPEAR; i++) { GameObject spear = SpriteManage.CREATE_SPRITE(SpriteType.SPEAR); float angle = i * 45 * Mathf.Deg2Rad; Spear s = spear.GetComponent <Spear>(); s.Init(angle, ObjectSide.ENEMY_SIDE); s.m_speed = 9; spear.transform.position = transform.position; } m_UltimateAttack = DEFAULT_ULTIMATE; return; } if (m_AttackDelay <= 0) { MusicHandler.PlaySound(SoundType.SPEAR_THROW); if (m_Health < DEFAULT_HEALTH / 2) { m_AttackDelay = ATTACK_DELAY_PERIOD_2; } else { m_AttackDelay = ATTACK_DELAY_PERIOD_1; } GameObject spear = SpriteManage.CREATE_SPRITE(SpriteType.SPEAR); float angle = Mathf.Atan2(m_EnemyTarget.transform.position.y - transform.position.y, m_EnemyTarget.transform.position.x - transform.position.x); Spear s = spear.GetComponent <Spear>(); s.Init(angle, ObjectSide.ENEMY_SIDE); s.m_speed = 9; spear.transform.position = transform.position; } } else { // update position float angle = Mathf.Atan2(m_EnemyTarget.transform.position.y - transform.position.y, m_EnemyTarget.transform.position.x - transform.position.x); Vector2 newPos = transform.position; newPos.x += Mathf.Cos(angle) * DEFAULT_MOVE_SPEED * Time.fixedDeltaTime; newPos.y += Mathf.Sin(angle) * DEFAULT_MOVE_SPEED * Time.fixedDeltaTime; transform.position = newPos; } } }