public override void OnInspectorGUI() { Script_SpriteStudio_DrawManagerView Data = (Script_SpriteStudio_DrawManagerView)target; EditorGUILayout.LabelField("[SpriteStudio DrawManager]"); int LevelIndent = 0; EditorGUILayout.Space(); FoldOutDrawSetting = EditorGUILayout.Foldout(FoldOutDrawSetting, "Rendering Setting"); if (true == FoldOutDrawSetting) { EditorGUI.indentLevel = LevelIndent + 1; int CountKindQueue = (int)Library_SpriteStudio.DrawManager.KindDrawQueue.OVERLAY + 1; int[] IndexDrawKind = new int[CountKindQueue]; for (int i = 0; i < CountKindQueue; i++) { IndexDrawKind[i] = i; } int KindRenderQueueBaseNo = (int)Data.KindRenderQueueBase; KindRenderQueueBaseNo = EditorGUILayout.IntPopup("Render-Queue Base", KindRenderQueueBaseNo, NameDrawKind, IndexDrawKind); Data.KindRenderQueueBase = (Library_SpriteStudio.DrawManager.KindDrawQueue)KindRenderQueueBaseNo; EditorGUI.indentLevel = LevelIndent + 2; EditorGUILayout.LabelField("Details [" + NameDrawKind[KindRenderQueueBaseNo] + "]"); switch ((Library_SpriteStudio.DrawManager.KindDrawQueue)KindRenderQueueBaseNo) { case Library_SpriteStudio.DrawManager.KindDrawQueue.SHADER_SETTING: EditorGUILayout.LabelField("- Value Base: Defined Tag\"Queue\" in Shader (Default: Transparent)"); EditorGUILayout.LabelField("- Offset Range: Depend on Tag\"Queue\"(Default: 0-999)"); break; case Library_SpriteStudio.DrawManager.KindDrawQueue.USER_SETTING: EditorGUILayout.LabelField("- Value Base: 0"); EditorGUILayout.LabelField("- Offset Range: 1000-4999"); break; default: EditorGUILayout.LabelField("- Value Base: " + Library_SpriteStudio.DrawManager.ValueKindDrawQueue[KindRenderQueueBaseNo]); EditorGUILayout.LabelField("- Offset Range: 0-" + (Library_SpriteStudio.DrawManager.ValueKindDrawQueue[KindRenderQueueBaseNo + 1] - Library_SpriteStudio.DrawManager.ValueKindDrawQueue[KindRenderQueueBaseNo] - 1)); break; } EditorGUI.indentLevel = LevelIndent + 1; EditorGUILayout.Space(); Data.OffsetDrawQueue = EditorGUILayout.IntField("Render-Queue Offset", Data.OffsetDrawQueue); EditorGUI.indentLevel = LevelIndent; } EditorGUILayout.Space(); if (true == GUI.changed) { Library_SpriteStudio.DrawManager.ArrayListMeshDraw ArrayListMeshDraw = Data.ArrayListMeshDraw; ArrayListMeshDraw.RenderQueueSet(Data.KindRenderQueueBase, Data.OffsetDrawQueue); EditorUtility.SetDirty(target); } }
/* ******************************************************** */ //! Draw-List Clear /*! * @param * (None) * @retval Return-Value * (None) * * Don't use this function. <br> * (This function is for the Draw-Manager's scripts.) */ internal void DrawListClearInstance() { if (null != scriptPartsRootSub) { Library_SpriteStudio.DrawManager.ArrayListMeshDraw ArrayListMesh = scriptPartsRootSub.ArrayListMeshDraw; if (null != ArrayListMesh) { scriptPartsRootSub.ArrayListMeshDraw.Clear(); } } }
/* Functions */ void Start() { InstanceCameraDraw = Library_SpriteStudio.Utility.CameraGetParent(gameObject); DrawEntryPartsRoot = new ArrayList(); DrawEntryPartsRoot.Clear(); arrayListMeshDraw = new Library_SpriteStudio.DrawManager.ArrayListMeshDraw(); arrayListMeshDraw.BootUp(); arrayListMeshDraw.RenderQueueSet(KindRenderQueueBase, OffsetDrawQueue); }
/* Functions */ void Start() { InstanceCameraDraw = Library_SpriteStudio.Utility.CameraGetParent(gameObject); #if false /* MEMO: Non-Generic List-Class */ DrawEntryPartsRoot = new ArrayList(); DrawEntryPartsRoot.Clear(); #else DrawEntryPartsRoot = new List <InformationDrawObject>(); DrawEntryPartsRoot.Clear(); #endif arrayListMeshDraw = new Library_SpriteStudio.DrawManager.ArrayListMeshDraw(); arrayListMeshDraw.BootUp(); arrayListMeshDraw.RenderQueueSet(KindRenderQueueBase, OffsetDrawQueue); }
void Start() { InstanceCameraDraw = Library_SpriteStudio.Utility.CameraGetParent(gameObject); InstanceDrawManagerView = Library_SpriteStudio.Utility.DrawManagerViewGetParent(gameObject); rateOpacity = 1.0f; arrayListMeshDraw = new Library_SpriteStudio.DrawManager.ArrayListMeshDraw(); arrayListMeshDraw.BootUp(); ListCallBackUserData = new ArrayList(); ListCallBackUserData.Clear(); if (null == ListInformationPlay) { frameNoStart = 0; frameNoEnd = 0; framePerSecond = 0; } if (0 == (Status & BitStatus.PLAYING)) { AnimationPlay(); } }
void Update() { MainLoopCount++; /* Boot-Check */ if (null == InstanceCameraDraw) { InstanceCameraDraw = Library_SpriteStudio.Utility.CameraGetParent(gameObject); } if (null == InstanceDrawManagerView) { InstanceDrawManagerView = Library_SpriteStudio.Utility.DrawManagerViewGetParent(gameObject); } if (null == arrayListMeshDraw) { arrayListMeshDraw = new Library_SpriteStudio.DrawManager.ArrayListMeshDraw(); arrayListMeshDraw.BootUp(); } if (null == ListCallBackUserData) { ListCallBackUserData = new ArrayList(); ListCallBackUserData.Clear(); } /* Entry Object to Draw */ if ((null != InstanceDrawManagerView) && (null == partsRootOrigin)) { /* Not "Instance"-Object */ if (false == FlagHideForce) { InstanceDrawManagerView.DrawEntryObject(this); } } /* Animation Update */ if (null == SpriteStudioData) { return; } if (null == ListInformationPlay) { return; } if (0 == (Status & BitStatus.PLAYING)) { return; } if (0 != (Status & BitStatus.PAUSING)) { return; } int FrameCountNow = 0; int FrameCountEnd = frameNoEnd - frameNoStart; int FrameCountFull = FrameCountEnd + 1; float RateTimeProgress = (0 == (Status & BitStatus.PLAYING_REVERSE)) ? 1.0f : -1.0f; float TimeAnimationFull = (float)FrameCountFull * TimeFramePerSecond; bool FlagLoop = false; bool FlagReLoop = true; /* FrameNo Update */ Status |= BitStatus.PLAY_FIRST; if (-1 != frameNoPrevious) { /* Not Update, Just Starting */ TimeAnimation += (Time.deltaTime * rateTimePlay) * RateTimeProgress; Status &= ~BitStatus.DECODE_USERDATA; Status &= ~BitStatus.PLAY_FIRST; } FrameCountNow = (int)(TimeAnimation / TimeFramePerSecond); countLoopThisTime = 0; flagTurnBackPingPong = false; flagReversePrevious = (0 != (Status & BitStatus.PLAYING_REVERSE)) ? true : false; Status &= ~BitStatus.REDECODE_INSTANCE; if (false == FlagStylePingpong) { /* One-Way */ if (0 == (Status & BitStatus.PLAYING_REVERSE)) { /* Play foward */ /* Get Frame Count */ if (FrameCountEnd < FrameCountNow) { /* Frame-Over */ FlagLoop = true; FlagReLoop = true; while (true == FlagReLoop) { /* Loop-Count Check */ if (0 <= CountLoopRemain) { /* Limited-Count Loop */ CountLoopRemain--; FlagLoop = (0 > CountLoopRemain) ? false : FlagLoop; } /* ReCalculate Frame */ if (true == FlagLoop) { /* Loop */ countLoopThisTime++; /* ReCalculate Frame */ TimeAnimation -= TimeAnimationFull; FrameCountNow = (int)(TimeAnimation / TimeFramePerSecond); FlagReLoop = (TimeAnimationFull <= TimeAnimation) ? true : false; /* Set Instance Parts Restart Request */ Status |= BitStatus.REDECODE_INSTANCE; /* Force-Decode UserData */ Status |= BitStatus.DECODE_USERDATA; } else { /* End */ TimeAnimation = ((float)FrameCountEnd) * TimeFramePerSecond; FrameCountNow = FrameCountEnd; // Status &= ~BitStatus.PLAYING; Status |= BitStatus.REQUEST_PLAYEND; FlagReLoop = false; } } } } else { /* Play backwards */ /* Get Frame Count */ if (0 > FrameCountNow) { /* Frame-Over */ FlagLoop = true; FlagReLoop = true; while (true == FlagReLoop) { /* Loop-Count Check */ if (0 <= CountLoopRemain) { /* Limited-Count Loop */ CountLoopRemain--; FlagLoop = (0 > CountLoopRemain) ? false : FlagLoop; } /* ReCalculate Frame */ if (true == FlagLoop) { /* Loop */ countLoopThisTime++; /* ReCalculate Frame */ TimeAnimation += TimeAnimationFull; FrameCountNow = (int)(TimeAnimation / TimeFramePerSecond); FlagReLoop = (0.0f > TimeAnimation) ? true : false; /* Set Instance Parts Restart Request */ Status |= BitStatus.REDECODE_INSTANCE; /* Force-Decode UserData */ Status |= BitStatus.DECODE_USERDATA; } else { /* End */ TimeAnimation = 0.0f; FrameCountNow = 0; // Status &= ~BitStatus.PLAYING; Status |= BitStatus.REQUEST_PLAYEND; FlagReLoop = false; } } } } } else { /* Ping-Pong */ if (0 == (Status & BitStatus.STYLE_REVERSE)) { /* Style-Normaly */ FlagReLoop = true; while (true == FlagReLoop) { FlagReLoop = false; if (0 == (Status & BitStatus.PLAYING_REVERSE)) { /* Play foward */ if (FrameCountEnd < FrameCountNow) { /* Frame-Over */ /* Set Turn-Back */ Status |= BitStatus.PLAYING_REVERSE; /* ReCalculate Frame */ TimeAnimation -= TimeAnimationFull; TimeAnimation = TimeAnimationFull - TimeAnimation; FrameCountNow = (int)(TimeAnimation / TimeFramePerSecond); flagTurnBackPingPong = true; /* Force-Decode UserData */ Status |= BitStatus.DECODE_USERDATA; /* Plural Loop Count Check */ FlagReLoop = ((TimeAnimationFull > TimeAnimation) && (0.0f <= TimeAnimation)) ? false : true; } } else { /* Play backwards */ if (0 > FrameCountNow) { /* Frame-Over */ FlagLoop = true; /* Loop-Count Check */ if (0 <= CountLoopRemain) { /* Limited-Count Loop */ CountLoopRemain--; FlagLoop = (0 > CountLoopRemain) ? false : FlagLoop; } if (true == FlagLoop) { /* Loop */ countLoopThisTime++; /* Set Turn-Back */ Status &= ~BitStatus.PLAYING_REVERSE; /* ReCalculate Frame */ TimeAnimation += TimeAnimationFull; TimeAnimation = TimeAnimationFull - TimeAnimation; FrameCountNow = (int)(TimeAnimation / TimeFramePerSecond); flagTurnBackPingPong = true; /* Set Instance Parts Restart Request */ Status |= BitStatus.REDECODE_INSTANCE; /* Force-Decode UserData */ Status |= BitStatus.DECODE_USERDATA; /* Plural Loop Count Check */ FlagReLoop = ((TimeAnimationFull > TimeAnimation) && (0.0f <= TimeAnimation)) ? false : true; } else { /* End */ TimeAnimation = 0.0f; FrameCountNow = 0; // Status &= ~BitStatus.PLAYING; Status |= BitStatus.REQUEST_PLAYEND; FlagReLoop = false; } } } } } else { /* Style-Reverse */ FlagReLoop = true; while (true == FlagReLoop) { FlagReLoop = false; if (0 != (Status & BitStatus.PLAYING_REVERSE)) { /* Play backwards */ if (0 > FrameCountNow) { /* Frame-Over */ /* Set Turn-Back */ Status &= ~BitStatus.PLAYING_REVERSE; /* ReCalculate Frame */ TimeAnimation += TimeAnimationFull; TimeAnimation = TimeAnimationFull - TimeAnimation; FrameCountNow = (int)(TimeAnimation / TimeFramePerSecond); flagTurnBackPingPong = true; /* Force-Decode UserData */ Status |= BitStatus.DECODE_USERDATA; /* Plural Loop Count Check */ FlagReLoop = ((TimeAnimationFull > TimeAnimation) && (0.0f <= TimeAnimation)) ? false : true; } } else { /* Play foward */ if (FrameCountEnd < FrameCountNow) { /* Frame-Over */ FlagLoop = true; /* Loop-Count Check */ if (0 <= CountLoopRemain) { /* Limited-Count Loop */ CountLoopRemain--; FlagLoop = (0 > CountLoopRemain) ? false : FlagLoop; } if (true == FlagLoop) { /* Loop */ countLoopThisTime++; /* Set Turn-Back */ Status |= BitStatus.PLAYING_REVERSE; /* ReCalculate Frame */ TimeAnimation -= TimeAnimationFull; TimeAnimation = TimeAnimationFull - TimeAnimation; FrameCountNow = (int)(TimeAnimation / TimeFramePerSecond); flagTurnBackPingPong = true; /* Set Instance Parts Restart Request */ Status |= BitStatus.REDECODE_INSTANCE; /* Force-Decode UserData */ Status |= BitStatus.DECODE_USERDATA; /* Plural Loop Count Check */ FlagReLoop = ((TimeAnimationFull > TimeAnimation) && (0.0f <= TimeAnimation)) ? false : true; } else { /* End */ TimeAnimation = ((float)FrameCountEnd) * TimeFramePerSecond; FrameCountNow = FrameCountEnd; // Status &= ~BitStatus.PLAYING; Status |= BitStatus.REQUEST_PLAYEND; FlagReLoop = false; } } } } } } /* Member-Valiables Update */ int FrameNoNew = frameNoStart + FrameCountNow; if (FrameNoNew != frameNoNow) { Status |= BitStatus.DECODE_USERDATA; } frameNoPrevious = frameNoNow; frameNoNow = FrameNoNew; /* Update User-CallBack */ SpriteStudioData.UpdateUserData(frameNoNow, gameObject, this); /* Update GameObject */ SpriteStudioData.UpdateGameObject(gameObject, frameNoNow, false); }
void LateUpdate() { /* Clear Finalize ListDrawMesh */ if (null == arrayListMeshDraw) { arrayListMeshDraw = new Library_SpriteStudio.DrawManager.ArrayListMeshDraw(); arrayListMeshDraw.BootUp(); arrayListMeshDraw.RenderQueueSet(KindRenderQueueBase, OffsetDrawQueue); } arrayListMeshDraw.Clear(); /* Collect Draw-Parts from Root-Parts */ InformationDrawObject DrawObject = null; Library_SpriteStudio.DrawManager.ArrayListMeshDraw ArrayListMeshDrawObject = null; Library_SpriteStudio.DrawManager.ListMeshDraw ListMeshDraw = null; int Count = DrawEntryPartsRoot.Count; for (int i = 0; i < Count; i++) { #if false /* MEMO: Non-Generic List-Class */ DrawObject = DrawEntryPartsRoot[i] as InformationDrawObject; #else DrawObject = DrawEntryPartsRoot[i]; #endif ArrayListMeshDrawObject = DrawObject.PartsRoot.ArrayListMeshDraw; int CountList = ArrayListMeshDrawObject.TableListMesh.Count; for (int j = 0; j < CountList; j++) { /* Add Mesh-List */ #if false /* MEMO: Non-Generic List-Class */ ListMeshDraw = ArrayListMeshDrawObject.TableListMesh[j] as Library_SpriteStudio.DrawManager.ListMeshDraw; #else ListMeshDraw = ArrayListMeshDrawObject.TableListMesh[j]; #endif arrayListMeshDraw.TableListMesh.Add(ListMeshDraw); } /* Clear Original Draw-List */ DrawObject.PartsRoot.DrawListClear(); } DrawEntryPartsRoot.Clear(); /* Collect & Add Draw-Parts "Instance"-Object's Parts */ Library_SpriteStudio.DrawManager.InformationMeshData InformationMeshData = null; Script_SpriteStudio_PartsRoot ScriptPartsRootSub = null; for (int i = 0; i < arrayListMeshDraw.TableListMesh.Count;) { #if false /* MEMO: Non-Generic List-Class */ ListMeshDraw = arrayListMeshDraw.TableListMesh[i] as Library_SpriteStudio.DrawManager.ListMeshDraw; #else ListMeshDraw = arrayListMeshDraw.TableListMesh[i]; #endif if (null == ListMeshDraw) { arrayListMeshDraw.TableListMesh.RemoveAt(i); continue; } InformationMeshData = ListMeshDraw.MeshDataTop; if (null != InformationMeshData.PartsInstance) { Library_SpriteStudio.DrawManager.ListMeshDraw ListMeshDrawSub = null; ScriptPartsRootSub = InformationMeshData.PartsInstance.ScriptPartsRootSub; if (null != ScriptPartsRootSub) { /* Add Mesh-Table */ /* Delete "Instance"-Data */ arrayListMeshDraw.TableListMesh.RemoveAt(i); /* Insert "Instance"-Data's Draw-Mesh-List */ ArrayListMeshDrawObject = ScriptPartsRootSub.ArrayListMeshDraw; for (int j = 0; j < ArrayListMeshDrawObject.TableListMesh.Count; j++) { #if false /* MEMO: Non-Generic List-Class */ ListMeshDrawSub = ArrayListMeshDrawObject.TableListMesh[j] as Library_SpriteStudio.DrawManager.ListMeshDraw; #else ListMeshDrawSub = ArrayListMeshDrawObject.TableListMesh[j]; #endif arrayListMeshDraw.TableListMesh.Insert((i + j), ListMeshDrawSub); } /* Clear Original Draw-List */ ScriptPartsRootSub.DrawListClear(); continue; } } i++; } /* Optimize Draw-Parts List */ Library_SpriteStudio.DrawManager.ListMeshDraw ListMeshDrawNext = null; #if false /* MEMO: Non-Generic List-Class */ ArrayList TableListMesh = arrayListMeshDraw.TableListMesh; #else List <Library_SpriteStudio.DrawManager.ListMeshDraw> TableListMesh = arrayListMeshDraw.TableListMesh; #endif for (int i = 0; i < (TableListMesh.Count - 1);) { Count = i + 1; /* "Count" is temporary */ #if false /* MEMO: Non-Generic List-Class */ ListMeshDraw = TableListMesh[i] as Library_SpriteStudio.DrawManager.ListMeshDraw; ListMeshDrawNext = TableListMesh[Count] as Library_SpriteStudio.DrawManager.ListMeshDraw; #else ListMeshDraw = TableListMesh[i]; ListMeshDrawNext = TableListMesh[Count]; #endif if (ListMeshDraw.MaterialOriginal == ListMeshDrawNext.MaterialOriginal) { /* Mesh-List Merge */ ListMeshDraw.ListMerge(ListMeshDrawNext); TableListMesh.RemoveAt(Count); /* Counter No-Incliment Continue */ continue; } i++; } /* Counting Meshes */ TableListMesh = arrayListMeshDraw.TableListMesh; Count = TableListMesh.Count; int CountMesh = 0; for (int i = 0; i < Count; i++) { #if false /* MEMO: Non-Generic List-Class */ ListMeshDraw = TableListMesh[i] as Library_SpriteStudio.DrawManager.ListMeshDraw; #else ListMeshDraw = TableListMesh[i]; #endif CountMesh += ListMeshDraw.Count; } /* Meshes Combine each Material & Set to MeshFilter/MeshRenderer */ MeshFilter InstanceMeshFilter = GetComponent <MeshFilter>(); MeshRenderer InstanceMeshRenderer = GetComponent <MeshRenderer>(); arrayListMeshDraw.MeshSetCombine(InstanceMeshFilter, InstanceMeshRenderer, InstanceCameraDraw, transform); }