using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace Animmal.Animmals1
|
|
{
|
|
public enum ANIMATORSTYLE { fourlegged, flying, bipedal, human}
|
|
[System.Serializable]
|
|
public class AssetDB
|
|
{
|
|
public string Name;
|
|
public ANIMATORSTYLE AnimatorStyle;
|
|
public SKINS AssetSkins;
|
|
public Vector3 Offset;
|
|
|
|
}
|
|
public class PreviewManager : MonoBehaviour
|
|
{
|
|
#region VARIABLES
|
|
|
|
|
|
[Header("Assets")]
|
|
public bool LoopAssets = true;
|
|
public List<AssetDB> AssetDB;
|
|
public float AssetTransitionTime = 2f;
|
|
|
|
[Header("Settings")]
|
|
public int DefaultFov = 60;
|
|
public int MaxZoomOutFov = 90;
|
|
public int MinZoominFov = 40;
|
|
public int DefaultRotation = -122;
|
|
public int MinRotation = -270;
|
|
public int MaxRotation = 90;
|
|
|
|
|
|
[Header("SceneSetup")]
|
|
public Camera DemoCamera;
|
|
public Transform StageCenter;
|
|
public Transform RightOffStage;
|
|
public Transform LeftOffStage;
|
|
|
|
[Header("UISetup")]
|
|
public Text AssetName;
|
|
[Space(5f)]
|
|
public Slider RotationSlider;
|
|
public Slider ZoomSlider;
|
|
public Slider SkinSlider;
|
|
public Image BlockerSliders;
|
|
public Image BlockerButtons;
|
|
[Space(5f)]
|
|
public Button Idle;
|
|
public Button Idle2;
|
|
public Button Idle3;
|
|
public Button Walk;
|
|
public Button Run;
|
|
public Button RunJumpL;
|
|
public Button RunJumpR;
|
|
public Button Jump;
|
|
public Button Wave;
|
|
public Button Falling;
|
|
public Button Fly;
|
|
public Button FlyStart;
|
|
public Button FlyEnd;
|
|
public Button Attack;
|
|
public Button Hit;
|
|
public Button Death;
|
|
|
|
int CurrentItemID = 0;
|
|
int CurrentSkinID = 0;
|
|
|
|
AssetsObject AssetsItem1;
|
|
AssetsObject AssetsItem2;
|
|
int CurrentObjectOnStage = 0;
|
|
|
|
bool buttonsLocked;
|
|
bool ButtonsLocked
|
|
{
|
|
get
|
|
{
|
|
return buttonsLocked;
|
|
}
|
|
set
|
|
{
|
|
buttonsLocked = value;
|
|
if (value)
|
|
{
|
|
BlockerSliders.gameObject.SetActive(true);
|
|
BlockerButtons.gameObject.SetActive(true);
|
|
|
|
}
|
|
else
|
|
{
|
|
BlockerSliders.gameObject.SetActive(false);
|
|
BlockerButtons.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region SETUP
|
|
|
|
|
|
private void Start()
|
|
{
|
|
ZoomSlider.minValue = MinZoominFov;
|
|
ZoomSlider.maxValue = MaxZoomOutFov;
|
|
ZoomSlider.value = DefaultFov;
|
|
|
|
RotationSlider.minValue = MinRotation;
|
|
RotationSlider.maxValue = MaxRotation;
|
|
RotationSlider.value = DefaultRotation;
|
|
|
|
SetupAssetItems();
|
|
SetupSkinSlider();
|
|
SetupAnimationButtons();
|
|
SetupAssetName();
|
|
}
|
|
void SetupAssetItems()
|
|
{
|
|
AssetsItem1 = new GameObject().AddComponent<AssetsObject>();
|
|
AssetsItem1.gameObject.name = "Assets1";
|
|
AssetsItem1.Init(AssetDB);
|
|
AssetsItem1.gameObject.transform.eulerAngles = new Vector3(0, DefaultRotation, 0);
|
|
AssetsItem1.transform.position = StageCenter.position;
|
|
AssetsItem2 = Instantiate(AssetsItem1) as AssetsObject;
|
|
AssetsItem2.gameObject.name = "Assets2";
|
|
AssetsItem2.transform.position = RightOffStage.position;
|
|
AssetsItem2.gameObject.transform.eulerAngles = new Vector3(0, DefaultRotation, 0);
|
|
}
|
|
|
|
void SetupSkinSlider()
|
|
{
|
|
SkinSlider.maxValue = AssetDB[CurrentItemID].AssetSkins.Skins.Count - 1;
|
|
SkinSlider.value = 0;
|
|
}
|
|
|
|
void SetupAssetName()
|
|
{
|
|
AssetName.text = AssetDB[CurrentItemID].Name.ToUpper() + " - Triangle Count: " + OnStageItem().GetObjectTriangleCount().ToString();
|
|
}
|
|
|
|
void SetupAnimationButtons()
|
|
{
|
|
switch (AssetDB[CurrentItemID].AnimatorStyle)
|
|
{
|
|
case ANIMATORSTYLE.fourlegged:
|
|
Idle.gameObject.SetActive(true);
|
|
Idle2.gameObject.SetActive(true);
|
|
Walk.gameObject.SetActive(true);
|
|
Run.gameObject.SetActive(true);
|
|
Fly.gameObject.SetActive(false);
|
|
FlyStart.gameObject.SetActive(false);
|
|
FlyEnd.gameObject.SetActive(false);
|
|
Attack.gameObject.SetActive(true);
|
|
Hit.gameObject.SetActive(true);
|
|
Jump.gameObject.SetActive(true);
|
|
|
|
Idle3.gameObject.SetActive(false);
|
|
RunJumpL.gameObject.SetActive(false);
|
|
RunJumpR.gameObject.SetActive(false);
|
|
Death.gameObject.SetActive(false);
|
|
Wave.gameObject.SetActive(false);
|
|
Falling.gameObject.SetActive(false);
|
|
break;
|
|
case ANIMATORSTYLE.flying:
|
|
Idle.gameObject.SetActive(true);
|
|
Idle2.gameObject.SetActive(false);
|
|
Walk.gameObject.SetActive(false);
|
|
Run.gameObject.SetActive(false);
|
|
Fly.gameObject.SetActive(true);
|
|
FlyStart.gameObject.SetActive(true);
|
|
FlyEnd.gameObject.SetActive(true);
|
|
Attack.gameObject.SetActive(true);
|
|
Hit.gameObject.SetActive(true);
|
|
Jump.gameObject.SetActive(true);
|
|
|
|
Idle3.gameObject.SetActive(false);
|
|
RunJumpL.gameObject.SetActive(false);
|
|
RunJumpR.gameObject.SetActive(false);
|
|
Death.gameObject.SetActive(false);
|
|
Wave.gameObject.SetActive(false);
|
|
Falling.gameObject.SetActive(false);
|
|
break;
|
|
case ANIMATORSTYLE.bipedal:
|
|
Idle.gameObject.SetActive(true);
|
|
Idle2.gameObject.SetActive(false);
|
|
Walk.gameObject.SetActive(true);
|
|
Run.gameObject.SetActive(false);
|
|
Fly.gameObject.SetActive(false);
|
|
FlyStart.gameObject.SetActive(false);
|
|
FlyEnd.gameObject.SetActive(false);
|
|
Attack.gameObject.SetActive(true);
|
|
Hit.gameObject.SetActive(true);
|
|
Jump.gameObject.SetActive(true);
|
|
Idle3.gameObject.SetActive(false);
|
|
RunJumpL.gameObject.SetActive(false);
|
|
RunJumpR.gameObject.SetActive(false);
|
|
Death.gameObject.SetActive(false);
|
|
Wave.gameObject.SetActive(false);
|
|
Falling.gameObject.SetActive(false);
|
|
break;
|
|
case ANIMATORSTYLE.human:
|
|
Idle.gameObject.SetActive(true);
|
|
Idle2.gameObject.SetActive(true);
|
|
Idle3.gameObject.SetActive(true);
|
|
Walk.gameObject.SetActive(true);
|
|
Run.gameObject.SetActive(true);
|
|
RunJumpL.gameObject.SetActive(true);
|
|
RunJumpR.gameObject.SetActive(true);
|
|
Death.gameObject.SetActive(true);
|
|
Hit.gameObject.SetActive(true);
|
|
Attack.gameObject.SetActive(true);
|
|
Wave.gameObject.SetActive(true);
|
|
Falling.gameObject.SetActive(true);
|
|
Fly.gameObject.SetActive(false);
|
|
FlyStart.gameObject.SetActive(false);
|
|
FlyEnd.gameObject.SetActive(false);
|
|
break;
|
|
default:
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region BUTTONS
|
|
|
|
|
|
public void LeftClicked()
|
|
{
|
|
if (ButtonsLocked)
|
|
return;
|
|
|
|
if (CurrentItemID == 0)
|
|
{
|
|
if (LoopAssets)
|
|
CurrentItemID = AssetDB.Count - 1;
|
|
else
|
|
return;
|
|
}
|
|
else
|
|
CurrentItemID--;
|
|
|
|
OffStageItem().SetObject(CurrentItemID);
|
|
OffStageItem().transform.position = RightOffStage.position;
|
|
StartCoroutine(MoveAssets(LeftOffStage.position, RightOffStage.position));
|
|
}
|
|
|
|
public void RightClicked()
|
|
{
|
|
if (ButtonsLocked)
|
|
return;
|
|
|
|
if (CurrentItemID == AssetDB.Count - 1)
|
|
{
|
|
if (LoopAssets)
|
|
CurrentItemID = 0;
|
|
else
|
|
return;
|
|
}
|
|
else
|
|
CurrentItemID++;
|
|
|
|
OffStageItem().SetObject(CurrentItemID);
|
|
OffStageItem().transform.position = LeftOffStage.position;
|
|
StartCoroutine(MoveAssets(RightOffStage.position, LeftOffStage.position));
|
|
}
|
|
|
|
public void PlayAnimation(string _AnimTrigger)
|
|
{
|
|
OnStageItem().SetAnimation(_AnimTrigger);
|
|
}
|
|
|
|
public void RotationSliderValueChanged()
|
|
{
|
|
if (OnStageItem() != null)
|
|
OnStageItem().transform.eulerAngles = new Vector3(0, RotationSlider.value, 0);
|
|
}
|
|
public void ZOOMSliderValueChanged()
|
|
{
|
|
DemoCamera.fieldOfView = ZoomSlider.value;
|
|
}
|
|
public void SKINSliderValueChanged()
|
|
{
|
|
OnStageItem().SetSkin((int)SkinSlider.value);
|
|
}
|
|
#endregion
|
|
|
|
#region ASSETMOVEMENT
|
|
|
|
|
|
IEnumerator MoveAssets(Vector3 _OffStageEndPoint, Vector3 _OnStageStartPoint)
|
|
{
|
|
ButtonsLocked = true;
|
|
|
|
OffStageItem().transform.eulerAngles = new Vector3(0, DefaultRotation, 0);
|
|
|
|
float elapsedTime = 0;
|
|
Vector3 startingPos = transform.position;
|
|
while (elapsedTime < AssetTransitionTime)
|
|
{
|
|
OnStageItem().transform.position = Mathfx.EasyInOut(StageCenter.position, _OffStageEndPoint, (elapsedTime / AssetTransitionTime));
|
|
OffStageItem().transform.position = Mathfx.EasyInOut(_OnStageStartPoint, StageCenter.position, (elapsedTime / AssetTransitionTime));
|
|
elapsedTime += Time.deltaTime;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
OnStageItem().transform.position = _OffStageEndPoint;
|
|
OnStageItem().transform.eulerAngles = new Vector3(0, DefaultRotation, 0);
|
|
OffStageItem().transform.position = StageCenter.position;
|
|
RotationSlider.value = -90;
|
|
|
|
SwitchOnScreenItem();
|
|
SetupSkinSlider();
|
|
SetupAnimationButtons();
|
|
SetupAssetName();
|
|
ButtonsLocked = false;
|
|
}
|
|
|
|
|
|
|
|
AssetsObject OnStageItem()
|
|
{
|
|
if (CurrentObjectOnStage == 0)
|
|
return AssetsItem1;
|
|
else
|
|
return AssetsItem2;
|
|
}
|
|
|
|
AssetsObject OffStageItem()
|
|
{
|
|
if (CurrentObjectOnStage == 0)
|
|
return AssetsItem2;
|
|
else
|
|
return AssetsItem1;
|
|
}
|
|
|
|
void SwitchOnScreenItem()
|
|
{
|
|
if (CurrentObjectOnStage == 0)
|
|
CurrentObjectOnStage = 1;
|
|
else
|
|
CurrentObjectOnStage = 0;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|