Exemplo n.º 1
0
    public static void DoLoopEvent(SkillStage stage, int curTick)
    {
        excel_skill_stage stageInfo = stage.mStageInfo;

        if (stageInfo.events == null)
        {
            return;
        }
        for (int i = 0; i < stageInfo.events.Length; ++i)
        {
            int eventID = stageInfo.events[i];
            excel_skill_event eventInfo = excel_skill_event.Find(eventID);
            if ((int)SkillEventTriggerType.Loop != eventInfo.triggerType)
            {
                continue;
            }
            if (!IsEventTrait(SkillEventTrait.Server, eventInfo))
            {
                continue;
            }
            int tick = curTick - eventInfo.triggerParam1;
            if (tick >= 0 && eventInfo.triggerParam2 > 0 && tick % eventInfo.triggerParam2 == 0)
            {
                SkillEventRegister.SkillEventMethod e = null;
                SkillEventType type = (SkillEventType)eventInfo.eventType;
                if (!SkillEventRegister.events.TryGetValue(type, out e))
                {
                    continue;
                }
                e(stage.mSkillContext.mOwner, null, stage.mSkillContext, eventInfo);
            }
        }
    }
Exemplo n.º 2
0
    static void SkillMove(Character cha, ChildObject childObj, SkillContext context, excel_skill_event e)
    {
        if (cha == null)
        {
            return;
        }
        SkillMoveDataType type = (SkillMoveDataType)e.evnetParam1;

        if (type == SkillMoveDataType.MoveType1)
        {
            float     time      = (float)e.evnetParam2 * 0.001f;
            SkillMove skillMove = IAction.CreateAction <SkillMove>();
            skillMove.Init1(cha, context.TargetPos, time);
            cha.AddAction(skillMove);
        }
        else if (type == SkillMoveDataType.MoveType2)
        {
            float time  = (float)e.evnetParam2 * 0.001f;
            float speed = (float)e.evnetParam3 * 0.001f;

            Vector3 dir = context.TargetPos - cha.Position;

            SkillMove skillMove = IAction.CreateAction <SkillMove>();
            skillMove.Init2(cha, dir, speed, time);
            cha.AddAction(skillMove);
        }
        context.SetSkillContextFlag(SkillContextFlag.SyncPosOnSkillEnd, true);
    }
Exemplo n.º 3
0
 public void DoLoopEvent()
 {
     if (mEvents == null)
     {
         return;
     }
     for (int i = 0; i < mEvents.Count; ++i)
     {
         excel_skill_event eventInfo = mEvents[i];
         if (eventInfo.triggerType != (int)SkillEventTriggerType.Loop)
         {
             continue;
         }
         if (!IsServerEvent(eventInfo))
         {
             continue;
         }
         int tick = mTick - eventInfo.triggerParam1;
         if (tick >= 0 && eventInfo.triggerParam2 > 0 && tick % eventInfo.triggerParam2 == 0)
         {
             SkillEventRegister.SkillEventMethod e = null;
             SkillEventType type = (SkillEventType)eventInfo.eventType;
             if (!SkillEventRegister.events.TryGetValue(type, out e))
             {
                 continue;
             }
             e(null, this, mContext, eventInfo);
         }
     }
 }
    static void SkillMoveEvent(excel_skill_event e)
    {
        int[]    values = Enum.GetValues(typeof(SkillMoveDataType)) as int[];
        string[] texts  = new string[values.Length];
        for (int i = 0; i < values.Length; ++i)
        {
            SkillMoveDataType t = (SkillMoveDataType)values[i];
            texts[i] = t.ToDescription();
        }
        e.evnetParam1 = EditorGUILayout.IntPopup("移动类型", e.evnetParam1, texts, values);
        SkillMoveDataType moveType = (SkillMoveDataType)e.evnetParam1;

        if (moveType == SkillMoveDataType.MoveType1)
        {
            float time = (float)e.evnetParam2 * 0.001f;
            time          = EditorGUILayout.FloatField("移动时间", time);
            e.evnetParam2 = (int)(time * 1000.0f);
        }
        else if (moveType == SkillMoveDataType.MoveType2)
        {
            float time = (float)e.evnetParam2 * 0.001f;
            time          = EditorGUILayout.FloatField("移动时间(s)", time);
            e.evnetParam2 = (int)(time * 1000.0f);

            float speed = (float)e.evnetParam3 * 0.001f;
            speed         = EditorGUILayout.FloatField("移动速度(m/s)", speed);
            e.evnetParam3 = (int)(speed * 1000.0f);
        }
    }
    static void CreateChildObject(excel_skill_event e)
    {
        GUIContent c = new GUIContent("子物体ID", "child_object_list的ID");

        e.evnetParam1 = EditorGUILayout.IntField(c, e.evnetParam1);

        bool multi = (e.evnetParam2 > 0);

        multi = EditorGUILayout.Toggle("发射多个子物体", multi);
        if (multi)
        {
            e.evnetParam3 = EditorGUILayout.IntField("子物体个数", e.evnetParam3);
            e.evnetParam4 = EditorGUILayout.IntField("间隔角度", e.evnetParam4);
        }

        Vector3 offset = new Vector3(
            (float)e.evnetParam5 * 0.001f,
            (float)e.evnetParam6 * 0.001f,
            (float)e.evnetParam7 * 0.001f
            );

        offset = EditorGUILayout.Vector3Field("初始偏移位置", offset);

        e.evnetParam5 = (int)(offset.x * 1000.0f);
        e.evnetParam6 = (int)(offset.y * 1000.0f);
        e.evnetParam7 = (int)(offset.z * 1000.0f);
    }
    static void PlayAnimation(excel_skill_event e)
    {
        GUIContent c = new GUIContent("动画ID", "anim_list的ID");

        e.evnetParam1 = EditorGUILayout.IntField(c, e.evnetParam1);

        string[] traitTxts = new string[]
        {
            "循环播放", "逆向播放", "只播上身动画", "高优先级动画"
        };
        e.evnetParam2 = MaskField("播动画特性", e.evnetParam2, traitTxts);
        e.evnetParam3 = EditorGUILayout.IntField("起始帧", e.evnetParam3);

        bool chgSpeed = e.evnetParam4 > 0;

        chgSpeed      = EditorGUILayout.ToggleLeft("改变速度", chgSpeed);
        e.evnetParam4 = chgSpeed ? 1 : 0;

        if (chgSpeed)
        {
            c = new GUIContent("动画速度", "1.0是正常速度");
            float speed = (float)e.evnetParam5 * 0.001f;
            speed         = EditorGUILayout.FloatField(c, speed);
            e.evnetParam5 = (int)(speed * 1000.0f);
        }
    }
