2020-12-10 19:51:02 +01:00
using System.Collections.Generic ;
2021-01-19 13:59:31 +01:00
using Unity.Collections ;
2020-12-10 19:51:02 +01:00
using UnityEngine ;
2020-12-08 17:36:20 +01:00
namespace TAO.VertexAnimation
{
2021-01-18 13:42:45 +01:00
[CreateAssetMenu(fileName = "new AnimationLibrary", menuName = "TAO/VertexAnimation/AnimationLibrary", order = 400)]
2020-12-10 19:51:02 +01:00
public class VA_AnimationLibrary : ScriptableObject
2020-12-08 17:36:20 +01:00
{
2020-12-10 19:51:02 +01:00
[SerializeField]
2020-12-21 23:19:05 +01:00
private List < VA_AnimationBook > animationBooks = new List < VA_AnimationBook > ( ) ;
2020-12-08 17:36:20 +01:00
2020-12-10 19:51:02 +01:00
[HideInInspector]
2021-01-19 01:18:25 +01:00
public List < VA_AnimationData > animationData = null ;
2020-12-10 19:51:02 +01:00
2021-01-19 13:59:31 +01:00
#if UNITY_EDITOR
[SerializeField]
private List < VA_Animation > loadedAnimationsPreview = null ;
#endif
2022-02-19 16:21:57 +01:00
public Unity . Entities . Hash128 key ;
public string guid ;
public void Init ( )
2020-12-10 19:51:02 +01:00
{
2022-02-19 16:21:57 +01:00
// generate guid
guid = System . Guid . NewGuid ( ) . ToString ( "N" ) ;
key = new Unity . Entities . Hash128 ( guid ) ;
2021-01-19 01:18:25 +01:00
animationData = new List < VA_AnimationData > ( ) ;
2022-02-19 16:21:57 +01:00
2020-12-21 23:19:05 +01:00
2021-01-19 01:18:25 +01:00
foreach ( VA_AnimationBook book in animationBooks )
2020-12-10 19:51:02 +01:00
{
2021-01-19 13:59:31 +01:00
book . UpdateMaterials ( ) ;
2021-01-19 01:18:25 +01:00
2021-01-19 13:59:31 +01:00
if ( book ! = null )
2021-01-19 01:18:25 +01:00
{
2021-01-19 13:59:31 +01:00
foreach ( VA_Animation animation in book . animations )
{
2021-01-19 15:23:52 +01:00
// TODO: Fix data name, FixedString32 doesn't transfer from editor?
//animation.Data.name = new FixedString32(animation.name);
animationData . Add ( animation . GetData ( ) ) ;
2021-01-19 13:59:31 +01:00
}
2021-01-19 01:18:25 +01:00
}
2020-12-10 19:51:02 +01:00
}
}
2021-01-21 11:06:58 +01:00
public void OnValidate ( )
2020-12-10 19:51:02 +01:00
{
2021-01-19 13:59:31 +01:00
Dictionary < string , VA_Animation > usedNames = new Dictionary < string , VA_Animation > ( ) ;
foreach ( VA_AnimationBook book in animationBooks )
{
if ( book ! = null )
{
foreach ( VA_Animation animation in book . animations )
{
if ( ! usedNames . ContainsKey ( animation . name ) )
{
usedNames . Add ( animation . name , animation ) ;
}
else
{
Debug . LogWarning ( string . Format ( "Naming conflict found in {0} - Animation {1} and {2} have the same name!" , name , usedNames [ animation . name ] . name , animation . name ) ) ;
}
}
}
}
#if UNITY_EDITOR
loadedAnimationsPreview = new List < VA_Animation > ( ) ;
foreach ( var un in usedNames )
{
loadedAnimationsPreview . Add ( un . Value ) ;
}
#endif
2020-12-10 19:51:02 +01:00
}
2020-12-08 17:36:20 +01:00
}
}