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;
            }
        }
    }
Example #2
0
 protected void checkHealth()
 {
     if (m_Health <= 0)
     {
         SpriteManage.DESTROY_SPRITE(gameObject);
     }
 }
Example #3
0
    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;
            }
        }
    }
Example #4
0
    Collider2D findShortestEnemy(Collider2D[] colliders)
    {
        Debug.Assert(colliders.Length > 0);
        float      minDistance = 99999999;
        Collider2D enemy       = null;

        for (int i = 0; i < colliders.Length; i++)
        {
            if (colliders[i].tag == "character" || colliders[i].tag == "castle" || colliders[i].tag == "tower")
            {
                if (colliders[i].tag == "tower")
                {
                    Debug.Assert(false);
                    return(colliders[i]);
                }

                Vector2 enemyPos = colliders[i].gameObject.transform.position;
                float   distance = Vector2.Distance(enemyPos, transform.position);
                if (minDistance > distance)
                {
                    minDistance = distance;
                    enemy       = colliders[i];
                }
            }
            else if (colliders[i].tag == "tree" || colliders[i].tag == "stone")
            {
                SpriteManage.DESTROY_SPRITE(colliders[i].gameObject);
            }
        }

        return(enemy);
    }
Example #5
0
 void Update()
 {
     if (mainGame.m_IsPause)
     {
         return;
     }
     m_TimeActive -= Time.deltaTime;
     if (m_TimeActive <= 0)
     {
         SpriteManage.DESTROY_SPRITE(gameObject);
     }
 }
 public override void Attack()
 {
     if (m_EnemyTarget != null)
     {
         if (!m_EnemyTarget.active)
         {
             m_EnemyTarget = null;
             return;
         }
         float distance = Vector2.Distance(transform.position, m_EnemyTarget.transform.position);
         calculateAttackDistance();
         if (distance < m_AttackDistance)
         {
             if (m_AttackDelay <= 0)
             {
                 MusicHandler.PlaySound(SoundType.RED_ENEMY_ATTACK);
                 m_AttackDelay = DEFAULT_ATTACK_DELAY;
                 if (m_EnemyTarget.tag == "tree")
                 {
                     m_EnemyTarget.GetComponent <Tree>().m_health--;
                     if (m_EnemyTarget.GetComponent <Tree>().m_health <= 0)
                     {
                         SpriteManage.DESTROY_SPRITE(m_EnemyTarget);
                         m_EnemyTarget = null;
                     }
                 }
                 else if (m_EnemyTarget.tag == "stone")
                 {
                     m_EnemyTarget.GetComponent <Rock>().m_health--;
                     if (m_EnemyTarget.GetComponent <Rock>().m_health <= 0)
                     {
                         SpriteManage.DESTROY_SPRITE(m_EnemyTarget);
                         m_EnemyTarget = null;
                     }
                 }
             }
         }
         // moving to the target
         else
         {
             float   angle = Mathf.Atan2(m_EnemyTarget.transform.position.y - transform.position.y, m_EnemyTarget.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;
         }
     }
 }
    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();
    }
Example #8
0
 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 OnTriggerEnter2D(Collider2D col)
    {
        GameObject temp = col.gameObject;

        if (temp.tag == "treeLog")
        {
            SpriteManage.DESTROY_SPRITE(temp);
            m_inventory.addNewItem(ItemType.WOOD);
        }
        else if (temp.tag == "stoneItem")
        {
            SpriteManage.DESTROY_SPRITE(temp);
            m_inventory.addNewItem(ItemType.STONE);
        }
        else if (temp.tag == "heart")
        {
            SpriteManage.DESTROY_SPRITE(temp);
            m_Health += DEFAULT_HEART_HEALTH;
        }
    }
Example #10
0
    // Update is called once per frame
    void Update()
    {
        if (mainGame.m_IsPause)
        {
            return;
        }

        m_AttackDelay -= Time.fixedDeltaTime;
        if (m_AttackDelay <= 0)
        {
            m_AttackDelay = 0;
        }
        //checkHealth();
        if (m_VisibleTime <= 0)
        {
            SpriteManage.DESTROY_SPRITE(gameObject);
        }
        m_VisibleTime -= Time.deltaTime;
        findEnemy();
        updateHealthBar();
        checkHealth();
    }
Example #11
0
    void OnTriggerEnter2D(Collider2D colldier)
    {
        if (colldier.GetType() == typeof(CircleCollider2D))
        {
            return;
        }

        GameObject obj = colldier.gameObject;
        AI         ai  = obj.GetComponent <AI>();

        if (ai)
        {
            if (ai.m_Side == m_Side)
            {
                return;
            }
            ai.setHealth(ai.getHealth() - m_Damage);
            Debug.Log("update enemy health: " + ai.getHealth());
            SpriteManage.DESTROY_SPRITE(gameObject);
        }
        else
        {
        }
    }