/// <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); }
/// <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); }
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); }
/// <summary> /// 返回补给 /// </summary> public virtual void BackSupply() { if (isMine) { followTarget = GameManager.instance.GetCommand().transform; } else { followTarget = EnemyManager.instance.GetCommand(); } m_status = objStatus.Follow; }
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)); }
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; } } }
/// <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); } }
/// <summary> /// /// </summary> /// <param name="status"></param> /// <returns></returns> private Dictionary <string, AssetBundleObject> GetQueue(objStatus status) { return(status == objStatus.None ? null : queueDic[status]); }
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; }
public virtual void AttackPoint(Vector3 point, objStatus status) { m_status = status; AtkPoint = point; }