-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathAnimPlayerWindow.cs
101 lines (86 loc) · 3.53 KB
/
AnimPlayerWindow.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
* Copyright (C) 2021 Victor Soupday
* This file is part of CC_Unity_Tools <https://github.com/soupday/CC_Unity_Tools>
*
* CC_Unity_Tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CC_Unity_Tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CC_Unity_Tools. If not, see <https://www.gnu.org/licenses/>.
*/
using UnityEngine;
using UnityEditor;
namespace Reallusion.Import
{
public class AnimPlayerWindow
{
public static bool isShown = false;
private static float xpadding = 6f;
#if SCENEVIEW_OVERLAY_COMPATIBLE
private static float ypadding = 32f; //delta of 26 pixels in case this window is used instead of an overlay
#else
private static float ypadding = 6f;
#endif
private static float width = 320f;
private static float height = 26f;
public static void OnSceneGUI(SceneView sceneView)
{
height = 72f;
if (AnimPlayerGUI.AnimFoldOut) height += 140f;
if (AnimPlayerGUI.FaceFoldOut) height += 90f;
float x = sceneView.position.width - width - xpadding;
float y = sceneView.position.height - height - ypadding;
sceneView.autoRepaintOnSceneChange = true;
var windowOverlayRect = new Rect(x, y, width, height);
//GUILayout.Window("Animation Playback".GetHashCode(), windowOverlayRect, DoWindow, "Character Preview Tools");
// to counter: Resolve of invalid GC handle. The handle is from a previous domain. The resolve operation is skipped.
string name = EditorApplication.isPlaying ? "Character Preview Tools (Runtime)" : "Character Preview Tools";
int id = EditorApplication.isPlaying ? "Animation Playback".GetHashCode() : "Animation Playback (Runtime)".GetHashCode();
if (EditorApplication.isPlaying)
{
if (!doneOnce)
{
GUILayout.Window(id, new Rect(), Empty, name);
doneOnce = true;
}
}
GUILayout.Window(id, windowOverlayRect, DoWindow, name);
}
private static bool doneOnce = false;
public static void ShowPlayer()
{
if (!isShown)
{
SceneView.duringSceneGui -= AnimPlayerWindow.OnSceneGUI;
SceneView.duringSceneGui += AnimPlayerWindow.OnSceneGUI;
isShown = true;
doneOnce = false;
}
}
public static void HidePlayer()
{
if (isShown)
{
SceneView.duringSceneGui -= AnimPlayerWindow.OnSceneGUI;
AnimPlayerGUI.CleanUp();
isShown = false;
}
}
public static void DoWindow(int id)
{
AnimPlayerGUI.DrawPlayer();
AnimPlayerGUI.DrawFacialMorph();
}
public static void Empty(int id)
{
Util.LogDetail("Showing " + id);
}
}
}