static void ResetTargePos(Character cha, ChildObject childObject, SkillContext context, excel_skill_event e) { SkillSelectCharactorType selType = (SkillSelectCharactorType)e.evnetParam1; Character selTarget = context.SelectCharactorByType(selType); if (selTarget == null) { return; } float fAngle = (float)e.evnetParam2; if (e.evnetParam3 > 0) { float fAngleR = (float)e.evnetParam3 * 2.0f; float fPct = UnityEngine.Random.Range(0.0f, 1.0f); fAngle += fPct * fAngleR - fAngleR; } Quaternion q = Quaternion.AngleAxis(fAngle, Vector3.up); Vector3 dir = selTarget.Direction; if (e.evnetParam4 > 0 && context.mOwner != selTarget) { dir = selTarget.Position - context.mOwner.Position; dir.y = 0.0f; dir.Normalize(); } dir = q * dir; float dist = (float)e.evnetParam5 * 0.001f; Vector3 targetPos = selTarget.Position + dir * dist; TargetPosTestType testType = (TargetPosTestType)e.evnetParam6; switch (testType) { case TargetPosTestType.None: break; case TargetPosTestType.LineTest: { uint layer = NavigationSystem.GetLayer(context.mOwner.Position); if (NavigationSystem.LineCast(context.mOwner.Position, targetPos, layer, out targetPos)) { break; } break; } case TargetPosTestType.TargetInNav: { if (!NavigationSystem.IsInNavigation(targetPos)) { targetPos = selTarget.Position; } break; } } context.TargetPos = targetPos; }
public Character SelectCharactorByType(SkillSelectCharactorType selType) { switch (selType) { case SkillSelectCharactorType.Self: return(mOwner); case SkillSelectCharactorType.FightTarget: { return(mOwner.GetTarget()); } case SkillSelectCharactorType.HitTarget: return(mHitTarget); case SkillSelectCharactorType.SkillTarget: return(SkillTarget); } return(null); }
static void ResetTargePos(excel_skill_event e) { int[] values = Enum.GetValues(typeof(SkillSelectCharactorType)) as int[]; string[] texts = new string[values.Length]; for (int i = 0; i < values.Length; ++i) { SkillSelectCharactorType t = (SkillSelectCharactorType)values[i]; texts[i] = t.ToDescription(); } e.evnetParam1 = EditorGUILayout.IntPopup("目标", e.evnetParam1, texts, values); texts = new string[] { "技能施放者到目标的方向", "目标正前方" }; values = new int[] { 0, 1 }; e.evnetParam4 = EditorGUILayout.IntPopup("偏移朝向", e.evnetParam4, texts, values); e.evnetParam2 = EditorGUILayout.IntSlider("偏移朝向附加角度", e.evnetParam2, 0, 180); e.evnetParam3 = EditorGUILayout.IntSlider("偏移朝向附加角度随机范围", e.evnetParam3, 0, 180); float dist = (float)e.evnetParam5 * 0.001f; dist = EditorGUILayout.FloatField("偏移距离", dist); e.evnetParam5 = (int)(dist * 1000.0f); texts = new string[] { "无", "边界检测", "是否在导航上" }; values = new int[] { (int)TargetPosTestType.None, (int)TargetPosTestType.LineTest, (int)TargetPosTestType.TargetInNav }; e.evnetParam6 = EditorGUILayout.IntPopup("导航检测", e.evnetParam6, texts, values); }