| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- using System;
- using UnityEngine;
- using UnityEngine.Scripting;
- #if ENABLE_ENTITIES
- using Unity.Entities;
- #endif
- namespace UnityEngine.U2D.Animation
- {
- [AddComponentMenu("")]
- [Preserve]
- internal class SpriteSkinEntity
- #if ENABLE_ENTITIES
- : GameObjectEntity
- #else
- : MonoBehaviour
- #endif
- {
- #if ENABLE_ENTITIES
- bool enableEntitiesCached = true;
- #if UNITY_EDITOR
- static bool assemblyReload = false;
- #endif
- SpriteSkin m_SpriteSkin;
- SpriteSkin spriteSkin
- {
- get
- {
- if (m_SpriteSkin == null)
- m_SpriteSkin = GetComponent<SpriteSkin>();
- return m_SpriteSkin;
- }
- }
- bool entitiesEnabled
- {
- get
- {
- if (m_SpriteSkin == null)
- return false;
- return m_SpriteSkin.entitiesEnabled;
- }
- }
- protected override void OnEnable()
- {
- if (entitiesEnabled)
- {
- base.OnEnable();
- SetupEntity();
- SetupSpriteSkin();
- #if UNITY_EDITOR
- UnityEditor.AssemblyReloadEvents.afterAssemblyReload += OnAfterAssemblyReload;
- UnityEditor.AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload;
- #endif
- }
- }
- #if UNITY_EDITOR
- public void OnBeforeAssemblyReload()
- {
- assemblyReload = true;
- }
- public void OnAfterAssemblyReload()
- {
- assemblyReload = false;
- }
- #endif
- protected override void OnDisable()
- {
- if (entitiesEnabled)
- {
- DeactivateSkinning();
- #if UNITY_EDITOR
- if (!assemblyReload)
- #endif
- base.OnDisable();
- }
- if (spriteSkin.isValid)
- spriteSkin.entitiesEnabled = false;
- }
- private void SetupEntity()
- {
- if (EntityManager == null)
- return;
- EntityManager.AddBuffer<Vertex>(Entity);
- EntityManager.AddBuffer<BoneTransform>(Entity);
- EntityManager.AddComponent(Entity, typeof(WorldToLocal));
- EntityManager.AddSharedComponentData(Entity, new SpriteComponent() { Value = null });
- }
- private void SetupSpriteSkin()
- {
- if (spriteSkin != null)
- {
- spriteSkin.ForceSkinning = true;
- if (spriteSkin.bounds.extents != Vector3.zero) //Maybe log a warning?
- InternalEngineBridge.SetLocalAABB(spriteSkin.spriteRenderer, spriteSkin.bounds);
- }
- }
- private void DeactivateSkinning()
- {
- if (spriteSkin != null)
- spriteSkin.DeactivateSkinning();
- }
- private void Update()
- {
- if (entitiesEnabled != enableEntitiesCached)
- {
- if (entitiesEnabled)
- OnEnable();
- else
-
- OnDisable();
- enableEntitiesCached = entitiesEnabled;
- }
- }
- #endif
- }
- }
|