Ejemplo n.º 1
0
 /// <summary>
 /// 有效射击
 /// </summary>
 /// <param name="id">单位id</param>
 public void PreciseAttack(int id)
 {
     if (!m_objList.ContainsKey(id))
     {
         return;
     }
     objindex = id;
     m_status = objStatus.PreciseAttack;
     Cursor.SetCursor(AtkCursor, Vector2.zero, CursorMode.ForceSoftware);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// 指定目标移动点
 /// </summary>
 public void ObjSetMove(int id)
 {
     if (!m_objList.ContainsKey(id))
     {
         return;
     }
     m_status = objStatus.Moving;
     objindex = id;
     Cursor.SetCursor(AtkCursor, Vector2.zero, CursorMode.ForceSoftware);
 }
Ejemplo n.º 3
0
    public override void AttackPoint(Vector3 point, objStatus status)
    {
        base.AttackPoint(point, status);
        string keyname = "Attack";

        if (AttackMethod != null)
        {
            StopCoroutine(AttackMethod); isShooting = false;
        }
        AttackMethod = StartCoroutine(keyname);
    }
Ejemplo n.º 4
0
 /// <summary>
 /// 返回补给
 /// </summary>
 public virtual void BackSupply()
 {
     if (isMine)
     {
         followTarget = GameManager.instance.GetCommand().transform;
     }
     else
     {
         followTarget = EnemyManager.instance.GetCommand();
     }
     m_status = objStatus.Follow;
 }
Ejemplo n.º 5
0
    public override void AttackPoint(Vector3 point, objStatus status)
    {
        base.AttackPoint(point, status);
        m_status = status;
        string keyname = "Attack";

        if (AttackMethod != null)
        {
            StopCoroutine(AttackMethod); AttackMethod = null; isShooting = false;
        }
        if (BombAttackMethod != null)
        {
            StopCoroutine(BombAttackMethod); BombAttackMethod = null; isShooting = false;
        }
        switch (status)
        {
        case objStatus.Attack:
            keyname      = "Attack";
            AttackMethod = StartCoroutine(keyname);
            break;

        case objStatus.PreciseAttack:
            keyname      = "Attack";
            AttackMethod = StartCoroutine(keyname);
            break;

        case objStatus.BombAttack:
            keyname          = "BombAttack";
            BombAttackMethod = StartCoroutine(keyname);
            break;
        }
        // this.Log(coroutines.ContainsKey(keyname).ToString());
        //if (coroutines.ContainsKey(keyname))
        //{
        //    foreach (var c in coroutines)
        //    {
        //        if (c.Key == "Attack") { StopCoroutine(c.Value);  }
        //        if (c.Key == "BombAttack"){ StopCoroutine(c.Value); }
        //    }
        //}

        //this.Log("删除攻击方法:" + keyname);
        // coroutines.Remove(keyname);
        //string names = "";
        //foreach(var tine in coroutines)
        //{
        //    names += tine.Key + ",";
        //}
        //this.Log("剩余攻击方法:" + names);
        // coroutines.Add(keyname, StartCoroutine(keyname));
    }
Ejemplo n.º 6
0
    void MouseController()
    {
        bool MouseUI = EventSystem.current.IsPointerOverGameObject();

        if (!MouseUI)
        {
            switch (m_status)
            {
            case objStatus.Moving:
                if (Input.GetMouseButtonDown(0) && PaletteMap.instance.DrawLimit())
                {
                    m_objList[objindex].SetMovePosition(PaletteMap.instance.GetMapPoint);
                    m_status = objStatus.empty;
                    Cursor.SetCursor(null, Vector2.zero, CursorMode.ForceSoftware);
                    //this.Log("移动指定点:{0},对象{1}", PaletteMap.instance.GetMapPoint,m_objList[objindex]);
                }
                break;

            case objStatus.Attack:
                if (Input.GetMouseButtonDown(0) && PaletteMap.instance.DrawLimit())
                {
                    m_objList[objindex].AttackPoint(PaletteMap.instance.GetMapPoint + new Vector3(0.5f, 0.5f), objStatus.Attack);
                    m_status = objStatus.empty;
                    Cursor.SetCursor(null, Vector2.zero, CursorMode.ForceSoftware);
                }
                break;

            case objStatus.PreciseAttack:
                if (Input.GetMouseButtonDown(0) && PaletteMap.instance.DrawLimit())
                {
                    m_objList[objindex].AttackPoint(PaletteMap.instance.GetMapPoint + new Vector3(0.5f, 0.5f), objStatus.PreciseAttack);
                    m_status = objStatus.empty;
                    Cursor.SetCursor(null, Vector2.zero, CursorMode.ForceSoftware);
                }
                break;

            case objStatus.BombAttack:
                if (Input.GetMouseButtonDown(0) && PaletteMap.instance.DrawLimit())
                {
                    m_objList[objindex].AttackPoint(PaletteMap.instance.GetMapPoint + new Vector3(0.5f, 0.5f), objStatus.BombAttack);
                    m_status = objStatus.empty;
                    Cursor.SetCursor(null, Vector2.zero, CursorMode.ForceSoftware);
                }
                break;
            }
        }
    }
Ejemplo n.º 7
0
        /// <summary>
        /// 将资源包加入某个队列
        /// </summary>
        /// <param name="status"></param>
        /// <param name="obj"></param>
        private void PutobjInQueue(objStatus status, AssetBundleObject obj)
        {
            var hashName = obj.HashName;

            var curStatus = GetobjStatus(hashName);

            // 清除上一个状态
            if (curStatus != objStatus.None)
            {
                GetQueue(curStatus).Remove(hashName);
            }

            if (status != objStatus.None)
            {
                GetQueue(status).Add(obj.HashName, obj);
            }
        }
Ejemplo n.º 8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="status"></param>
 /// <returns></returns>
 private Dictionary <string, AssetBundleObject> GetQueue(objStatus status)
 {
     return(status == objStatus.None ? null : queueDic[status]);
 }
Ejemplo n.º 9
0
    protected virtual IEnumerator BombAttack()
    {
        if (GameManager.instance.CmdOrder)
        {
            yield return(StartCoroutine(BombAttackAudioPlay()));
        }

        bool attack = false;

        attack = Vector2.Distance(transform.position, AtkPoint) <= MaxAtkRadius;
        if (!attack)
        {
            //超出范围提示
            GameManager.instance.CreateTipUI();
        }
        while (IntervalTime > 0 && attack)
        {
            IntervalTime -= Time.deltaTime; yield return(null);
        }
        //等待
        while (isShooting)
        {
            yield return(null);
        }
        while (attack && m_status == objStatus.BombAttack)
        {
            isShooting = true;
            int tempAmt = 0;
            //冷却时间
            IntervalTime = AttackInterval;
            tempAmt      = ShootAmt * Mathf.CeilToInt(Health / 3);
            if (this is Command)
            {
                tempAmt = 1;
            }
            if (BombBulletAmt < 1)
            {
                //发出请求补给
                if (isMine)
                {
                    string str = string.Format("<color=#FFAF23>{0}</color>:弹药已经用光,请求补给!", Name);
                    MessageSystemMag.instance.AddMessage(str);
                    int thisID = GameManager.instance.GetObjId(this);
                    PropertyMag.instance.PropertyUpdate(thisID, this, PropertyType.Bullet);
                }
                else
                {
                    BackSupply();
                }
                break;
            }
            else if (BombBulletAmt < tempAmt)
            {
                tempAmt = BombBulletAmt; BombBulletAmt = 0;
            }
            else
            {
                BombBulletAmt -= tempAmt;
            }
            int bAmt = tempAmt;
            while (bAmt > 0 && m_status == objStatus.BombAttack)
            {
                GameObject b      = Instantiate(BombBulletPrefab, transform.position, Quaternion.identity) as GameObject;
                string     AtkTag = "";
                if (isMine)
                {
                    AtkTag = "Enemy";
                }
                else
                {
                    AtkTag = "Player";
                }
                b.GetComponent <Bullet>().Init(AtkPoint, Hitrate, AtkTag, objID);
                bAmt--;
                //开火声音选择
                if (this is Command)
                {
                    m_Audio.clip = WeaponClip[1];
                }
                else
                {
                    Vector2 mpos     = transform.position;
                    Vector2 cmdpos   = GameManager.instance.GetCommand().transform.position;
                    float   distance = Vector2.Distance(mpos, cmdpos);
                    if (distance <= DetectRadius)
                    {
                        m_Audio.clip = WeaponClip[0];
                    }
                    else
                    {
                        m_Audio.clip = WeaponClip[1];
                    }
                }
                m_Audio.Play();
                yield return(new WaitForSeconds(ShootInterval * 5));
            }
            m_status = objStatus.empty;
            //BombBulletAmt -= tempAmt;
            //float BulletRate = 1;//弹药量率
            //float Brate = BombBulletAmt / maxBombBullet;
            //if (Brate >= 0.75f) { BulletRate = 1; }
            //else if (Brate >= 0.4f) { BulletRate = 1.4f; }
            //else { BulletRate = 1.7f; }

            while (IntervalTime > 0)
            {
                IntervalTime -= Time.deltaTime;
                yield return(new WaitForFixedUpdate());
            }
            //yield return new WaitForSeconds(IntervalTime);
        }
        isShooting = false;
    }
Ejemplo n.º 10
0
 public virtual void AttackPoint(Vector3 point, objStatus status)
 {
     m_status = status;
     AtkPoint = point;
 }