public void ResetSkillByCategory(SkillCategory category, List <IShooterSkill> skills) { //Update Category int curWeaponId = TriggerImpl.GetCurWeaponId(m_SkillManager.GetOwner()); if (curWeaponId >= 0) { List <IShooterSkill> allCategorySkills = GetSkillsByCategory(category, skills); List <IShooterSkill> categorySkills = GetSkillsByWeaponId(curWeaponId, allCategorySkills); IShooterSkill categorySkill = null; if (categorySkills.Count > 0) { categorySkill = categorySkills[0]; } else { SkillNode firstNode = null; if (m_SkillCategoryDict.TryGetValue(category, out firstNode)) { categorySkill = GetSkillById(skills, firstNode.SkillId); } } if (categorySkill != null) { UpdateNextSkillByCategory(categorySkill, skills, curWeaponId); ChangeSkillByCategory(category, skills, categorySkill.GetSkillId()); } } }
private SkillNode InitNodeByScript(List <IShooterSkill> skills, IShooterSkill ss) { SkillNode first = new SkillNode(); first.SkillId = ss.GetSkillId(); first.Category = ss.GetCategory(); //FIXME:临时解锁全部技能,by lixiaojiang first.IsLocked = false; IShooterSkill nextSkillScript = GetSkillById(skills, ss.GetNextSkillId()); if (nextSkillScript != null) { first.NextSkillNode = InitNodeByScript(skills, nextSkillScript); } IShooterSkill qSkillScript = GetSkillById(skills, ss.GetQSkillId()); if (qSkillScript != null) { first.SkillQ = InitNodeByScript(skills, qSkillScript); } IShooterSkill eSkillScript = GetSkillById(skills, ss.GetESkillId()); if (eSkillScript != null) { first.SkillE = InitNodeByScript(skills, eSkillScript); } return(first); }
/// param:Id[对应到SkillSceneObjManager中的Impact Id],verticalHeight[垂直高度],verticalHeightStart[底面起始高度偏移],sectorDegree[角度范围] /// example:1,10,-1,60 public void Trigger_SendVerticalImpact(string param) { #if SHOOTER_LOG Debug.Log("Trigger_SendVerticalImpact param:" + param); #endif if (m_SceneObjMgr != null) { SkillSceneObjInfo sobjInfo = new SkillSceneObjInfo(param); float verticalHeight = sobjInfo.ExtractNumeric <float>(0, 10.0f); float verticalHeightStart = sobjInfo.ExtractNumeric <float>(1, 0.0f); float sectorDegree = sobjInfo.ExtractNumeric <float>(2, 360.0f); SkillImpactInfos bulletInfo = m_SceneObjMgr.TryGetSkillImpactInfo(sobjInfo.Id); IShooterSkill curSkill = TriggerImpl.GetCurSkill(this.gameObject); if (bulletInfo != null) { bulletInfo = bulletInfo.Clone(); TriggerImpl.ProcessVerticalImpact(this.gameObject, this.gameObject, bulletInfo, verticalHeight, verticalHeightStart, sectorDegree); } else { Debug.Log("Trigger_SendVerticalImpact null!"); } } }
private void UpdateAfterSkillAutoAttack() { if (m_WaiteSkillBuffer.Count > 0) { return; } if (m_CurSkillNode != null) { if (Time.time > GetWaitInputTime(m_CurSkillNode)) { return; } IShooterSkill ss = m_SkillManager.GetSkillById(m_CurSkillNode.SkillId); SkillNode attackNode = m_SkillCategoryDict[SkillCategory.kAttack]; if (ss != null && ss.IsAttackAfterSkill() && attackNode != null && IsSkillCanBreak(m_CurSkillNode, attackNode.Category) && m_WaiteSkillBuffer.Count == 0) { Vector3 targetPos; if (TriggerImpl.GetCurTargetPos(m_SkillManager.GetOwner(), out targetPos)) { SkillInputData data = GetSkillInputData(SkillCategory.kAttack); if (data != null && Vector3.Magnitude(targetPos - m_SkillManager.GetOwner().transform.position) <= data.castRange) { StartAttack(targetPos); } } } } }
/// param:Id[对应到SkillSceneObjManager中的Missle Id] /// example:1 public void Trigger_SummonMissle(string param) { #if SHOOTER_LOG Debug.Log("Trigger_SummonMissle param:" + param); #endif if (m_SceneObjMgr != null) { SkillSceneObjInfo sobjInfo = new SkillSceneObjInfo(param); SceneObject_MissleInfo bulletInfo = m_SceneObjMgr.TryGetMissleInfo(sobjInfo.Id); IShooterSkill curSkill = TriggerImpl.GetCurSkill(this.gameObject); if (bulletInfo != null && bulletInfo.SceneObjInfo != null && curSkill != null) { bulletInfo = bulletInfo.Clone(); bulletInfo.Attacker = this.gameObject; bulletInfo.SceneObjInfo.EffectPos += this.gameObject.transform.position; bulletInfo.MoveStartPos += this.gameObject.transform.position; bulletInfo.MoveTargetPos += curSkill.GetTargetPos(); bulletInfo.MoveVelocity = this.gameObject.transform.rotation * bulletInfo.MoveVelocity; GameObject tBulletObj = TriggerImpl.PlayEffect(bulletInfo.SceneObjInfo); tBulletObj.SendMessage("Active", bulletInfo); } else { Debug.Log("Trigger_SummonMissle null!"); } } }
public override bool IsSkillCanBreak(SkillNode node, SkillCategory category) { if (m_CurSkillNode == null) { return(true); } IShooterSkill skill = m_SkillManager.GetSkillById(node.SkillId); if (skill == null || !skill.IsExecuting()) { return(true); } if (category != SkillCategory.kNone) { if (m_CurSkillNode.Category == SkillCategory.kAttack && category == SkillCategory.kAttack && m_CurSkillNode.NextSkillNode != null) { return(false); } else if (m_CurSkillNode.Category != SkillCategory.kAttack && category == SkillCategory.kAttack) { return(skill.CanBreak()); } else { return(skill.CanBreakBySkill()); } } return(skill.CanBreak()); }
// child should override this function public override bool StopSkill(SkillNode node) { IShooterSkill ss = m_SkillManager.GetCurPlaySkill(); if (ss != null) { ss.StopSkill(); } return(true); }
/// param: /// example: public void Trigger_CanBreakBySkill() { #if SHOOTER_LOG Debug.Log("Trigger_CanBreakBySkill"); #endif IShooterSkill skillLogic = TriggerImpl.GetCurSkill(this.gameObject); if (null != skillLogic) { skillLogic.SetCanBreakBySkill(true); } }
public override float GetSkillCD(SkillNode node) { if (node == null) { return(0); } IShooterSkill skill = m_SkillManager.GetSkillById(node.SkillId); if (skill == null) { return(0); } return(skill.GetCD()); }
public override void BeginSkillCD(SkillNode node) { if (node == null) { return; } IShooterSkill skill = m_SkillManager.GetSkillById(node.SkillId); if (skill == null) { return; } skill.BeginCD(); }
public override bool IsSkillInCD(SkillNode node) { if (node == null) { return(false); } IShooterSkill skill = m_SkillManager.GetSkillById(node.SkillId); if (skill == null) { return(false); } return(skill.IsInCD()); }
public override float GetLockInputTime(SkillNode node) { if (node == null) { return(0); } IShooterSkill skill = m_SkillManager.GetSkillById(node.SkillId); if (skill == null) { return(0); } return(node.StartTime + skill.GetLockInputTime()); }
public void ChangeSkillByCategory(SkillCategory category, List <IShooterSkill> skills, int skillId) { IShooterSkill targetSkill = GetSkillById(skills, skillId); if (targetSkill == null) { return; } if (IsCategoryContain(targetSkill.GetSkillId())) { m_SkillCategoryDict.Remove(targetSkill.GetCategory()); } SkillNode first_node = InitNodeByScript(skills, targetSkill); m_SkillCategoryDict[targetSkill.GetCategory()] = first_node; }
public override SkillInputData GetSkillInputData(SkillCategory category) { SkillNode head = null; if (m_SkillCategoryDict.TryGetValue(category, out head)) { IShooterSkill ss = m_SkillManager.GetSkillById(head.SkillId); if (ss != null) { SkillInputData data = new SkillInputData(); data.castRange = ss.GetSkillCastRange(); data.targetChooseRange = ss.GetTargetChooseRange(); return(data); } } return(null); }
public void UpdateNextSkillByCategory(IShooterSkill categorySkill, List <IShooterSkill> skills, int curWeaponId) { if (categorySkill != null) { //Update next skill List <ShooterSkillId> nextSkillIdList = categorySkill.GetNextSkillIdList(); if (nextSkillIdList != null && nextSkillIdList.Count > 0) { foreach (ShooterSkillId skillId in nextSkillIdList) { IShooterSkill tSkill = GetSkillById(skills, (int)skillId); if (tSkill != null && tSkill.GetWeaponId() == curWeaponId) { categorySkill.SetNextSkillId((int)skillId); break; } } } } }
/// param:Id[对应到SkillSceneObjManager中的Impact Id] /// example:1 public void Trigger_SendImpact(string param) { #if SHOOTER_LOG Debug.Log("Trigger_SendImpact param:" + param); #endif if (m_SceneObjMgr != null) { SkillSceneObjInfo sobjInfo = new SkillSceneObjInfo(param); SkillImpactInfos bulletInfo = m_SceneObjMgr.TryGetSkillImpactInfo(sobjInfo.Id); IShooterSkill curSkill = TriggerImpl.GetCurSkill(this.gameObject); if (bulletInfo != null) { bulletInfo = bulletInfo.Clone(); TriggerImpl.ProcessImpact(this.gameObject, this.gameObject, bulletInfo); } else { Debug.Log("Trigger_SendImpact null!"); } } }
/// param:Duration[持续时间],BoneName[骨骼名字],AnimName[动画名字] /// example:0.5,ef_righthand,QiangShou_Test09 public void Trigger_StartAnimProcedure(string param) { #if SHOOTER_LOG Debug.Log("Trigger_StartAnimProcedure param:"); #endif SkillAnimProcedure tAniProce = this.gameObject.GetComponent <SkillAnimProcedure>(); if (tAniProce == null) { LogicSystem.GfxLog("Trigger_StartAnimProcedure SkillAnimProcedure miss!"); return; } IShooterSkill curSkill = TriggerImpl.GetCurSkill(this.gameObject); if (curSkill == null) { Debug.Log("Trigger_StartAnimProcedure curSkill null!"); return; } SkillAnimProcedureInfo info = new SkillAnimProcedureInfo(param); info.TargetPos = curSkill.GetTargetPos(); tAniProce.StartAnimProcedure(info); }
public bool StartSkillById(int skillid, Vector3 targetPos) { IShooterSkill ss = GetSkillById(skillid); if (ss == null) { return(false); } if (m_CurPlaySkill == null || m_CurPlaySkill.CanBreakBySkill() && ss.CanStart()) { if (m_CurPlaySkill != null) { m_CurPlaySkill.StopSkill(); } if (ss.StartSkill(targetPos)) { m_CurPlaySkill = ss; return(true); } } return(false); }
void OnClick() { if (LogicSystem.PlayerSelf != null) { IShooterSkill curSkill = TriggerImpl.GetCurSkill(LogicSystem.PlayerSelf); if (curSkill != null && curSkill.IsExecuting()) { return; } TriggerImpl.SwitchNextWeapon(LogicSystem.PlayerSelf); SkillWeaponInfo info = TriggerImpl.GetCurWeaponInfo(LogicSystem.PlayerSelf); if (info != null) { UISprite sp = this.GetComponent <UISprite>(); if (null != sp) { sp.spriteName = info.SpriteName; } } } }
public bool ForceStartSkillById(int skillid) { IShooterSkill ss = GetSkillById(skillid); if (ss == null) { return(false); } if (m_CurPlaySkill == null || ss.CanStart()) { Vector3 targetPos = Vector3.zero; if (m_CurPlaySkill != null) { targetPos = m_CurPlaySkill.GetTargetPos(); m_CurPlaySkill.StopSkill(); } if (ss.StartSkill(targetPos)) { m_CurPlaySkill = ss; return(true); } } return(false); }
/// param:Id[对应到SkillSceneObjManager中的Impact Id],center[box中心],size[box大小] /// example:602,0 1 1.5,1 3 3 public void Trigger_SendImpactByBoxCollider(string param) { #if SHOOTER_LOG Debug.Log("Trigger_SendImpactByBoxCollider param:" + param); #endif if (m_SceneObjMgr != null) { SkillSceneObjInfo sobjInfo = new SkillSceneObjInfo(param); Vector3 center = sobjInfo.ExtractVector3(0); Vector3 size = sobjInfo.ExtractVector3(1); SkillImpactInfos bulletInfo = m_SceneObjMgr.TryGetSkillImpactInfo(sobjInfo.Id); IShooterSkill curSkill = TriggerImpl.GetCurSkill(this.gameObject); if (bulletInfo != null) { bulletInfo = bulletInfo.Clone(); TriggerImpl.ProcessImpactByBoxCollider(this.gameObject, this.gameObject, bulletInfo, center, size); } else { Debug.Log("Trigger_SendImpact null!"); } } }