Exemplo n.º 7
0
    protected void Init(Transform parentObj)
    {
        mLifeStartTime = Time.ElapsedSeconds;
        mParentObj     = parentObj;

        InitPos(parentObj);
        InitDir();

        mTick = 0;

        mEvents = new List <excel_skill_event>();
        for (int i = 0; i < mData.events.Length; ++i)
        {
            int evtID             = mData.events[i];
            excel_skill_event evt = excel_skill_event.Find(evtID);
            if (evt == null)
            {
                continue;
            }
            mEvents.Add(evt);
        }

        DoEvent(SkillEventTriggerType.StageBegin);

        Vector3 v = Position;

        v.y     += ((float)mData.yOffset * 0.001f);
        Position = v;
    }
Exemplo n.º 8
0
    void DoEvent(SkillEventTriggerType triggerType, int param1 = -1, int param2 = -1)
    {
        if (mEvents == null)
        {
            return;
        }
        for (int i = 0; i < mEvents.Count; ++i)
        {
            excel_skill_event eventInfo = mEvents[i];
            if (!IsServerEvent(eventInfo))
            {
                continue;
            }
            if ((ushort)triggerType != eventInfo.triggerType)
            {
                continue;
            }
            if (param1 != -1 && param1 != eventInfo.triggerParam1)
            {
                continue;
            }
            if (param2 != -1 && param2 != eventInfo.triggerParam2)
            {
                continue;
            }

            SkillEventRegister.SkillEventMethod e = null;
            SkillEventType type = (SkillEventType)eventInfo.eventType;
            if (!SkillEventRegister.events.TryGetValue(type, out e))
            {
                continue;
            }
            e(null, this, mContext, eventInfo);
        }
    }
Exemplo n.º 9
0
    bool IsServerEvent(excel_skill_event evt)
    {
        int exePort = (int)evt.trait;

        if ((exePort & (1 << (int)SkillEventTrait.Server)) != 0)
        {
            return(true);
        }
        return(false);
    }
Exemplo n.º 10
0
    public static bool IsEventTrait(SkillEventTrait trait, excel_skill_event eventInfo)
    {
        if (eventInfo == null)
        {
            return(false);
        }
        int flag = 1 << (int)trait;

        if ((eventInfo.trait & flag) != 0)
        {
            return(true);
        }
        return(false);
    }
Exemplo n.º 11
0
    public static void DoEvent(SkillStage stage, SkillEventTriggerType triggerType, int param1 = -1, int param2 = -1)
    {
        excel_skill_stage stageInfo = stage.mStageInfo;

        if (stageInfo.events == null)
        {
            return;
        }
        for (int i = 0; i < stageInfo.events.Length; ++i)
        {
            int eventID = stageInfo.events[i];
            excel_skill_event eventInfo = excel_skill_event.Find(eventID);
            if ((int)triggerType != eventInfo.triggerType)
            {
                continue;
            }
            if (!IsEventTrait(SkillEventTrait.Server, eventInfo))
            {
                continue;
            }
            if (param1 != -1 && param1 != eventInfo.triggerParam1)
            {
                continue;
            }
            if (param2 != -1 && param2 != eventInfo.triggerParam2)
            {
                continue;
            }

            SkillEventRegister.SkillEventMethod e = null;
            SkillEventType type = (SkillEventType)eventInfo.eventType;
            if (!SkillEventRegister.events.TryGetValue(type, out e))
            {
                continue;
            }
            e(stage.Owner, null, stage.mSkillContext, eventInfo);
        }
    }
