您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
71 行
2.8 KiB
71 行
2.8 KiB
using Unity.Entities;
|
|
using Unity.Mathematics;
|
|
using UnityEngine;
|
|
|
|
public struct ProjectileData : IComponentData, INetworkSerializable
|
|
{
|
|
public int test; // TODO remove this test no longer needed
|
|
public uint projectileTypeRegistryId;
|
|
public Entity projectileOwner;
|
|
public int startTick;
|
|
public float3 startPos;
|
|
public float3 endPos;
|
|
public int impacted;
|
|
public float3 impactPos;
|
|
public float3 impactNormal;
|
|
|
|
public void Serialize(ref NetworkWriter networkWriter, IEntityReferenceSerializer refSerializer)
|
|
{
|
|
refSerializer.SerializeReference(ref networkWriter, "owner", projectileOwner);
|
|
networkWriter.WriteUInt16("typeId", (ushort)projectileTypeRegistryId);
|
|
networkWriter.WriteInt32("startTick", startTick);
|
|
networkWriter.WriteVector3Q("startPosition", startPos,2);
|
|
networkWriter.WriteVector3Q("endPosition", endPos,2);
|
|
networkWriter.WriteBoolean("impacted", impacted == 1);
|
|
networkWriter.WriteVector3Q("impactPosition", impactPos,2);
|
|
networkWriter.WriteVector3Q("impactNormal", impactNormal,2);
|
|
}
|
|
|
|
public void Deserialize(ref NetworkReader networkReader, IEntityReferenceSerializer refSerializer, int tick)
|
|
{
|
|
refSerializer.DeserializeReference(ref networkReader, ref projectileOwner);
|
|
projectileTypeRegistryId = networkReader.ReadUInt16();
|
|
startTick = networkReader.ReadInt32();
|
|
startPos = networkReader.ReadVector3Q();
|
|
endPos = networkReader.ReadVector3Q();
|
|
impacted = networkReader.ReadBoolean() ? 1 : 0;
|
|
impactPos = networkReader.ReadVector3Q();
|
|
impactNormal = networkReader.ReadVector3Q();
|
|
}
|
|
|
|
// State properties
|
|
public int rayQueryId;
|
|
public int teamId;
|
|
public int collisionCheckTickDelay;
|
|
public float3 position;
|
|
public ProjectileSettings settings;
|
|
public float maxAge;
|
|
public int impactTick;
|
|
|
|
public void Initialize(ProjectileRequest request)
|
|
{
|
|
rayQueryId = -1;
|
|
projectileOwner = request.owner;
|
|
projectileTypeRegistryId = request.projectileTypeRegistryId;
|
|
startTick = request.startTick;
|
|
startPos = request.startPosition;
|
|
endPos = request.endPosition;
|
|
teamId = request.teamId;
|
|
position = request.startPosition;
|
|
collisionCheckTickDelay = request.collisionTestTickDelay;
|
|
}
|
|
|
|
public void LoadSettings(BundledResourceManager resourceSystem)
|
|
{
|
|
var projectileRegistry = resourceSystem.GetResourceRegistry<ProjectileRegistry>();
|
|
var index = projectileRegistry.GetIndexByRegistryId(projectileTypeRegistryId);
|
|
settings = projectileRegistry.entries[index].definition.properties;
|
|
|
|
maxAge = Vector3.Magnitude(endPos - startPos) / settings.velocity;
|
|
}
|
|
}
|