You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

349 lines
12 KiB

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
}
}