[Fix] All in one + add dice

This commit is contained in:
2026-02-23 22:24:46 +07:00
parent 4f942cd7c0
commit 2f9e082d75
1593 changed files with 474068 additions and 31 deletions
@@ -0,0 +1,296 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.SceneManagement;
#endif
using UnityEngine;
using UnityEngine.EventSystems;
namespace AllIn13DShader
{
public class AllIn13dShaderDemoController : MonoBehaviour
{
public DemoExpositor CurrentExpositor
{
get
{
return demoExpositors[currentExpositorIndex];
}
}
public DemoElement CurrentDemoElement
{
get
{
return CurrentExpositor.CurrentDemoElement;
}
}
public DemoSceneConfiguration demoSceneConfig;
public DemoUI demoUI;
public Transform initPosition;
[SerializeField] private SkyController skyController;
[SerializeField] private AllIn1MainLightController mainLightController;
[SerializeField] private DemoExpositor[] demoExpositors;
[SerializeField] private GameObject expositorNameGo;
[SerializeField] private DemoCameraController cameraController;
[SerializeField] private GameObject environmentsParentGo;
//private DemoElement currentDemoElement;
private DemoElement previousDemoElement;
[Space, Header("Start Index")]
[SerializeField] private int startExpositorIndex;
[SerializeField] private int startDemoIndex;
[Space, Header("Event Systems")]
[SerializeField] private EventSystem oldInputEventSystem;
[SerializeField] private EventSystem newInputEventSystem;
[Space, Header("Input Handlers")]
[SerializeField] private InputHandler showDemoInfoHandler;
[Space, Header("Scale Tweens")]
[SerializeField] private AllIn1DemoScaleTween demoLabelScaleTween;
[SerializeField] private AllIn1DemoScaleTween expositorLabelScaleTween;
[SerializeField] private AllIn1DemoScaleTween infoPanelScaleTween;
private int currentExpositorIndex;
private Vector3 targetCameraPosition;
private EnvironmentController currentEnvironmentController;
private bool moveCurrentEnvironment;
private void Start()
{
for(int i = 0; i < demoExpositors.Length; i++)
{
demoExpositors[i].Init(demoSceneConfig);
}
int childCount = environmentsParentGo.transform.childCount;
for(int i = childCount - 1; i >= 0; i--) Destroy(environmentsParentGo.transform.GetChild(i).gameObject);
EnableCorrectInputSystem();
demoExpositors[startExpositorIndex].SetDemoExpositor(startDemoIndex);
demoUI.Refresh(CurrentExpositor);
previousDemoElement = null;
skyController.Init();
cameraController.Init(demoSceneConfig);
DemoChanged();
CurrentDemoElement.Show();
expositorNameGo.SetActive(demoExpositors.Length > 1);
}
public void NavigateToNextExpositor()
{
previousDemoElement = CurrentDemoElement;
Vector3 nextDemoPos = previousDemoElement.transform.position + cameraController.cam.transform.up * demoSceneConfig.distanceBetweenDemos;
CurrentDemoElement.Hide();
ChangeExpositor(1);
moveCurrentEnvironment = false;
CurrentDemoElement.transform.position = nextDemoPos;
CurrentDemoElement.Show();
expositorLabelScaleTween.ScaleDownTween();
infoPanelScaleTween.ScaleUpTween();
DemoChanged();
}
public void NavigateToPreviousExpositor()
{
previousDemoElement = CurrentDemoElement;
Vector3 nextDemoPos = previousDemoElement.transform.position - cameraController.cam.transform.up * demoSceneConfig.distanceBetweenDemos;
CurrentDemoElement.Hide();
ChangeExpositor(-1);
moveCurrentEnvironment = false;
CurrentDemoElement.transform.position = nextDemoPos;
CurrentDemoElement.Show();
expositorLabelScaleTween.ScaleDownTween();
infoPanelScaleTween.ScaleUpTween();
DemoChanged();
}
public void NavigateToPreviousDemo()
{
previousDemoElement = CurrentDemoElement;
DemoElement nextDemoElement = demoExpositors[currentExpositorIndex].GetPreviousDemoElement();
Vector3 nextDemoPos = GetNextDemoPos(previousDemoElement, nextDemoElement, -cameraController.cam.transform.right);
moveCurrentEnvironment = previousDemoElement.demoElementData.environment == nextDemoElement.demoElementData.environment;
demoExpositors[currentExpositorIndex].PreviousDemoElement(nextDemoPos);
demoLabelScaleTween.ScaleDownTween();
infoPanelScaleTween.ScaleUpTween();
DemoChanged();
}
public void NavigateToNextDemo()
{
previousDemoElement = CurrentDemoElement;
DemoElement nextDemoElement = demoExpositors[currentExpositorIndex].GetNextDemoElement();
Vector3 nextDemoPos = GetNextDemoPos(previousDemoElement, nextDemoElement, cameraController.cam.transform.right);
moveCurrentEnvironment = previousDemoElement.demoElementData.environment == nextDemoElement.demoElementData.environment;
demoExpositors[currentExpositorIndex].NextDemoElement(nextDemoPos);
demoLabelScaleTween.ScaleDownTween();
infoPanelScaleTween.ScaleUpTween();
DemoChanged();
}
private void LateUpdate()
{
if (moveCurrentEnvironment && currentEnvironmentController != null)
{
currentEnvironmentController.transform.position += cameraController.GetDeltaMovement();
}
}
private void DemoChanged()
{
demoUI.Refresh(CurrentExpositor);
mainLightController.DemoChanged(CurrentDemoElement.demoElementData);
skyController.DemoChanged(CurrentDemoElement.demoElementData);
cameraController.DemoChanged(CurrentDemoElement);
CheckCurrentEnvironment();
}
private Vector3 GetNextDemoPos(DemoElement previousDemo, DemoElement nextDemo, Vector3 dir)
{
//Vector3 res = previousDemo.transform.position;
//if(previousDemo.demoElementData.environment != nextDemo.demoElementData.environment)
//{
// res += dir * demoSceneConfig.distanceBetweenDemos;
//}
Vector3 res = previousDemo.transform.position + dir * demoSceneConfig.distanceBetweenDemos;
return res;
}
private void CheckCurrentEnvironment()
{
DemoEnvironment currentEnvironment = CurrentDemoElement.demoElementData.environment;
DemoEnvironment previousEnvironment = previousDemoElement?.demoElementData.environment;
if(currentEnvironment != previousEnvironment)
{
if (currentEnvironmentController != null)
{
currentEnvironmentController.Hide();
}
if(currentEnvironment != null)
{
ChangeEnvironment(currentEnvironment);
}
moveCurrentEnvironment = false;
}
else
{
moveCurrentEnvironment = true;
}
}
private void ChangeEnvironment(DemoEnvironment environment)
{
GameObject newEnvironmentGo = Instantiate(environment.prefab);
newEnvironmentGo.transform.parent = environmentsParentGo.transform;
newEnvironmentGo.transform.position = CurrentDemoElement.transform.position;
newEnvironmentGo.transform.rotation = Quaternion.identity;
newEnvironmentGo.transform.localScale = Vector3.zero;
currentEnvironmentController = newEnvironmentGo.GetComponent<EnvironmentController>();
currentEnvironmentController.Init(demoSceneConfig);
currentEnvironmentController.Show(CurrentDemoElement);
}
#if UNITY_EDITOR
[ContextMenu("Setup Demo Scene")]
public void Setup()
{
RemoveOldElements();
for(int i = 0; i < demoSceneConfig.expositors.Length; i++)
{
DemoExpositorData expositorData = demoSceneConfig.expositors[i];
GameObject goExpositor = new GameObject($"Expositor {i + 1}");
goExpositor.transform.parent = transform;
goExpositor.transform.localPosition = new Vector3(0f, i * -25f, 0f);
goExpositor.transform.localRotation = Quaternion.identity;
DemoExpositor expositor = goExpositor.AddComponent<DemoExpositor>();
expositor.Setup(expositorData, demoSceneConfig);
ArrayUtility.Add(ref demoExpositors, expositor);
}
currentExpositorIndex = 0;
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
}
private void RemoveOldElements()
{
DemoExpositor[] expositorsToDestroy = transform.GetComponentsInChildren<DemoExpositor>();
for(int i = 0; i < expositorsToDestroy.Length; i++)
{
DestroyImmediate(expositorsToDestroy[i].gameObject);
}
ArrayUtility.Clear(ref demoExpositors);
}
#endif
private void ChangeExpositor(int changeAmount)
{
currentExpositorIndex += changeAmount;
if(currentExpositorIndex >= demoExpositors.Length) currentExpositorIndex = 0;
if(currentExpositorIndex < 0) currentExpositorIndex = demoExpositors.Length - 1;
}
public int GetCurrentExpositorIndex() => currentExpositorIndex;
private void EnableCorrectInputSystem()
{
bool newInputSystemEnabled = false;
#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER
newInputSystemEnabled = true;
#endif
oldInputEventSystem.gameObject.SetActive(!newInputSystemEnabled);
newInputEventSystem.gameObject.SetActive(newInputSystemEnabled);
}
}
}