Exemplo n.º 12
0
    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);
    }
Exemplo n.º 13
0
    static void TowardTargetPos(Character cha, ChildObject childObj, SkillContext context, excel_skill_event e)
    {
        Vector3 ownerPos = Vector3.zero;

        if (cha != null)
        {
            ownerPos = cha.Position;
        }
        //else if (childObject != null)
        //    ownerPos = childObject.Position;
        else
        {
            return;
        }
        Vector3 dir = context.TargetPos - ownerPos;

        if (cha != null)
        {
            cha.Direction = dir;
        }
        //else if (childObject != null)
        //    childObject.Direction = dir;
    }
Exemplo n.º 14
0
    static void PlayAnimation(Character cha, ChildObject childObject, SkillContext context, excel_skill_event e)
    {
        if (cha == null)
        {
            return;
        }

        int id    = e.evnetParam1;
        int trait = e.evnetParam2;

        bool loop         = ((trait & 0x1) != 0);
        bool reverse      = ((trait & 0x2) != 0);
        bool onlyup       = ((trait & 0x4) != 0);
        bool highPriority = ((trait & 0x8) != 0);

        float time  = 0.03333f * (float)e.evnetParam3;
        float speed = 1.0f;

        if (e.evnetParam4 > 0)
        {
            speed = (float)e.evnetParam5 * 0.001f;
        }

        AnimPlayType animType = AnimPlayType.General;

        if (onlyup)
        {
            animType = AnimPlayType.Up;
            cha.PlayAnimation(id, animType, speed, loop, reverse, 0.0f, time);
        }
        else
        {
            if (highPriority)
            {
                cha.PlayPriorityAnimation(id, AnimPriority.Skill, speed, loop, reverse, 0.0f, time);
            }
            else
            {
                cha.PlayAnimation(id, AnimPlayType.General, speed, loop, reverse, 0.0f, time);
            }
        }
        context.mPlayingAnimations.Add(id);
    }
Exemplo n.º 15
0
 static void Hit(excel_skill_event e)
 {
     e.evnetParam1 = EditorGUILayout.IntField("判定ID", e.evnetParam1);
 }
Exemplo n.º 16
0
    static void Hit(Character cha, ChildObject childObj, SkillContext context, excel_skill_event e)
    {
        int hitID = e.evnetParam1;

        SkillHit.Hit(context.mOwner, hitID, context);
    }
Exemplo n.º 17
0
    static void CreateChildObject(Character cha, ChildObject childObject, SkillContext context, excel_skill_event e)
    {
        Vector3 offset = new Vector3(
            (float)e.evnetParam5 * 0.001f,
            (float)e.evnetParam6 * 0.001f,
            (float)e.evnetParam7 * 0.001f
            );

        Transform t = null;

        if (cha != null)
        {
            t = cha.transform;
        }
        else if (childObject != null)
        {
            t = childObject.transform;
        }
        if (t == null)
        {
            return;
        }

        if (e.evnetParam2 == 0)
        {
            ChildObject co = ChildObject.CreateChildObject(e.evnetParam1, context, t);
            if (co == null)
            {
                Debug.LogError("子物体发射失败,技能事件ID: " + e.id + "; 子物体ID: " + e.evnetParam1);
                return;
            }
            co.Position += co.transform.forward * offset.z;
            co.Position += co.transform.right * offset.x;
            co.Position += co.transform.up * offset.y;
            // context.mChildObjects.Add(co);
        }
        else
        {
            int num = e.evnetParam3;
            if (num <= 1)
            {
                Debug.LogError("发射数量小于等于1,请修改事件为发射单个子物体,技能事件ID: " + e.id);
            }
            float angle = (float)e.evnetParam4;
            float div   = (num <= 1 ? 0.0f : 1.0f / (float)(num - 1));
            float half  = (num <= 1 ? 0.0f : angle * 0.5f);

            float targetPosDist = (context.TargetPos - context.mOwner.Position).Length();

            Vector3 origTargetPos = context.TargetPos;

            for (int i = 0; i < num; ++i)
            {
                float      yaw = angle * (float)i * div - half;
                Quaternion q   = Quaternion.AngleAxis(yaw, Vector3.up);

                Vector3 dir = q * context.mOwner.Direction;
                context.TargetPos = context.mOwner.Position + dir.normalize * targetPosDist;

                ChildObject co = ChildObject.CreateChildObject(e.evnetParam1, context, t);
                if (co == null)
                {
                    Debug.LogError("子物体发射失败,技能事件ID: " + e.id + "; 子物体ID: " + e.evnetParam1);
                    return;
                }
                co.transform.forward = q * co.transform.forward;

                co.Position += co.transform.forward * offset.z;
                co.Position += co.transform.right * offset.x;
                co.Position += co.transform.up * offset.y;

                // context.mChildObjects.Add(co);
            }
        }
    }
Exemplo n.º 18
0
    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;
    }