mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
Initial commit
This commit is contained in:
commit
3c7cc0c973
8391 changed files with 704313 additions and 0 deletions
|
@ -0,0 +1,83 @@
|
|||
#if ENABLE_ENTITIES
|
||||
|
||||
using Unity.Collections;
|
||||
using Unity.Entities;
|
||||
using Unity.Mathematics;
|
||||
using UnityEngine.U2D.Common;
|
||||
using UnityEngine.Scripting;
|
||||
|
||||
namespace UnityEngine.U2D.Animation
|
||||
{
|
||||
[Preserve]
|
||||
[UnityEngine.ExecuteAlways]
|
||||
[UpdateInGroup(typeof(PresentationSystemGroup))]
|
||||
internal class PrepareSkinningSystem : ComponentSystem
|
||||
{
|
||||
EntityQuery m_ComponentGroup;
|
||||
|
||||
protected override void OnCreateManager()
|
||||
{
|
||||
m_ComponentGroup = GetEntityQuery(typeof(SpriteSkin), typeof(WorldToLocal), typeof(SpriteComponent), typeof(Vertex), typeof(BoneTransform));
|
||||
}
|
||||
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
var worldToLocalComponents = m_ComponentGroup.ToComponentDataArray<WorldToLocal>(Allocator.TempJob);
|
||||
|
||||
var counter = 0;
|
||||
Entities.With(m_ComponentGroup).ForEach((Entity entity, SpriteSkin spriteSkin) =>
|
||||
{
|
||||
var sr = EntityManager.GetSharedComponentData<SpriteComponent>(entity);
|
||||
var vertexBuffer = EntityManager.GetBuffer<Vertex>(entity);
|
||||
var boneTransformBuffer = EntityManager.GetBuffer<BoneTransform>(entity);
|
||||
var currentSprite = sr.Value;
|
||||
var currentWorldToLocal = worldToLocalComponents[counter];
|
||||
Sprite sprite = null;
|
||||
if (spriteSkin != null)
|
||||
{
|
||||
|
||||
var spriteRenderer = spriteSkin.spriteRenderer;
|
||||
var isValid = spriteRenderer.enabled && spriteSkin.isValid;
|
||||
var isVisible = spriteRenderer.isVisible || spriteSkin.ForceSkinning;
|
||||
|
||||
if (!isValid)
|
||||
spriteSkin.DeactivateSkinning();
|
||||
else if (isVisible)
|
||||
{
|
||||
spriteSkin.ForceSkinning = false;
|
||||
sprite = spriteRenderer.sprite;
|
||||
float4x4 worldToLocal = spriteSkin.transform.worldToLocalMatrix;
|
||||
|
||||
if (vertexBuffer.Length != sprite.GetVertexCount())
|
||||
{
|
||||
vertexBuffer = PostUpdateCommands.SetBuffer<Vertex>(entity);
|
||||
vertexBuffer.ResizeUninitialized(sprite.GetVertexCount());
|
||||
}
|
||||
|
||||
InternalEngineBridge.SetDeformableBuffer(spriteRenderer, vertexBuffer.Reinterpret<Vector3>().AsNativeArray());
|
||||
|
||||
if (boneTransformBuffer.Length != spriteSkin.boneTransforms.Length)
|
||||
{
|
||||
boneTransformBuffer = PostUpdateCommands.SetBuffer<BoneTransform>(entity);
|
||||
boneTransformBuffer.ResizeUninitialized(spriteSkin.boneTransforms.Length);
|
||||
}
|
||||
|
||||
for (var j = 0; j < boneTransformBuffer.Length; ++j)
|
||||
boneTransformBuffer[j] = new BoneTransform() { Value = spriteSkin.boneTransforms[j].localToWorldMatrix };
|
||||
|
||||
PostUpdateCommands.SetComponent<WorldToLocal>(entity, new WorldToLocal() { Value = worldToLocal });
|
||||
}
|
||||
|
||||
if (currentSprite != sprite)
|
||||
PostUpdateCommands.SetSharedComponent<SpriteComponent>(entity, new SpriteComponent() { Value = sprite });
|
||||
|
||||
if (!spriteRenderer.enabled)
|
||||
spriteSkin.ForceSkinning = true;
|
||||
}
|
||||
});
|
||||
worldToLocalComponents.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue