Esempio n. 1
0
        public static float FindPrevKeyframeTime(USSequencer sequence)
        {
            float num = 0f;

            USTimelineContainer[] timelineContainers = sequence.TimelineContainers;
            for (int i = 0; i < timelineContainers.Length; i++)
            {
                USTimelineContainer uSTimelineContainer = timelineContainers[i];
                USTimelineBase[]    timelines           = uSTimelineContainer.Timelines;
                for (int j = 0; j < timelines.Length; j++)
                {
                    USTimelineBase     uSTimelineBase     = timelines[j];
                    USTimelineProperty uSTimelineProperty = uSTimelineBase as USTimelineProperty;
                    if (uSTimelineProperty)
                    {
                        foreach (USPropertyInfo current in uSTimelineProperty.Properties)
                        {
                            foreach (USInternalCurve current2 in current.curves)
                            {
                                float num2 = current2.FindPrevKeyframeTime(sequence.RunningTime);
                                if (num2 > num)
                                {
                                    num = num2;
                                }
                            }
                        }
                    }
                }
            }
            return(num);
        }
Esempio n. 2
0
        public static float FindPrevKeyframeTime(USSequencer sequence)
        {
            float keyframeTime = 0.0f;

            foreach (USTimelineContainer timelineContainer in sequence.TimelineContainers)
            {
                foreach (USTimelineBase timelineBase in timelineContainer.Timelines)
                {
                    USTimelineProperty timelineProperty = timelineBase as USTimelineProperty;
                    if (!timelineProperty)
                    {
                        continue;
                    }

                    foreach (var property in timelineProperty.Properties)
                    {
                        foreach (USInternalCurve curve in property.curves)
                        {
                            float time = curve.FindPrevKeyframeTime(sequence.RunningTime);
                            if (time > keyframeTime)
                            {
                                keyframeTime = time;
                            }
                        }
                    }
                }
            }

            return(keyframeTime);
        }
Esempio n. 3
0
        public static void ProcessPropertyTimeline(USTimelineProperty propertyTimeline)
        {
            if (!propertyTimeline || propertyTimeline.Properties == null)
            {
                return;
            }

            var propertyList = new List <USPropertyInfo>();

            for (var n = 0; n < propertyTimeline.Properties.Count; n++)
            {
                if (propertyTimeline.Properties[n] == null)
                {
                    continue;
                }

                var usPropertyInfo = (USPropertyInfo)CreateInstance(typeof(USPropertyInfo));
                usPropertyInfo.CreatePropertyInfo(propertyTimeline.Properties[n].PropertyType);
                usPropertyInfo.Component     = propertyTimeline.Properties[n].Component;
                usPropertyInfo.ComponentType = propertyTimeline.Properties[n].Component.GetType().ToString();
                usPropertyInfo.propertyInfo  = propertyTimeline.Properties[n].propertyInfo;
                usPropertyInfo.fieldInfo     = propertyTimeline.Properties[n].fieldInfo;
                propertyList.Add(usPropertyInfo);

                for (var curveIndex = 0; curveIndex < usPropertyInfo.curves.Count; curveIndex++)
                {
                    var newCurve = usPropertyInfo.curves[curveIndex];
                    var oldCurve = propertyTimeline.Properties[n].curves[curveIndex];

                    foreach (var keyframe in oldCurve.Keys)
                    {
                        var newKeyframe = newCurve.AddKeyframe(keyframe.Time, keyframe.Value);
                        newKeyframe.InTangent  = keyframe.InTangent;
                        newKeyframe.OutTangent = keyframe.OutTangent;
                    }
                }
            }

            for (var n = 0; n < propertyTimeline.Properties.Count; n++)
            {
                propertyTimeline.RemoveProperty(propertyTimeline.Properties[n]);
            }

            propertyTimeline.Properties.Clear();
            for (var n = 0; n < propertyList.Count; n++)
            {
                propertyTimeline.AddProperty(propertyList[n]);
            }
        }
Esempio n. 4
0
        private static List <UnityEngine.Object> CollectUsedAssetsForProperty(USTimelineProperty timelineProperty)
        {
            var usedAssets = new List <UnityEngine.Object>();

            if (timelineProperty.Properties == null)
            {
                return(usedAssets);
            }

            foreach (var propertyInfo in timelineProperty.Properties)
            {
                if (!propertyInfo || !propertyInfo.Component)
                {
                    continue;
                }

                usedAssets.Add(propertyInfo);

                if (propertyInfo.curves == null)
                {
                    continue;
                }

                foreach (var curve in propertyInfo.curves)
                {
                    usedAssets.Add(curve);

                    if (curve.Keys == null)
                    {
                        continue;
                    }

                    foreach (var internalKeyframe in curve.Keys)
                    {
                        usedAssets.Add(internalKeyframe);
                    }
                }
            }

            return(usedAssets);
        }
 private void Start()
 {
     if (this.affectedObjectPath == null)
     {
         this.affectedObjectPath = string.Empty;
     }
     else if (this.AffectedObject == null && this.affectedObjectPath.Length != 0)
     {
         GameObject gameObject = GameObject.Find(this.affectedObjectPath);
         this.AffectedObject = gameObject.transform;
     }
     USTimelineBase[] array = this.Timelines;
     for (int i = 0; i < array.Length; i++)
     {
         USTimelineBase     uSTimelineBase     = array[i];
         USTimelineProperty uSTimelineProperty = uSTimelineBase as USTimelineProperty;
         if (uSTimelineProperty)
         {
             uSTimelineProperty.TryToFixComponentReferences();
         }
     }
 }
Esempio n. 6
0
        private static void HandlePrefabRecordProperty(USTimelineProperty timelineProperty, string relativeScriptableObjectPath)
        {
            if (timelineProperty == null || timelineProperty.Properties == null)
            {
                return;
            }

            foreach (var propertyInfo in timelineProperty.Properties)
            {
                if (!propertyInfo || !propertyInfo.Component)
                {
                    continue;
                }

                propertyInfo.ComponentType = propertyInfo.Component.GetType().ToString();

                if (!AssetDatabase.Contains(propertyInfo.GetInstanceID()))
                {
                    var assetName = AssetDatabase.GenerateUniqueAssetPath(string.Format("{0}/{1}.asset", relativeScriptableObjectPath, propertyInfo.GetInstanceID()));
                    AssetDatabase.CreateAsset(propertyInfo, assetName);
                }

                EditorUtility.SetDirty(propertyInfo);

                if (propertyInfo.curves == null)
                {
                    continue;
                }

                foreach (var curve in propertyInfo.curves)
                {
                    if (curve == null)
                    {
                        Debug.LogWarning(String.Format("One of the curves on {0} is null, something has gone wrong", timelineProperty));
                        continue;
                    }

                    if (!AssetDatabase.Contains(curve.GetInstanceID()))
                    {
                        var assetName = AssetDatabase.GenerateUniqueAssetPath(string.Format("{0}/{1}.asset", relativeScriptableObjectPath, curve.GetInstanceID()));
                        AssetDatabase.CreateAsset(curve, assetName);
                    }

                    EditorUtility.SetDirty(curve);

                    if (curve.Keys == null)
                    {
                        continue;
                    }

                    foreach (var internalKeyframe in curve.Keys)
                    {
                        if (internalKeyframe == null)
                        {
                            Debug.LogWarning(String.Format("One of the keyframes on {0} is null, something has gone wrong", timelineProperty));
                            continue;
                        }

                        if (!AssetDatabase.Contains(internalKeyframe.GetInstanceID()))
                        {
                            var assetName = AssetDatabase.GenerateUniqueAssetPath(string.Format("{0}/{1}.asset", relativeScriptableObjectPath, internalKeyframe.GetInstanceID()));
                            AssetDatabase.CreateAsset(internalKeyframe, assetName);
                        }

                        EditorUtility.SetDirty(internalKeyframe);
                    }
                }
            }
        }
        IEnumerator EventUpdate(CutSceneEventData __CutSceneEventData)
        {
            List <CutSceneEventDataList> EventList = new List <CutSceneEventDataList>();

            for (int i = 0; i < __CutSceneEventData.EventList.Length; i++)
            {
                EventList.Add(__CutSceneEventData.EventList[i]);
            }

            int DefaultIdx = -1;

            for (int i = 0; i < EventList.Count; i++)
            {
                if (EventList[i].ActionType == eCutSceneEvent.SetRaidStartDefault)
                {
                    DefaultIdx = i;
                    break;
                }
            }

            if (DefaultIdx != -1)
            {
                EventList.Insert(DefaultIdx + 1, CreateCutSceneEventDataList(eCutSceneEvent.StartUpdate, Vector3.zero));
                EventList.Insert(DefaultIdx + 1, CreateCutSceneEventDataList(eCutSceneEvent.SetRaidDefaultPos, Vector3.zero));
                EventList.Insert(DefaultIdx + 1, CreateCutSceneEventDataList(eCutSceneEvent.SetFadeOut, Vector3.zero));
                EventList.Insert(DefaultIdx + 1, CreateCutSceneEventDataList(eCutSceneEvent.StopUpdate, Vector3.zero));
            }

            Unit unit = null;

            for (int i = 0; i < EventList.Count; i++)
            {
                //Debug.Log("EventList ActionType " + EventList[i].ActionType);
                switch (EventList[i].ActionType)
                {
                    #region 이전데이터

                //< 카메라 포커싱처리
                case eCutSceneEvent.Focusing:
                    if (EventList[i].ActionBool)
                    {
                        if (G_GameInfo.GameInfo.FocusingCam != null)
                        {
                            G_GameInfo.GameInfo.FocusingCam.StartEffect(0, true);
                        }
                    }
                    else
                    {
                        if (G_GameInfo.GameInfo.FocusingCam != null && G_GameInfo.GameInfo.FocusingCam.gameObject.activeSelf)
                        {
                            G_GameInfo.GameInfo.FocusingCam.EndEffect(true);
                        }
                    }
                    break;

                //< 사운드 실행
                case eCutSceneEvent.PlayBgmSound:
                    //SoundHelper.PlayBgmSound((uint)EventList[i].ActionValue);
                    break;

                //< 보스 UI 출력
                case eCutSceneEvent.ShowBossUI:
                    if (null == UIMgr.GetUI("InGame/BossCutscenePanel"))
                    {
                        UIMgr.Open("InGame/BossCutscenePanel", EventList[i].ActionValue);
                    }
                    break;

                //< 기본 셋트 한번에 다해줌
                case eCutSceneEvent.SetDefaultBoss:

                    //< 포커싱처리
                    G_GameInfo.GameInfo.FocusingCam.StartEffect(0, true);

                    //< 사운드실행
                    //SoundHelper.PlayBgmSound(9008);

                    unit = CutSceneMgr.CutSceneEventDic[0].GetComponent <Unit>();

                    G_GameInfo.GameInfo.FocusingCam.AddObject(unit.gameObject);

                    //< 보스 유아이 실행
                    //if (null == UIMgr.GetUI("InGame/BossCutscenePanel"))
                    //    UIMgr.Open("InGame/BossCutscenePanel", (float)3);

                    //< 해당 애니메이션 플레이 시간을 얻는다.
                    eAnimName aniName2 = GetAniName("Anim_intro");
                    if (aniName2 != eAnimName.Anim_idle)
                    {
                        EventList[i].ActionDelay = unit.Animator.GetAnimLength(aniName2) + 1;
                    }

                    //EventList[i].ActionDelay += unit.Animator.GetAnimLength(eAnimName.Anim_special);

                    Sequence.Duration = EventList[i].ActionDelay + 0.5f;
                    USTimelineProperty Infolist = Sequence.GetComponentInChildren <USTimelineProperty>();
                    //CutSceneMgr.seq.Duration=EventList[i].ActionDelay+0.5f;

                    //UI 라이트를 컨트롤 한다. 다시 켜주는 건 CutSceneMgr 에 있음. EndScene 마지막
                    Transform Shadow;
                    Shadow = GameObject.Find("UI_ShadowLight").GetComponent <Transform> ();
                    USTimelineContainer Container = Sequence.CreateNewTimelineContainer(Shadow);
                    GameObject          test      = new GameObject("Evnet Timeline");
                    test.transform.parent = Container.transform;
                    Component Evnt = test.AddComponent("USTimelineEvent");

                    GameObject First  = new GameObject("USEnableComponentEvent");
                    GameObject Second = new GameObject("USEnableComponentEvent");

                    First.transform.parent  = Evnt.transform;
                    Second.transform.parent = Evnt.transform;

                    First.AddComponent("USEnableComponentEvent");
                    Second.AddComponent("USEnableComponentEvent");
                    First.GetComponent <USEnableComponentEvent> ().ComponentName = "Light";
                    //Second.GetComponent<USEnableComponentEvent> ().ComponentName = "Light";
                    //Second.GetComponent<USEnableComponentEvent> ().enableComponent=true;

                    First.GetComponent <USEnableComponentEvent> ().FireTime = 0.0f;
                    //Second.GetComponent<USEnableComponentEvent> ().FireTime = Sequence.Duration;
                    //

                    Infolist.Properties [0].curves [0].Keys[1].Time  = 0.7f;
                    Infolist.Properties [0].curves [1].Keys [1].Time = 0.7f;
                    Infolist.Properties [0].curves [2].Keys [1].Time = 0.7f;
                    Infolist.Properties [1].curves [0].Keys[1].Time  = 0.7f;
                    Infolist.Properties [1].curves [1].Keys [1].Time = 0.7f;
                    Infolist.Properties [1].curves [2].Keys [1].Time = 0.7f;
                    Infolist.Properties [1].curves [3].Keys [1].Time = 0.7f;

                    Infolist.Properties [0].curves [0].Keys[3].Time  = Sequence.Duration + 10;
                    Infolist.Properties [0].curves [1].Keys [3].Time = Sequence.Duration + 10;
                    Infolist.Properties [0].curves [2].Keys [3].Time = Sequence.Duration + 10;
                    Infolist.Properties [1].curves [0].Keys[3].Time  = Sequence.Duration + 10;
                    Infolist.Properties [1].curves [1].Keys [3].Time = Sequence.Duration + 10;
                    Infolist.Properties [1].curves [2].Keys [3].Time = Sequence.Duration + 10;
                    Infolist.Properties [1].curves [3].Keys [3].Time = Sequence.Duration + 10;

                    Infolist.Properties [0].curves[0].Keys[2].Time   = Sequence.Duration;
                    Infolist.Properties [0].curves [1].Keys [2].Time = Sequence.Duration;
                    Infolist.Properties [0].curves [2].Keys [2].Time = Sequence.Duration;
                    Infolist.Properties [1].curves [0].Keys[2].Time  = Sequence.Duration;
                    Infolist.Properties [1].curves [1].Keys [2].Time = Sequence.Duration;
                    Infolist.Properties [1].curves [2].Keys [2].Time = Sequence.Duration;
                    Infolist.Properties [1].curves [3].Keys [2].Time = Sequence.Duration;

                    break;


                    #endregion 이전데이터

                //< 해당 위치로 강제이동
                case eCutSceneEvent.ImmediatelyMove:
                    CutSceneMgr.CutSceneEventDic[0].transform.position = EventList[i].ActionPos;
                    break;

                //< 이펙트 실행
                case eCutSceneEvent.SpawnEffect:
                    SpawnEffect(EventList[i]);
                    break;

                //< 카메라 쉐이킹
                case eCutSceneEvent.CameraShake:
                    CutSceneMgr.Shake((byte)EventList[i].ActionValue);
                    break;

                //< 보스 UI 출력
                case eCutSceneEvent.ShowRaidBossUI:
                    if (null == UIMgr.GetUI("InGame/BossCutscenePanel"))
                    {
                        UIMgr.Open("InGame/BossCutscenePanel", EventList[i].ActionValue);
                    }
                    break;

                //< 보스 대화 출력
                case eCutSceneEvent.RaidBossTalk:
                    unit = CutSceneMgr.CutSceneEventDic[0].GetComponent <Unit>();
                    G_GameInfo.GameInfo.StartCoroutine(RaidBossTalkUpdate(unit, EventList[i].ActionString));
                    break;

                //< 애니메이션 실행
                case eCutSceneEvent.AnimaionPlay:
                    unit = CutSceneMgr.CutSceneEventDic[(int)EventList[i].ActionValue].GetComponent <Unit>();
                    if (unit != null)
                    {
                        eAnimName aniName = GetAniName(EventList[i].ActionString);
                        unit.PlayAnim(aniName, false, 0.2f, true);

                        //< 해당 애니메이션 플레이 시간을 얻는다.
                        if (aniName != eAnimName.Anim_idle)
                        {
                            EventList[i].ActionDelay = unit.Animator.GetAnimLength(aniName) - 0.2f;
                        }
                    }
                    else
                    {
                        //< 유닛이 없다면 그냥 바로 실행시켜준다.
                        CutSceneMgr.CutSceneEventDic[(int)EventList[i].ActionValue].animation.CrossFade(EventList[i].ActionString, 0.5f);
                    }
                    break;

                //< 플레이 자체는 멈춰둔다.
                case eCutSceneEvent.StopUpdate:
                    CutSceneMgr.seq.Pause();
                    break;

                case eCutSceneEvent.StartUpdate:
                    CutSceneMgr.seq.Play();
                    break;

                //< 페이드 인(밝아지는처리)
                case eCutSceneEvent.SetFadeIn:
                    CutSceneMgr.seq.Pause();
                    yield return(G_GameInfo._GameInfo.StartCoroutine(_CameraFadeEventObj.FadeInUpdate()));

                    CutSceneMgr.seq.Play();

                    //< 스킵버튼 체크한다.
                    SetSkipPanel();
                    break;

                //< 페이드 아웃(어두워지는 처리)
                case eCutSceneEvent.SetFadeOut:
                    if (_CameraFadeEventObj == null)
                    {
                        _CameraFadeEventObj = (Instantiate(Resources.Load("Camera/CameraFadeEvent")) as GameObject).GetComponent <CameraFadeEvent>();
                        _CameraFadeEventObj.transform.parent        = CutSceneMgr.startCamObj.transform;
                        _CameraFadeEventObj.transform.localPosition = new Vector3(0, 0, 1);
                        _CameraFadeEventObj.transform.localRotation = Quaternion.identity;
                    }

                    GameObject panel = UIMgr.GetUI("CutSceneSkipPanel");
                    if (panel != null)
                    {
                        panel.GetComponent <UIBasePanel>().Close();
                    }

                    yield return(G_GameInfo._GameInfo.StartCoroutine(_CameraFadeEventObj.FadeOutUpdate()));

                    break;

                //< 레이드를 위한 기본 카메라 위치 셋팅
                case eCutSceneEvent.SetRaidDefaultPos:
                    CutSceneMgr.startRootObj.transform.position = Vector3.zero;
                    CutSceneMgr.startRootObj.transform.rotation = Quaternion.identity;

                    CutSceneMgr.startCamObj.transform.parent        = CutSceneMgr.startRootObj.transform;
                    CutSceneMgr.startCamObj.transform.localPosition = Vector3.zero;
                    CutSceneMgr.startCamObj.transform.localRotation = Quaternion.identity;
                    break;

                case eCutSceneEvent.SetActive:
                    CutSceneMgr.CutSceneEventDic[(int)EventList[i].ActionValue].SetActive(EventList[i].ActionBool);
                    break;

                case eCutSceneEvent.SetTimeScale:
                    SetTimeScale(EventList[i]);
                    break;
                }

                //< 딜레이동안 대기
                yield return(new WaitForSeconds(EventList[i].ActionDelay));
            }

            yield return(null);
        }