Add project files.

This commit is contained in:
2022-09-30 17:32:21 +08:00
parent df69e65c88
commit e8e36b83bd
561 changed files with 40626 additions and 0 deletions

View File

@@ -0,0 +1,172 @@
using Cryville.Common.Math;
using Cryville.Crtr.Event;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Cryville.Crtr {
class GroupHandler : ContainerHandler {
// private StampedState cs;
public ChartHandler ch;
// Chart.Group group;
// Dictionary<StampedEvent, GameObject> notePool = new Dictionary<StampedEvent, GameObject>();
SquareMatrix matFrame;
List<ContainerState> tracks;
public GroupHandler(Chart.Group tg, ChartHandler ch) : base() {
//group = tg;
this.ch = ch;
/*foreach (Chart.Track t in group.tracks) {
handlers.Add(new TrackHandler(t, this));
}*/
}
public override string TypeName {
get {
return "group";
}
}
public override void PreInit() {
base.PreInit();
tracks = (
from c in cs.Children
where c.Value.Container is Chart.Track
select c.Value
).ToList();
matFrame = SquareMatrix.WithPolynomialCoefficients(tracks.Count);
}
/*EventPrehandler ph;
List<StampedEvent> sevs = new List<StampedEvent>();
public void StartPrehandler(EventPrehandler parent) {
/*List<Chart.Event> appevs = new List<Chart.Event>();
foreach (Chart.Note ev in group.notes) {
if (ev.duration > 0) {
for (float b = 0f; b < ev.duration; b += ev.jdg_interval) {
appevs.Add(new Chart.InternalJudgement() { beat = ev.beat, BeatOffset = b, Parent = ev });
}
}
}
ph = new EventPrehandler(
parent.chart,
group.motions.Cast<Chart.Event>()
.Concat<Chart.Event>(group.notes.Cast<Chart.Event>()),
parent
);
foreach (TrackHandler h in handlers)
h.StartPrehandler(ph);
}
public void PrehandleToTime(float toTime) {
ph.ForwardToTime(toTime, ev => {
foreach (var h in handlers) h.PrehandleToTime(ph.Time);
/*
if (ev is Chart.Note) {
var tev = (Chart.Note)ev;
sevs.Add(new StampedEvent.Judge() {
Time = phs.Time - Main.judge * tev.tol,
EndTime = phs.Time + Main.judge * tev.tol,
Event = tev,
Type = tev.wipe ? JudgementType.Held : JudgementType.Attack,
JudgeArea = new Area() {
Point1 = phs.Point,
Point2 = phs.Point + new Chart.Point(0f, 0.1f, 0f, 0.1f).ToRelative(Main.hitRect),
Type = AreaType.Circle
}
});
}
else if (ev is Chart.InternalJudgement) {
var tev = (Chart.InternalJudgement)ev;
sevs.Add(new StampedEvent.Judge() {
Time = phs.Time - Main.judge * tev.Parent.tol,
EndTime = phs.Time + Main.judge * tev.Parent.tol,
Event = tev,
Type = JudgementType.Held,
JudgeArea = new Area() {
Point1 = phs.Point,
Point2 = phs.Point + new Chart.Point(0f, 0.1f, 0f, 0.1f).ToRelative(Main.hitRect),
Type = AreaType.Circle
}
});
}
});
}
public void EndPrehandler(StampedState parent) {
sevs = ph.Result;
cs = new StampedState(ch.chart, sevs, parent);
foreach (var h in handlers) h.EndPrehandler(cs);
}*/
/*List<StampedEvent.Judge> judgements = new List<StampedEvent.Judge>();
public void SendInput(int id, TouchPhase phase, Vector2 jpos) {
for (int i = judgements.Count - 1; i >= 0; i--) {
if (judgements[i].JudgeArea.Contains(jpos)) {
if (phase == TouchPhase.Began && judgements[i].Type == JudgementType.Attack) {
ch.ReportJudge(true);
judgements.RemoveAt(i);
}
else if ((phase == TouchPhase.Stationary || phase == TouchPhase.Moved) && judgements[i].Type == JudgementType.Held) {
ch.ReportJudge(true);
judgements.RemoveAt(i);
}
}
}
}*/
/*Vector3 cpoint;
Vector3 cpoint2;
Vector3 prevp = Vector3.zero;
Vector3 prevwp = Vector3.zero;
Vector3 prevp2 = Vector3.zero;
Vector3 prevwp2 = Vector3.zero;*/
public override void Update(ContainerState s, StampedEvent ev) {
base.Update(s, ev);
/*cs.ForwardToTime(toTime);
foreach (var handler in handlers) handler.Update(cs.Time);*/
//cs.ForwardToTime(toTime);
/*ss.ForwardToTime(toTime, ev => {
if (ev is StampedEvent.Judge) {
var tev = (StampedEvent.Judge)ev;
judgements.Add(tev);
}
});
for (int i = judgements.Count - 1; i >= 0; i--) {
if (judgements[i].EndTime < cs.Time) {
ch.ReportJudge(false);
judgements.RemoveAt(i);
}
}*/
// gogroup.rotation = Quaternion.Euler(cs.Direction);
}
public override void EndUpdate(ContainerState s) {
base.EndUpdate(s);
}
public ColumnVector<Vector3> GetCurrentFrame(Func<ContainerState, Vector3> func) {
var vl = from t in tracks select func(t);
return matFrame.Eliminate(
new ColumnVector<Vector3>(vl.ToArray()),
new Vector3Operator()
);
}
}
class Vector3Operator : IVectorOperator<Vector3> {
public Vector3 Add(Vector3 lhs, Vector3 rhs) {
return lhs + rhs;
}
public Vector3 ScalarMultiply(float lhs, Vector3 rhs) {
return lhs * rhs;
}
}
}