Beispiel #1
0
 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;
         }
     }
 }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
        }
    }
Beispiel #4
0
    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);
        }
    }
Beispiel #5
0
    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);
                }
            }
        }
    }