MP-TD/Assets/Scripts/Common/InitializeCharacterSystem.cs

44 lines
1.5 KiB
C#

using Unity.Burst;
using Unity.Collections;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Physics;
using Unity.Rendering;
using UnityEngine;
using UnityEngine.Rendering;
namespace Common
{
[UpdateInGroup(typeof(SimulationSystemGroup), OrderFirst = true)]
[WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation | WorldSystemFilterFlags.ClientSimulation)]
public partial struct InitializeCharacterSystem : ISystem
{
public void OnCreate(ref SystemState state)
{
}
public void OnUpdate(ref SystemState state)
{
var ecb = new EntityCommandBuffer(Allocator.Temp);
foreach (var (physicsMass, config, newCharacterEntity) in SystemAPI.Query<RefRW<PhysicsMass>, RefRO<CharacterConfig>>().WithAny<NewCharacterTag>().WithEntityAccess())
{
physicsMass.ValueRW.InverseInertia[0] = 0;
physicsMass.ValueRW.InverseInertia[1] = 0;
physicsMass.ValueRW.InverseInertia[2] = 0;
var requestedColor = config.ValueRO.Color;
var color = new float4(requestedColor.r, requestedColor.g, requestedColor.b, requestedColor.a);
ecb.AddComponent(newCharacterEntity, new URPMaterialPropertyBaseColor{Value = color});
ecb.RemoveComponent<NewCharacterTag>(newCharacterEntity);
}
ecb.Playback(state.EntityManager);
}
public void OnDestroy(ref SystemState state)
{
}
}
}