public static void Draw()
        {
            backgroundImage.Draw();

            EngineFont.DrawText(null, Classe[SelectedClasse], new Size2(450, 0), new Point(Position.X, Position.Y + 80), Color.DarkViolet, EngineFontStyle.Regular, FontDrawFlags.Center, false);

            EngineFont.DrawText(null, Texto[SelectedClasse], new Rectangle(Position.X + 30, Position.Y + 90, 390, 250), Color.White, EngineFontStyle.Regular, FontDrawFlags.WordBreak);

            // Desenha os botões
            for (int n = 0; n < button.Length; n++)
            {
                button[n].Draw();
            }

            textbox.Draw();
            textbox.DrawTextMesured();

            person[0].Draw(SpriteManage.FindByID(6));
            person[1].Draw(SpriteManage.FindByID(7));
            person[2].Draw(SpriteManage.FindByID(9));

            person[3].Draw(SpriteManage.FindByID(15));

            person[4].Draw(SpriteManage.FindByID(10));
            person[5].Draw(SpriteManage.FindByID(11));
            person[6].Draw(SpriteManage.FindByID(12));
        }
Пример #2
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;
            }
        }
    }
Пример #3
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;
         }
     }
 }
    // 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);
                }
            }
        }
    }
Пример #5
0
 protected void checkHealth()
 {
     if (m_Health <= 0)
     {
         SpriteManage.DESTROY_SPRITE(gameObject);
     }
 }
Пример #6
0
    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;
            }
        }
    }
Пример #7
0
 void placeTower()
 {
     if (m_isPlacingTower && m_currentBuilding != null)
     {
         Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
         m_currentBuilding.transform.position = mousePosition;
         if (SpriteManage.canPlaceItem(Camera.main.WorldToScreenPoint(mousePosition), m_currentBuilding))
         {
             m_currentBuilding.GetComponent <SpriteRenderer>().color = new Color(1.0f, 1.0f, 1.0f, 1.0f);
             // change is collider istrigger to false
             m_currentBuilding.GetComponent <BoxCollider2D>().isTrigger    = false;
             m_currentBuilding.GetComponent <CircleCollider2D>().isTrigger = true;
             m_currentBuilding.GetComponent <Tower>().m_IsPlaced           = true;
             m_currentBuilding = null;
             m_isPlacingTower  = false;
             InventoryItem tower = m_Character.m_Weapons.findItem(ItemType.TOWER);
             tower.m_Quantity--;
             m_Character.m_Weapons.setQuantity(tower);
             if (tower.m_Quantity <= 0)
             {
                 m_Character.changeWeapon(0);
             }
         }
         else
         {
             Debug.Log("cant place");
         }
     }
 }
Пример #8
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);
    }
Пример #9
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);
         }
     }
 }
Пример #10
0
 void WalkToCastle()
 {
     if (!GetComponent <BoxCollider2D>().isTrigger)
     {
         return;
     }
     if (SpriteManage.canPlaceItem(Camera.main.WorldToScreenPoint(transform.position), gameObject))
     {
         GetComponent <BoxCollider2D>().isTrigger = false;
     }
     m_EnemyTarget = m_Castle.gameObject;
 }
Пример #11
0
 void Update()
 {
     if (mainGame.m_IsPause)
     {
         return;
     }
     m_TimeActive -= Time.deltaTime;
     if (m_TimeActive <= 0)
     {
         SpriteManage.DESTROY_SPRITE(gameObject);
     }
 }
Пример #12
0
    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();
    }
 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;
         }
     }
 }
