protected override void CreateHeadSegment(ArcRaw arc, int groupID) { Entity headEntity = em.Instantiate(headArcNoteEntityPrefab); RenderMesh renderMesh = PlayManager.ArcheadRenderMeshes[arc.color]; em.SetSharedComponentData(headEntity, renderMesh); float floorpos = PlayManager.Conductor.GetFloorPositionFromTiming(arc.timing, arc.timingGroup); float x = Conversion.GetWorldX(arc.startX); float y = Conversion.GetWorldY(arc.startY); const float z = 0; int t1 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(floorpos + Constants.RenderFloorPositionRange, arc.timingGroup); int t2 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(floorpos - Constants.RenderFloorPositionRange, arc.timingGroup); int appearTime = (t1 < t2) ? t1 : t2; em.SetComponentData(headEntity, new Translation() { Value = math.float3(x, y, z) }); em.SetComponentData(headEntity, new FloorPosition(floorpos)); em.SetComponentData(headEntity, new TimingGroup(arc.timingGroup)); em.SetComponentData(headEntity, new AppearTime(appearTime)); em.SetComponentData(headEntity, new DestroyOnTiming(arc.timing)); em.SetComponentData(headEntity, new ArcGroupID(groupID)); }
protected override void CreateSegment(ArcRaw arc, float3 start, float3 end, int time, int endTime, int groupID) { Entity traceEntity = em.Instantiate(traceNoteEntityPrefab); float dx = start.x - end.x; float dy = start.y - end.y; float dz = start.z - end.z; int t1 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(start.z + Constants.RenderFloorPositionRange, arc.timingGroup); int t2 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(end.z - Constants.RenderFloorPositionRange, arc.timingGroup); int appearTime = (t1 < t2) ? t1 : t2; //Shear along xy + scale along z matrix em.SetComponentData(traceEntity, new LocalToWorld() { Value = new float4x4( 1, 0, dx, start.x, 0, 1, dy, start.y, 0, 0, dz, 0, 0, 0, 0, 1 ) }); em.SetComponentData(traceEntity, new FloorPosition(start.z)); em.SetComponentData(traceEntity, new TimingGroup(arc.timingGroup)); em.SetComponentData(traceEntity, new BaseOffset(new float4(start.x, start.y, 0, 0))); em.SetComponentData(traceEntity, new BaseShear(new float4(dx, dy, dz, 0))); em.SetComponentData(traceEntity, new Cutoff(true)); em.SetComponentData(traceEntity, new AppearTime(appearTime)); em.SetComponentData(traceEntity, new DestroyOnTiming(endTime)); em.SetComponentData(traceEntity, new ChartTime(time)); em.SetComponentData(traceEntity, new ChartEndTime(endTime)); em.SetComponentData(traceEntity, new ArcGroupID(groupID)); if (time < endTime) { Entity traceShadowEntity = em.Instantiate(traceShadowEntityPrefab); em.SetComponentData(traceShadowEntity, new FloorPosition() { value = start.z }); em.SetComponentData(traceShadowEntity, new LocalToWorld() { Value = new float4x4( 1, 0, dx, start.x, 0, 1, 0, 0, 0, 0, dz, 0, 0, 0, 0, 1 ) }); em.SetComponentData(traceShadowEntity, new BaseOffset(new float4(start.x, 0, 0, 0))); em.SetComponentData(traceShadowEntity, new BaseShear(new float4(dx, 0, dz, 0))); em.SetComponentData(traceShadowEntity, new Cutoff(true)); em.SetComponentData(traceShadowEntity, new TimingGroup(arc.timingGroup)); em.SetComponentData(traceShadowEntity, new AppearTime(appearTime)); em.SetComponentData(traceShadowEntity, new DestroyOnTiming(endTime)); em.SetComponentData(traceShadowEntity, new ChartTime(time)); } }
public ArcData(ArcRaw arc) { this.start = Conversion.GetWorldPos(math.float2(arc.startX, arc.startY)); this.end = Conversion.GetWorldPos(math.float2(arc.endX, arc.endY)); this.easing = arc.easing; this.startTiming = arc.timing; this.endTiming = arc.endTiming; }
protected override void CreateJudgeEntity(ArcRaw arc, int groupId, float startBpm) { Entity en = em.CreateEntity(arcJudgeArchetype); //very stupid em.SetComponentData(en, new ChartTime(arc.timing + Constants.LostWindow)); em.SetSharedComponentData(en, new ArcColorID(arc.color)); em.SetComponentData(en, new ArcData(arc)); em.SetComponentData(en, new ArcGroupID(groupId)); em.SetComponentData(en, new DestroyOnTiming(arc.endTiming + Constants.HoldLostWindow)); em.SetComponentData(en, ChartIncrTime.FromBpm(arc.timing, arc.endTiming, startBpm, out int comboCount)); PlayManager.ScoreHandler.tracker.noteCount += comboCount; }
protected override void CreateHeadSegment(ArcRaw trace, int _) { Entity headEntity = em.Instantiate(headTraceNoteEntityPrefab); float floorpos = PlayManager.Conductor.GetFloorPositionFromTiming(trace.timing, trace.timingGroup); float x = Conversion.GetWorldX(trace.startX); float y = Conversion.GetWorldY(trace.startY); const float z = 0; int t1 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(floorpos + Constants.RenderFloorPositionRange, 0); int t2 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(floorpos - Constants.RenderFloorPositionRange, 0); int appearTime = (t1 < t2) ? t1 : t2; em.SetComponentData(headEntity, new FloorPosition(floorpos)); em.SetComponentData(headEntity, new Translation() { Value = new float3(x, y, z) }); em.SetComponentData(headEntity, new TimingGroup(trace.timingGroup)); em.SetComponentData(headEntity, new AppearTime(appearTime)); }
protected override void CreateHeightIndicator(ArcRaw arc) { Entity heightEntity = em.Instantiate(heightIndicatorEntityPrefab); RenderMesh renderMesh = PlayManager.ArcHeightRenderMeshes[arc.color]; em.SetSharedComponentData(heightEntity, renderMesh); float floorpos = PlayManager.Conductor.GetFloorPositionFromTiming(arc.timing, arc.timingGroup); float height = Conversion.GetWorldY(arc.startY) - 0.45f; float x = Conversion.GetWorldX(arc.startX); float y = height / 2; const float z = 0; const float scaleX = 2.34f; float scaleY = height; const float scaleZ = 1; int t1 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(floorpos + Constants.RenderFloorPositionRange, arc.timingGroup); int t2 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(floorpos - Constants.RenderFloorPositionRange, arc.timingGroup); int appearTime = (t1 < t2) ? t1 : t2; em.SetComponentData(heightEntity, new Translation() { Value = new float3(x, y, z) }); em.AddComponentData(heightEntity, new NonUniformScale() { Value = new float3(scaleX, scaleY, scaleZ) }); em.AddComponentData(heightEntity, new FloorPosition(floorpos)); em.SetComponentData(heightEntity, new TimingGroup(arc.timingGroup)); em.SetComponentData(heightEntity, new AppearTime(appearTime)); em.SetComponentData(heightEntity, new DestroyOnTiming(arc.timing)); }
protected override void CreateJudgeEntity(ArcRaw arc, int groupId, float startBpm) { }
protected override void CreateHeightIndicator(ArcRaw arc) { }
protected override void CreateSegment(ArcRaw arc, float3 start, float3 end, int timing, int endTiming, int groupId) { Entity arcInstEntity = em.Instantiate(arcNoteEntityPrefab); RenderMesh renderMesh = PlayManager.ArcInitialRenderMeshes[arc.color]; em.SetSharedComponentData <RenderMesh>(arcInstEntity, renderMesh); float dx = start.x - end.x; float dy = start.y - end.y; float dz = start.z - end.z; int t1 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(start.z + Constants.RenderFloorPositionRange, arc.timingGroup); int t2 = PlayManager.Conductor.GetFirstTimingFromFloorPosition(end.z - Constants.RenderFloorPositionRange, arc.timingGroup); int appearTime = (t1 < t2) ? t1 : t2; //Shear along xy + scale along z matrix LocalToWorld ltwArc = new LocalToWorld() { Value = new float4x4( 1, 0, dx, start.x, 0, 1, dy, start.y, 0, 0, dz, 0, 0, 0, 0, 1 ) }; em.SetComponentData(arcInstEntity, ltwArc); em.SetComponentData(arcInstEntity, new FloorPosition(start.z)); em.SetComponentData(arcInstEntity, new TimingGroup(arc.timingGroup)); em.SetComponentData(arcInstEntity, new BaseOffset(new float4(start.x, start.y, 0, 0))); em.SetComponentData(arcInstEntity, new BaseShear(new float4(dx, dy, dz, 0))); em.SetComponentData(arcInstEntity, new Cutoff(false)); em.SetComponentData(arcInstEntity, new AppearTime(appearTime)); em.SetComponentData(arcInstEntity, new DestroyOnTiming(endTiming + Constants.HoldLostWindow)); em.SetComponentData(arcInstEntity, new ArcGroupID(groupId)); em.SetComponentData(arcInstEntity, new ChartTime(timing)); em.SetComponentData(arcInstEntity, new ChartEndTime(endTiming)); if (timing < endTiming) { Entity arcShadowEntity = em.Instantiate(arcShadowEntityPrefab); em.SetSharedComponentData <RenderMesh>(arcShadowEntity, PlayManager.ArcShadowRenderMesh); LocalToWorld ltwShadow = new LocalToWorld() { Value = new float4x4( 1, 0, dx, start.x, 0, 1, 0, 0, 0, 0, dz, 0, 0, 0, 0, 1 ) }; em.SetComponentData(arcShadowEntity, ltwShadow); em.SetComponentData(arcShadowEntity, new FloorPosition(start.z)); em.SetComponentData(arcShadowEntity, new TimingGroup(arc.timingGroup)); em.SetComponentData(arcShadowEntity, new BaseOffset(new float4(start.x, 0, 0, 0))); em.SetComponentData(arcShadowEntity, new BaseShear(new float4(dx, 0, dz, 0))); em.SetComponentData(arcShadowEntity, new Cutoff(false)); em.SetComponentData(arcShadowEntity, new AppearTime(appearTime)); em.SetComponentData(arcShadowEntity, new DestroyOnTiming(endTiming + Constants.HoldLostWindow)); em.SetComponentData(arcShadowEntity, new ArcGroupID(groupId)); em.SetComponentData(arcShadowEntity, new ChartTime(timing)); } }
protected abstract void CreateJudgeEntity(ArcRaw arc, int groupId, float startBpm);
protected abstract void CreateHeadSegment(ArcRaw arc, int groupID);
protected abstract void CreateHeightIndicator(ArcRaw arc);
protected abstract void CreateSegment(ArcRaw arc, float3 start, float3 end, int timing, int endTiming, int groupId);