public void SetColliders(Role user, int skillId) { for (int i = 0; i < mColliderList.Count; ++i) { ColliderParam eCollider = mColliderList[i].GetComponent <ColliderParam>(); if (eCollider) { eCollider.InitCollider(user); eCollider.mSkillId = skillId; } } }
public static ColliderParam ColliderParamFactory(ColliderShape shape) { ColliderParam ret = null; if (shape == ColliderShape.Rect) { ret = CreateInstance <RectColliderParam>(); } else if (shape == ColliderShape.Sphere) { ret = CreateInstance <SphereColliderParam>(); } else if (shape == ColliderShape.Capsule) { ret = CreateInstance <CapsuleColliderParam>(); } else { Debug.LogError("not implemented"); } return(ret); }
private void DrawHitboxes() { traceAnimMode = (TraceAnimMode)EditorGUILayout.Popup("trace Animation Mode", (int)traceAnimMode, new string[] { "Off", "AnimationWindow", "Scene(PlayOnly)" }); targetComponents.inspectorTemp.traceAnimMode = (int)traceAnimMode; if (traceAnimMode == TraceAnimMode.AnimationWindow) { var currentFrame = AnimationHelper.GetCurrentFrame(); targetComponents.inspectorTemp.keyframeIndex = currentFrame; var AnimGuiClipname = AnimationHelper.GetCurrentClipName(); var preanimationindex = targetComponents.inspectorTemp.animationindex; targetComponents.inspectorTemp.animationindex = EditorGUILayout.Popup("AnimStateName", targetComponents.inspectorTemp.animationindex, targetComponents.GetStateNames().ToArray()); var selectedStateName = targetComponents.GetStateNames()[targetComponents.inspectorTemp.animationindex]; var selectedState = targetComponents.GetState(selectedStateName); if (AnimGuiClipname != selectedState.clip.name) { AnimationHelper.SetCurrentClip(selectedState.clip); Debug.Log("From HitBoxComponent: Now AnimationWindow is synchronized with HitBoxComponent. If you want to change AnimationClip of AnimationWindow, turn \"TraceAnimMode\" off on HitBoxComponent Inspector"); } EditorGUILayout.LabelField("Clipname", selectedState.clip.name); if (targetComponents.inspectorTemp.keyframeIndex >= targetComponents.hitboxes[selectedStateName].keyframes.Count) { return; } ; } if (traceAnimMode == TraceAnimMode.Scene) { if (!Application.isPlaying) { return; } var currentFrame = targetComponents.GetNowKeyFrame(); targetComponents.inspectorTemp.keyframeIndex = currentFrame; var nowstate = targetComponents.GetNowState(); EditorGUILayout.LabelField("NowStateName", nowstate.name); targetComponents.inspectorTemp.animationindex = targetComponents.GetStateNames().FindIndex(e => e == nowstate.name); EditorGUILayout.LabelField("Clipname", nowstate.clip.name); } if (traceAnimMode == TraceAnimMode.Off) { targetComponents.inspectorTemp.animationindex = EditorGUILayout.Popup("AnimStateName", targetComponents.inspectorTemp.animationindex, targetComponents.GetStateNames().ToArray()); var statename = targetComponents.GetStateNames()[targetComponents.inspectorTemp.animationindex]; EditorGUILayout.LabelField("ClipName", targetComponents.GetClipName(statename)); } EditorGUILayout.LabelField("Flip", targetComponents.direction.ToString()); if (Application.isPlaying && traceAnimMode == TraceAnimMode.Off) { if (GUILayout.Button("Show Now KeyFrame Data")) { var nowanim = targetComponents.GetNowStateName(); var keyframe = targetComponents.GetNowKeyFrame(); targetComponents.inspectorTemp.animationindex = targetComponents.GetStateNames().FindIndex(0, e => e == nowanim); targetComponents.inspectorTemp.keyframeIndex = keyframe; } } var animname = targetComponents.GetStateNames()[targetComponents.inspectorTemp.animationindex]; var keyframenum = targetComponents.hitboxes[animname].keyframes.Count; targetComponents.inspectorTemp.keyframeIndex = EditorGUILayout.Popup("KeyFrameIndex", targetComponents.inspectorTemp.keyframeIndex, Enumerable.Range(0, keyframenum).Select(e => e.ToString() + (targetComponents.hitboxes[animname].keyframes[e].colliders.Count > 0 ? " *" : "")).ToArray()); if (traceAnimMode == TraceAnimMode.AnimationWindow) { AnimationHelper.SetCurrentFrame(targetComponents.inspectorTemp.keyframeIndex); AnimationHelper.RepaintOpenAnimationWindow(); } var animationindex = targetComponents.inspectorTemp.animationindex; var keyframeIndex = targetComponents.inspectorTemp.keyframeIndex; for (int i = 0; i < targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.Count; i++) { GUILayout.BeginVertical(hitboxBackgroundStyle); GUILayout.Label("Hitbox " + i); var colliderdata = targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders[i]; //collider info colliderdata.tag = EditorGUILayout.TextField("tag", colliderdata.tag); colliderdata.layer = EditorGUILayout.TextField("layer", colliderdata.layer); colliderdata.dulation = EditorGUILayout.IntField("dulation", colliderdata.dulation); colliderdata.data = EditorGUILayout.TextField("data", colliderdata.data); //collider shape if (colliderdata.colliderParam == null) { colliderdata.colliderParam = CreateInstance <RectColliderParam>(); } var selectedshape = (ColliderShape)EditorGUILayout.EnumPopup(colliderdata.colliderParam.GetShape()); var newcolliderparam = ColliderParam.ColliderParamFactory(selectedshape); if (newcolliderparam != null && colliderdata.colliderParam.GetShape() != selectedshape) { var path = AssetDatabase.GetAssetPath(targetComponents.hitboxes); AssetDatabase.RemoveObjectFromAsset(colliderdata.colliderParam); colliderdata.colliderParam = newcolliderparam; AssetDatabase.AddObjectToAsset(colliderdata.colliderParam, path); AssetDatabase.Refresh(); AssetDatabase.ImportAsset(path); } DrawColliderParam(colliderdata.colliderParam); EditorUtility.SetDirty(colliderdata.colliderParam); if (GUILayout.Button("Remove HitBox", GUILayout.Width(100))) { var path = AssetDatabase.GetAssetPath(targetComponents.hitboxes); AssetDatabase.RemoveObjectFromAsset(targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders[i].colliderParam); AssetDatabase.Refresh(); AssetDatabase.ImportAsset(path); for (int j = i; j < targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.Count - 1; j++) { targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders[j] = targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders[j + 1]; } targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.RemoveAt(targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.Count - 1); SceneView.RepaintAll(); } GUILayout.EndVertical(); //separate GUILayout.BeginVertical(GUILayout.Height(10)); GUILayout.Label("", GUILayout.Height(10)); GUILayout.EndVertical(); } if (GUILayout.Button("Add Hitbox", GUILayout.Width(100))) { var addData = new KeyFrameCollider(); addData.colliderParam = CreateInstance <RectColliderParam>(); addData.startframe = keyframeIndex; targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders.Add(addData); SceneView.RepaintAll(); var path = AssetDatabase.GetAssetPath(targetComponents.hitboxes); AssetDatabase.AddObjectToAsset(addData.colliderParam, path); //インポート処理を走らせて最新の状態にする AssetDatabase.Refresh(); AssetDatabase.ImportAsset(path); } }
private void DrawColliderParam(ColliderParam colliderParam) { EditorGUI.BeginChangeCheck(); if (colliderParam is RectColliderParam) { var rect = colliderParam as RectColliderParam; var newrect = EditorGUILayout.RectField(rect.rect); rect.rect = newrect; var is2d = EditorGUILayout.Toggle("is 2D", rect.is2d); rect.is2d = is2d; } else if (colliderParam is SphereColliderParam) { var sphere = colliderParam as SphereColliderParam; var newposition = EditorGUILayout.Vector3Field("position", sphere.position); sphere.position = newposition; var newradius = EditorGUILayout.FloatField("radius", sphere.radius); sphere.radius = newradius; } else if (colliderParam is CapsuleColliderParam) { var capsule = colliderParam as CapsuleColliderParam; var newstartposition = EditorGUILayout.Vector3Field("startpos", capsule.start); capsule.start = newstartposition; var newendposition = EditorGUILayout.Vector3Field("endpos", capsule.end); capsule.end = newendposition; var newradius = EditorGUILayout.FloatField("radius", capsule.radius); capsule.radius = newradius; } else { Debug.Log("not implemented"); } GUILayout.BeginHorizontal(); var additionalDataInfoLabel = colliderParam.additionalData == null ? "null" : colliderParam.additionalData.GetType().ToString(); EditorGUILayout.LabelField(additionalDataInfoLabel); if (GUILayout.Button("Set Additional Collider Data")) { GenericMenu menu = new GenericMenu(); var assembly = Assembly.Load("Assembly-CSharp"); var dlist = assembly.GetTypes().Where(c => c.IsSubclassOf(typeof(ColliderAdditionalData))).ToList(); menu.AddItem(new GUIContent("None"), false, () => { if (colliderParam.additionalData != null) { var path = AssetDatabase.GetAssetPath(colliderParam.additionalData); AssetDatabase.RemoveObjectFromAsset(colliderParam.additionalData); colliderParam.additionalData = null; AssetDatabase.Refresh(); AssetDatabase.ImportAsset(path); } }); // forward slashes nest menu items under submenus foreach (var info in dlist) { menu.AddItem(new GUIContent(info.ToString()), false, e => { if (colliderParam.additionalData != null) { var path = AssetDatabase.GetAssetPath(colliderParam.additionalData); AssetDatabase.RemoveObjectFromAsset(colliderParam.additionalData); } colliderParam.additionalData = (ColliderAdditionalData)CreateInstance(info.ToString()); var parentpath = AssetDatabase.GetAssetPath(colliderParam); AssetDatabase.AddObjectToAsset(colliderParam.additionalData, parentpath); //インポート処理を走らせて最新の状態にする AssetDatabase.Refresh(); AssetDatabase.ImportAsset(parentpath); } , info); } menu.ShowAsContext(); } GUILayout.EndHorizontal(); if (colliderParam.additionalData != null) { colliderParam.additionalData.DrawInspectorGUI(); } if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(colliderParam); } }
public virtual void OnHitEnter(Collider other) { if (mRole.mRoleData.mHp <= 0) { return; } ColliderParam colliderParam = other.gameObject.GetComponent <ColliderParam>(); if (colliderParam == null) { return; } SkillConfig.SkillInfo skillInfo = SkillConfig.singleton.GetSkillInfo(colliderParam.mSkillId); if (skillInfo == null) { return; } GameObject sendRoleGO; Role sendRole; if (colliderParam) { if (colliderParam.HasCollider(mRole)) { return; } colliderParam.AddCollider(mRole); sendRole = colliderParam.GetUserRole(); sendRoleGO = sendRole.gameObject; if (sendRole.mRoleData.mGroupType == mRole.mRoleData.mGroupType) { return; } } else { return; } foreach (var item in skillInfo.mBuffIdList) { if (item.mTrigger == IBuff.BuffStage.Hit) { if (item.mBuffAttach == IBuff.BuffAttach.Self) { sendRole.mBuffSystem.AddBuff(sendRole, item.mType, item.mTypeId); } else if (item.mBuffAttach == IBuff.BuffAttach.Target) { if (skillInfo.mTargetType == SkillConfig.TargetType.None && !mRole.mBuffSystem.EnableSelect()) { continue; } mRole.mBuffSystem.AddBuff(sendRole, item.mType, item.mTypeId); } else if (item.mBuffAttach == IBuff.BuffAttach.Area) { AreaBuffTriggerMgr.singleton.AddBuff(sendRole, sendRole.transform.position, item.mTypeId); } } } }