Пример #14
0
    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 Start()
    {
        Debug.Assert(m_Axe);
        Debug.Assert(m_Spear);
        Debug.Assert(m_Sword);

        m_inventory = new Inventory();
        m_Craft     = new CraftingEngine();
        m_Weapons   = new WeaponManage();

        m_Weapons.addNewWeapon(new InventoryItem(ItemType.AXE));

        m_Craft.m_Inventory = m_inventory;
        m_Craft.m_Weapons   = m_Weapons;

        m_facing = FACING_RIGHT;
        changeWeapon(0);


        // initialize
        m_HealthSystemOBJ = SpriteManage.getNewHealth();
        m_HealthSystemOBJ.SetActive(true);
        Debug.Assert(m_HealthSystemOBJ);
        initHealth(DEFAULT_HEALTH);

        spr = GetComponent <SpriteRenderer>();
        m_currentAnimation = 0;
        m_currentFrame     = 0;
        m_state            = IDLE;
        m_cam         = Camera.main;
        m_weaponDelay = 0;
        m_Side        = ObjectSide.OUR_SIDE;



        // get uihandler
        GameObject i = GameObject.Find("Inventory");

        Debug.Assert(i);
        m_UIhandler = i.GetComponent <UIHandler>();
        Debug.Assert(m_UIhandler);

        //m_DefaultWeaponAngle = m_currentWeaponSprite.transform.eulerAngles.z;
    }
Пример #16
0
        private static void DrawPlayer(int index, int x)
        {
            if (string.IsNullOrEmpty(PlayerData[index].Name))
            {
                return;
            }
            if (PlayerData[index].Sprite <= 0)
            {
                return;
            }

            EngineCore.SpriteDevice.Begin(SpriteFlags.AlphaBlend);
            EngineCore.SpriteDevice.Draw(SpriteManage.FindByID(PlayerData[index].Sprite), new ColorBGRA(255, 255, 255, PlayerData[index].Transparency), new Rectangle(128, 0, 32, 32), new Vector3(0, 0, 0), new Vector3(position.X + 94 + x, position.Y + 110, 0));
            EngineCore.SpriteDevice.End();

            EngineFont.DrawText(null, PlayerData[index].Name, new Size2(127, 134), new Point(position.X + 49 + x, position.Y + 30), Color.DarkViolet, EngineFontStyle.Regular, FontDrawFlags.Center);
            EngineFont.DrawText(null, PlayerData[index].Class, new Size2(127, 134), new Point(position.X + 49 + x, position.Y + 100), Color.Coral, EngineFontStyle.Regular, FontDrawFlags.Center);
            EngineFont.DrawText(null, "Lv. " + PlayerData[index].Level, new Size2(127, 134), new Point(position.X + 49 + x, position.Y + 120), Color.RoyalBlue, EngineFontStyle.Regular, FontDrawFlags.Center);
        }
Пример #17
0
    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 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;
        }
    }
Пример #19
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);
     }
 }
Пример #20
0
    void moveTowerWithMouse()
    {
        if (m_isPlacingTower && m_currentBuilding != null)
        {
            m_currentBuilding.GetComponent <BoxCollider2D>().isTrigger    = true;
            m_currentBuilding.GetComponent <CircleCollider2D>().isTrigger = true;

            Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            m_currentBuilding.transform.position = mousePosition;
            if (SpriteManage.canPlaceItem(Camera.main.WorldToScreenPoint(mousePosition), m_currentBuilding))
            {
                m_currentBuilding.GetComponent <SpriteRenderer>().color = new Color(1, 1, 1, .5f);
                Debug.Log("can place");
            }
            else
            {
                m_currentBuilding.GetComponent <SpriteRenderer>().color = new Color(1, 0, 0, .5f);
                Debug.Log("cannt place");
            }
        }
    }
Пример #21
0
    void FixedUpdate()
    {
        if (mainGame.m_IsPause)
        {
            return;
        }
        m_AttackDelay -= Time.fixedDeltaTime;
        if (m_EnemyTarget == null)
        {
            m_EnemyTarget = GameObject.Find("castle");
            Debug.Assert(m_EnemyTarget);
        }
        if (SpriteManage.canPlaceItem(Camera.main.WorldToScreenPoint(transform.position), gameObject))
        //if (m_timeToTurnOnBoundingBox <= 0)
        {
            GetComponent <BoxCollider2D>().isTrigger = false;
        }

        Attack();

        ChangeFacingDirection();
    }
Пример #22
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();
    }
Пример #23
0
    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;
    }
Пример #24
0
    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);
            }
        }
    }
Пример #25
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
        {
        }
    }
Пример #26
0
    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;
            }
        }
    }
Пример #27
0
    // 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);
            }
        }
    }