private IEnumerator ShowAOE(List <BulletTarget> targetList, Vector3 position, ClientSkill skill) { if (skill.Prop.skill_select_type != Def.SkillSelectType.PlayerSelect) { StartCoroutine(UpdatePosition()); CoroutineJoin join = new CoroutineJoin(AssetLoader.Instance); for (int i = 0; i < targetList.Count; i++) { BulletTarget bulletTarget = targetList[i]; TeamDisplay target = bulletTarget.Target; if (target == null) { continue; } join.StartSubtask(ShowHurtEffect(target, bulletTarget.delayFrame)); } yield return(join.WaitForAll()); } else { Global.ShowHurtEffect(null, HurtEffect_, position); } yield return(null); StartCoroutine(WaitAndDestroy(true, 2f)); }
public void Reset(BulletTarget bTarget, BulletType bType) { this.bTarget = bTarget; this.bType = bType; if (bType == BulletType.DEFAULT) { if (bTarget == BulletTarget.ENEMY) { //플레이어 총알임 spriteRenderer.sprite = SpriteManager.Singletone.BULLET_00_PLAYER; } else { //적이 쏘는 총알이에요 spriteRenderer.sprite = SpriteManager.Singletone.BULLET_00_ENEMY; } } }
/// <summary> /// 部件开火 /// </summary> /// <param name="fireEvent"></param> /// <param name="part"></param> private void CastPartFire(proto.PartFireEvent fireEvent, Part part) { ShowCast(part); // 范围攻击,只生成一个子弹 if (part.partType == SpellType.AOE) { List <BulletTarget> targetList = new List <BulletTarget>(); for (int i = 0; i < fireEvent.fireinfo_size(); i++) { proto.PartFireInfo info = fireEvent.fireinfo(i); TeamDisplay target = BattleSceneDisplayManager.Instance.GetTeamDisplay(info.targetid); if (target == null) { continue; } BulletTarget bulletTarget = new BulletTarget(); bulletTarget.delayFrame = info.delayframe; bulletTarget.Target = target; targetList.Add(bulletTarget); } ClientParts parts = Team_.GetPartsByID(part.partID); ShowBullet(parts, targetList, part.partType, part.attackPoint, part.bulletPath, part.hitEffect, Vector3.zero); return; } // 个体攻击,每个对象都生成子弹 for (int i = 0; i < fireEvent.fireinfo_size(); i++) { proto.PartFireInfo info = fireEvent.fireinfo(i); TeamDisplay target = BattleSceneDisplayManager.Instance.GetTeamDisplay(info.targetid); if (target == null) { continue; } List <BulletTarget> targetList = new List <BulletTarget>(); BulletTarget bulletTarget = new BulletTarget(); bulletTarget.delayFrame = info.delayframe; bulletTarget.Target = target; targetList.Add(bulletTarget); ClientParts parts = Team_.GetPartsByID(part.partID); ShowBullet(parts, targetList, part.partType, part.attackPoint, part.bulletPath, part.hitEffect, Vector3.zero); } }
public virtual void Fire(Vector3 position, float angle, float speed, int damage, BulletTarget target) { // 座標を設定 this.transform.position = position; // 向きを設定 this.angle = angle; Vector3 rot = this.transform.eulerAngles; rot.z = angle; this.transform.eulerAngles = rot; // 速度を設定 this.speed = speed; // 敵味方どちらが対象かを設定 this.target = target; this.damage = damage; }
private IEnumerator CastSkill(proto.UseSkill useSkill) { Skill skill = GetSkill(useSkill.partid); if (skill == null) { Debug.Log("skill is null"); yield break; } ShowCast(skill); ClientSkill clientSkill = BattleSys.GetCommanderShip().GetSkillById(useSkill.skillid); // 范围攻击,只生成一个子弹 if (skill.partType == SpellType.AOE) { List <BulletTarget> targetList = new List <BulletTarget>(); for (int i = 0; i < useSkill.fireinfolist_size(); i++) { proto.PartFireInfo info = useSkill.fireinfolist(i); TeamDisplay target = BattleSceneDisplayManager.Instance.GetTeamDisplay(info.targetid); if (target == null) { continue; } BulletTarget bulletTarget = new BulletTarget(); bulletTarget.delayFrame = info.delayframe; bulletTarget.Target = target; targetList.Add(bulletTarget); } ClientParts parts = Team_.GetPartsByID(skill.partID); float x = (float)useSkill.posx / 10000f; float y = (float)useSkill.posy / 10000f; float z = (float)useSkill.posz / 10000f; Vector3 position = new Vector3(x, y, z); ShowBullet(parts, targetList, skill.partType, skill.attackPoint, skill.bulletPath, skill.hitEffect, position, clientSkill); } // 个体攻击,每个对象都生成子弹 else { for (int i = 0; i < useSkill.fireinfolist_size(); i++) { proto.PartFireInfo info = useSkill.fireinfolist(i); TeamDisplay target = BattleSceneDisplayManager.Instance.GetTeamDisplay(info.targetid); if (target == null) { continue; } List <BulletTarget> targetList = new List <BulletTarget>(); BulletTarget bulletTarget = new BulletTarget(); bulletTarget.delayFrame = info.delayframe; bulletTarget.Target = target; targetList.Add(bulletTarget); ClientParts parts = Team_.GetPartsByID(skill.partID); ShowBullet(parts, targetList, skill.partType, skill.attackPoint, skill.bulletPath, skill.hitEffect, Vector3.zero, clientSkill); } } yield return(new WaitForSeconds(1.2f)); for (int i = 0; i < SingEffectList_.Count; i++) { if (SingEffectList_[i] == null) { continue; } Destroy(SingEffectList_[i]); } SingEffectList_.Clear(); }