diff --git a/Assets/Materials/UI/GameIcon.shmat b/Assets/Materials/UI/GameIcon.shmat new file mode 100644 index 00000000..7eb1a6e3 --- /dev/null +++ b/Assets/Materials/UI/GameIcon.shmat @@ -0,0 +1,8 @@ +- VertexShader: 46580970 + FragmentShader: 35983630 + SubPass: UI + Properties: + data.color: {x: 1, y: 1, z: 1, w: 1} + data.textureIndex: 51158984 + data.alpha: 1 + data.beta: {x: 1, y: 1, z: 1} \ No newline at end of file diff --git a/Assets/Materials/UI/GameIcon.shmat.shmeta b/Assets/Materials/UI/GameIcon.shmat.shmeta new file mode 100644 index 00000000..905012d7 --- /dev/null +++ b/Assets/Materials/UI/GameIcon.shmat.shmeta @@ -0,0 +1,3 @@ +Name: GameIcon +ID: 126117259 +Type: 7 diff --git a/Assets/Materials/UIMat.shmat b/Assets/Materials/UI/UIMat.shmat similarity index 100% rename from Assets/Materials/UIMat.shmat rename to Assets/Materials/UI/UIMat.shmat diff --git a/Assets/Materials/UIMat.shmat.shmeta b/Assets/Materials/UI/UIMat.shmat.shmeta similarity index 100% rename from Assets/Materials/UIMat.shmat.shmeta rename to Assets/Materials/UI/UIMat.shmat.shmeta diff --git a/Assets/Materials/UIMat_LoseScene.shmat b/Assets/Materials/UI/UIMat_LoseScene.shmat similarity index 100% rename from Assets/Materials/UIMat_LoseScene.shmat rename to Assets/Materials/UI/UIMat_LoseScene.shmat diff --git a/Assets/Materials/UIMat_LoseScene.shmat.shmeta b/Assets/Materials/UI/UIMat_LoseScene.shmat.shmeta similarity index 100% rename from Assets/Materials/UIMat_LoseScene.shmat.shmeta rename to Assets/Materials/UI/UIMat_LoseScene.shmat.shmeta diff --git a/Assets/Materials/UIMat_MainMenu.shmat b/Assets/Materials/UI/UIMat_MainMenu.shmat similarity index 100% rename from Assets/Materials/UIMat_MainMenu.shmat rename to Assets/Materials/UI/UIMat_MainMenu.shmat diff --git a/Assets/Materials/UIMat_MainMenu.shmat.shmeta b/Assets/Materials/UI/UIMat_MainMenu.shmat.shmeta similarity index 100% rename from Assets/Materials/UIMat_MainMenu.shmat.shmeta rename to Assets/Materials/UI/UIMat_MainMenu.shmat.shmeta diff --git a/Assets/Materials/UIMat_Slider.shmat b/Assets/Materials/UI/UIMat_Slider.shmat similarity index 100% rename from Assets/Materials/UIMat_Slider.shmat rename to Assets/Materials/UI/UIMat_Slider.shmat diff --git a/Assets/Materials/UIMat_Slider.shmat.shmeta b/Assets/Materials/UI/UIMat_Slider.shmat.shmeta similarity index 100% rename from Assets/Materials/UIMat_Slider.shmat.shmeta rename to Assets/Materials/UI/UIMat_Slider.shmat.shmeta diff --git a/Assets/Materials/UIMat_WinScene.shmat b/Assets/Materials/UI/UIMat_WinScene.shmat similarity index 100% rename from Assets/Materials/UIMat_WinScene.shmat rename to Assets/Materials/UI/UIMat_WinScene.shmat diff --git a/Assets/Materials/UIMat_WinScene.shmat.shmeta b/Assets/Materials/UI/UIMat_WinScene.shmat.shmeta similarity index 100% rename from Assets/Materials/UIMat_WinScene.shmat.shmeta rename to Assets/Materials/UI/UIMat_WinScene.shmat.shmeta diff --git a/Assets/Scenes/MainMenu.shade b/Assets/Scenes/MainMenu.shade index c2c35c38..b3859b4b 100644 --- a/Assets/Scenes/MainMenu.shade +++ b/Assets/Scenes/MainMenu.shade @@ -1,7 +1,7 @@ - EID: 0 - Name: MainMenu Canvas + Name: Main Menu Canvas IsActive: true - NumberOfChildren: 4 + NumberOfChildren: 8 Components: Canvas Component: Canvas Width: 1920 @@ -10,12 +10,12 @@ IsActive: true Scripts: ~ - EID: 1 - Name: Background + Name: BackGround IsActive: true NumberOfChildren: 0 Components: Transform Component: - Translate: {x: 0, y: 5, z: 0.5} + Translate: {x: 0, y: 0, z: 0.5} Rotate: {x: 0, y: 0, z: 0} Scale: {x: 1920, y: 1080, z: 1} IsActive: true @@ -35,9 +35,9 @@ NumberOfChildren: 0 Components: Transform Component: - Translate: {x: 0, y: 75, z: 0.400000006} + Translate: {x: -700, y: 100, z: 0.400000006} Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 400, y: 200, z: 1} + Scale: {x: 450, y: 100, z: 1} IsActive: true Renderable Component: Mesh: 141771688 @@ -57,15 +57,23 @@ - Type: ChangeSceneButton Enabled: true sceneID: 96668835 + - Type: SHADE_Scripting.UI.ButtonFX + Enabled: true + onHoverEnterSound: event:/Music/player_undetected + onHoverExitSound: event:/Music/player_undetected + onClickSound: event:/Music/player_undetected + onReleaseSound: event:/Music/player_undetected + hoverScale: 1.10000002 + clickScale: 0.899999976 - EID: 6 Name: Quit Game Button IsActive: true NumberOfChildren: 0 Components: Transform Component: - Translate: {x: 0, y: -200, z: 0.400000006} + Translate: {x: -700, y: -400, z: 0.400000006} Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 400, y: 200, z: 1} + Scale: {x: 450, y: 100, z: 1} IsActive: true Renderable Component: Mesh: 141771688 @@ -84,29 +92,171 @@ Scripts: - Type: QuitButton Enabled: true + - Type: SHADE_Scripting.UI.ButtonFX + Enabled: true + onHoverEnterSound: event:/Music/player_undetected + onHoverExitSound: event:/Music/player_undetected + onClickSound: event:/Music/player_undetected + onReleaseSound: event:/Music/player_undetected + hoverScale: 1.10000002 + clickScale: 0.899999976 - EID: 7 - Name: Slider - IsActive: false + Name: Level Select Button + IsActive: true NumberOfChildren: 0 Components: Transform Component: - Translate: {x: 0, y: -56, z: 0} + Translate: {x: -700, y: 0, z: 0.400000006} Rotate: {x: 0, y: 0, z: 0} - Scale: {x: 500, y: 100, z: 1} - IsActive: false + Scale: {x: 450, y: 100, z: 1} + IsActive: true Renderable Component: Mesh: 141771688 - Material: 128676209 - IsActive: false - Slider Component: - Slider Value: 0 - IsActive: false + Material: 129340704 + IsActive: true + Button Component: + Default Texture: 52901020 + Hovered Texture: 62235279 + Clicked Texture: 64722619 + IsActive: true UI Component: Canvas ID: 0 Hovered: false Clicked: false - IsActive: false - Scripts: ~ + IsActive: true + Scripts: + - Type: SHADE_Scripting.UI.ButtonFX + Enabled: true + onHoverEnterSound: event:/Music/player_undetected + onHoverExitSound: event:/Music/player_undetected + onClickSound: event:/Music/player_undetected + onReleaseSound: event:/Music/player_undetected + hoverScale: 1.10000002 + clickScale: 0.899999976 +- EID: 9 + Name: How To Play Button + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -700, y: -100, z: 0.400000006} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 450, y: 100, z: 1} + IsActive: true + Renderable Component: + Mesh: 141771688 + Material: 129340704 + IsActive: true + Button Component: + Default Texture: 52901020 + Hovered Texture: 62235279 + Clicked Texture: 64722619 + IsActive: true + UI Component: + Canvas ID: 0 + Hovered: false + Clicked: false + IsActive: true + Scripts: + - Type: SHADE_Scripting.UI.ButtonFX + Enabled: true + onHoverEnterSound: event:/Music/player_undetected + onHoverExitSound: event:/Music/player_undetected + onClickSound: event:/Music/player_undetected + onReleaseSound: event:/Music/player_undetected + hoverScale: 1.10000002 + clickScale: 0.899999976 +- EID: 10 + Name: Credits Button + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -700, y: -200, z: 0.400000006} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 450, y: 100, z: 1} + IsActive: true + Renderable Component: + Mesh: 141771688 + Material: 129340704 + IsActive: true + Button Component: + Default Texture: 52901020 + Hovered Texture: 62235279 + Clicked Texture: 64722619 + IsActive: true + UI Component: + Canvas ID: 0 + Hovered: false + Clicked: false + IsActive: true + Scripts: + - Type: SHADE_Scripting.UI.ButtonFX + Enabled: true + onHoverEnterSound: event:/Music/player_undetected + onHoverExitSound: event:/Music/player_undetected + onClickSound: event:/Music/player_undetected + onReleaseSound: event:/Music/player_undetected + hoverScale: 1.10000002 + clickScale: 0.899999976 +- EID: 11 + Name: Options Button + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -700, y: -300, z: 0.400000006} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 450, y: 100, z: 1} + IsActive: true + Renderable Component: + Mesh: 141771688 + Material: 129340704 + IsActive: true + Button Component: + Default Texture: 52901020 + Hovered Texture: 62235279 + Clicked Texture: 64722619 + IsActive: true + UI Component: + Canvas ID: 0 + Hovered: false + Clicked: false + IsActive: true + Scripts: + - Type: SHADE_Scripting.UI.ButtonFX + Enabled: true + onHoverEnterSound: event:/Music/player_undetected + onHoverExitSound: event:/Music/player_undetected + onClickSound: event:/Music/player_undetected + onReleaseSound: event:/Music/player_undetected + hoverScale: 1.10000002 + clickScale: 0.899999976 +- EID: 12 + Name: Game Icon + IsActive: true + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -700, y: 350, z: 0.300000012} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 300, y: 300, z: 1} + IsActive: true + Renderable Component: + Mesh: 141771688 + Material: 126117259 + IsActive: true + UI Component: + Canvas ID: 0 + Hovered: false + Clicked: false + IsActive: true + Scripts: + - Type: SHADE_Scripting.UI.ScaleBounce + Enabled: true + minScale: 1 + maxScale: 1.20000005 + duration: 1.5 - EID: 2 Name: Light IsActive: true @@ -152,4 +302,12 @@ - Type: MainMenu Enabled: true sceneID: 96668835 - obj: 1 \ No newline at end of file + obj: 1 +- EID: 8 + Name: TweenManager + IsActive: true + NumberOfChildren: 0 + Components: ~ + Scripts: + - Type: SHADE_Scripting.UI.TweenManager + Enabled: true \ No newline at end of file diff --git a/Assets/Scripts/UI/EasingHelper.cs b/Assets/Scripts/UI/EasingHelper.cs new file mode 100644 index 00000000..b1301d4e --- /dev/null +++ b/Assets/Scripts/UI/EasingHelper.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SHADE_Scripting.UI +{ + + public enum EASING_METHOD + { + EASE_IN_SINE, + EASE_OUT_SINE, + } + + public static class EasingHelper + { + + public static float EaseHelp(float value, EASING_METHOD method) + { + switch (method) + { + case EASING_METHOD.EASE_IN_SINE: + { + return EaseInSine(value); + }break; + case EASING_METHOD.EASE_OUT_SINE: + { + return EaseOutSine(value); + }break; + + default: + return 0.0f; + } + } + + private static float EaseInSine(float value) + { + return (float)(1.0f - Math.Cos((value * Math.PI) / 2.0f)); + } + + private static float EaseOutSine(float value) + { + return (float)(1.0f - Math.Sin(value * Math.PI) / 2.0f); + } + + } +} diff --git a/Assets/Scripts/UI/EasingHelper.cs.shmeta b/Assets/Scripts/UI/EasingHelper.cs.shmeta new file mode 100644 index 00000000..cd4c2aa3 --- /dev/null +++ b/Assets/Scripts/UI/EasingHelper.cs.shmeta @@ -0,0 +1,3 @@ +Name: EasingHelper +ID: 161000975 +Type: 9 diff --git a/Assets/Scripts/UI/SC_ButtonFX.cs b/Assets/Scripts/UI/SC_ButtonFX.cs new file mode 100644 index 00000000..9d75735f --- /dev/null +++ b/Assets/Scripts/UI/SC_ButtonFX.cs @@ -0,0 +1,87 @@ +using SHADE; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SHADE_Scripting.UI +{ + public class ButtonFX:Script + { + public string onHoverEnterSound = "event:/Music/player_undetected"; + public string onHoverExitSound = "event:/Music/player_undetected"; + public string onClickSound = "event:/Music/player_undetected"; + public string onReleaseSound = "event:/Music/player_undetected"; + + [NonSerialized] + private AudioClipHandler onHoverEnterACHandler; + [NonSerialized] + private AudioClipHandler onHoverExitACHandler; + [NonSerialized] + private AudioClipHandler onClickACHandler; + [NonSerialized] + private AudioClipHandler onReleaseACHandler; + + [NonSerialized] + private Vector3 defaultScale; + + public float hoverScale = 1.1f; + public float clickScale = 0.9f; + + + protected override void awake() + { + onHoverEnterACHandler = SHADE.Audio.CreateAudioClip(onHoverEnterSound); + onHoverExitACHandler = SHADE.Audio.CreateAudioClip(onHoverExitSound); + onClickACHandler = SHADE.Audio.CreateAudioClip(onClickSound); + onReleaseACHandler = SHADE.Audio.CreateAudioClip(onReleaseSound); + } + + protected override void start() + { + Transform transform = GetComponent(); + if (transform == null) + return; + defaultScale = transform.LocalScale; + + + UIElement ui = GetComponent(); + if (ui == null) + return; + + + ui.OnClick.RegisterAction(() => + { + onClickACHandler.Play(); + transform.LocalScale = defaultScale * clickScale; + }); + + ui.OnRelease.RegisterAction(() => + { + onReleaseACHandler.Play(); + transform.LocalScale = defaultScale; + }); + + ui.OnHoverEnter.RegisterAction(() => + { + onHoverEnterACHandler.Play(); + transform.LocalScale = defaultScale * hoverScale; + }); + + ui.OnHoverExit.RegisterAction(() => + { + onHoverExitACHandler.Play(); + transform.LocalScale = defaultScale; + }); + + } + + protected override void update() + { + + } + + + } +} diff --git a/Assets/Scripts/UI/SC_ButtonFX.cs.shmeta b/Assets/Scripts/UI/SC_ButtonFX.cs.shmeta new file mode 100644 index 00000000..73e3c1c2 --- /dev/null +++ b/Assets/Scripts/UI/SC_ButtonFX.cs.shmeta @@ -0,0 +1,3 @@ +Name: SC_ButtonFX +ID: 163796084 +Type: 9 diff --git a/Assets/Scripts/UI/SC_ChangeSceneButton.cs b/Assets/Scripts/UI/SC_ChangeSceneButton.cs index b41a421a..c0629d0a 100644 --- a/Assets/Scripts/UI/SC_ChangeSceneButton.cs +++ b/Assets/Scripts/UI/SC_ChangeSceneButton.cs @@ -25,6 +25,7 @@ public class ChangeSceneButton : Script else { Debug.LogError("Failed to register button action for ChangeSceneButton."); + } } protected override void update() diff --git a/Assets/Scripts/UI/SC_ScaleBounce.cs b/Assets/Scripts/UI/SC_ScaleBounce.cs new file mode 100644 index 00000000..0d5ca381 --- /dev/null +++ b/Assets/Scripts/UI/SC_ScaleBounce.cs @@ -0,0 +1,47 @@ +using SHADE; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SHADE_Scripting.UI +{ + public class ScaleBounce:Script + { + [NonSerialized] + private TweenThread thread; + + public float minScale = 1.0f; + public float maxScale = 1.2f; + public float duration = 1.0f; + + private Vector3 defaultScale; + + + protected override void start() + { + thread = TweenManager.CreateTweenThread(duration, minScale, maxScale, EASING_METHOD.EASE_IN_SINE); + Transform trans = GetComponent(); + if(trans != null) + { + defaultScale = trans.LocalScale; + } + } + + protected override void update() + { + Transform trans = GetComponent(); + if(trans != null) + { + trans.LocalScale = defaultScale * thread.GetValue(); + } + if(thread.IsCompleted()) + { + thread.ResetInvert(); + } + } + + + } +} diff --git a/Assets/Scripts/UI/SC_ScaleBounce.cs.shmeta b/Assets/Scripts/UI/SC_ScaleBounce.cs.shmeta new file mode 100644 index 00000000..04ea3afb --- /dev/null +++ b/Assets/Scripts/UI/SC_ScaleBounce.cs.shmeta @@ -0,0 +1,3 @@ +Name: SC_ScaleBounce +ID: 152015842 +Type: 9 diff --git a/Assets/Scripts/UI/SC_TweenManager.cs b/Assets/Scripts/UI/SC_TweenManager.cs new file mode 100644 index 00000000..bbcc8c8f --- /dev/null +++ b/Assets/Scripts/UI/SC_TweenManager.cs @@ -0,0 +1,120 @@ +using SHADE; +using SHADE_Scripting.Audio; +using System; +using System.Collections.Generic; +using System.Threading; + + +namespace SHADE_Scripting.UI +{ + + public class TweenThread + { + private float timer = 0.0f; + public float duration = 1.0f; + public EASING_METHOD method; + private float value = 0.0f; + public float startValue = 0.0f; + public float endValue = 1.0f; + + + public TweenThread(float duration, float startValue, float endValue, EASING_METHOD method) + { + this.duration = duration; + this.method = method; + this.startValue = startValue; + this.endValue = endValue; + } + + public void Update(float deltaTime) + { + if (timer > duration) + return; + timer += deltaTime; + if (timer > duration) + timer = duration; + + value = EasingHelper.EaseHelp(timer/duration, method) * (endValue - startValue) + startValue ; + } + + public bool IsCompleted() + { + return timer >= duration; + } + + public void Reset() + { + timer = 0.0f; + value = startValue; + } + public void Reset(float startValue, float endValue) + { + Reset(); + this.startValue = startValue; + this.endValue = endValue; + } + public void ResetInvert() + { + Reset(); + float temp = startValue; + startValue = endValue; + endValue = temp; + } + + + public float GetValue() + { + return value; + } + + } + + public class TweenManager : Script + { + public static TweenManager Instance { get; private set; } + + [NonSerialized] + private List threadList; + + protected override void awake() + { + if (Instance != null && Instance != this) + RemoveScript(); + else + Instance = this; + + threadList = new List(); + + } + + protected override void onDestroy() + { + if (Instance == this) + Instance = null; + + } + + protected override void update() + { + + foreach (TweenThread thread in threadList) + { + thread.Update(Time.DeltaTimeF); + } + } + + + public static TweenThread CreateTweenThread(float duration, float startValue, float endValue, EASING_METHOD method) + { + if (Instance == null) + return null; + + + TweenThread thread = new TweenThread(duration, startValue, endValue, method); + Instance.threadList.Add(thread); + thread.Reset(); + return thread; + } + + } +} diff --git a/Assets/Scripts/UI/SC_TweenManager.cs.shmeta b/Assets/Scripts/UI/SC_TweenManager.cs.shmeta new file mode 100644 index 00000000..286387c3 --- /dev/null +++ b/Assets/Scripts/UI/SC_TweenManager.cs.shmeta @@ -0,0 +1,3 @@ +Name: SC_TweenManager +ID: 164072799 +Type: 9 diff --git a/Assets/Texture/UI/RaccoonTransparent.dds b/Assets/Texture/UI/RaccoonTransparent.dds new file mode 100644 index 00000000..f974aaec Binary files /dev/null and b/Assets/Texture/UI/RaccoonTransparent.dds differ diff --git a/Assets/Texture/UI/RaccoonTransparent.shtex b/Assets/Texture/UI/RaccoonTransparent.shtex new file mode 100644 index 00000000..77483a50 Binary files /dev/null and b/Assets/Texture/UI/RaccoonTransparent.shtex differ diff --git a/Assets/Texture/UI/RaccoonTransparent.shtex.shmeta b/Assets/Texture/UI/RaccoonTransparent.shtex.shmeta new file mode 100644 index 00000000..3e28bfd3 --- /dev/null +++ b/Assets/Texture/UI/RaccoonTransparent.shtex.shmeta @@ -0,0 +1,3 @@ +Name: RaccoonTransparent +ID: 51158984 +Type: 3