From 4cd90eaede1de57f921aac794671a8f9e679f878 Mon Sep 17 00:00:00 2001 From: SoulliesOfficial <77235731+SoulliesOfficial@users.noreply.github.com> Date: Thu, 6 Feb 2025 23:01:44 -0500 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E5=86=85=E5=AE=B9-9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为次级模块增加存档类,仍在思考框架中 --- .DS_Store | Bin 14340 -> 18436 bytes Assets/.DS_Store | Bin 14340 -> 12292 bytes Assets/Prefabs/.DS_Store | Bin 0 -> 6148 bytes Assets/Scripts/.DS_Store | Bin 6148 -> 8196 bytes .../Base/GeneralSubmodules/ColorSubmodule.cs | 44 +++++++ .../Base/GeneralSubmodules/EffectSubmodule.cs | 39 +++++++ .../Base/GeneralSubmodules/SubmoduleBase.cs | 51 +++++++- .../TimeDurationSubmodule.cs | 41 ++++++- .../GeneralSubmodules/TransformSubmodule.cs | 45 ++++++- .../JudgeSubmodules/NoteJudgeSubmodule.cs | 37 ++++++ .../TrackSubmodules/TrackPathSubmodule.cs | 45 +++++++ .../TrackSubmodules/TrackRendererSubmodule.cs | 43 ++++++- .../TrackSubmodules/TrackTimeSubmodule.cs | 110 ++++++++++++++++-- Assets/StreamingAssets/.DS_Store | Bin 6148 -> 6148 bytes 14 files changed, 436 insertions(+), 19 deletions(-) create mode 100644 Assets/Prefabs/.DS_Store diff --git a/.DS_Store b/.DS_Store index 0ebab392e1b099e07ac75487fcdc4ac1e1841376..681b92dc284f83621ce9080421587a6c6c23d608 100644 GIT binary patch literal 18436 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 diff --git a/Assets/.DS_Store b/Assets/.DS_Store index 1dc2194e84eb0cf903a22f3d827d477bab1d2aab..a5894ecdfd5bc0cb71dcc86c0414454e61629d6e 100644 GIT binary patch delta 1371 zcmb7EQAkr^6h8OfIcHls=iM}!^Xl4+n6}mCNU5C7A|VjgLl8)tGnMYz*tCa27a@g7 zG&vPS`6N1e2$I`N4}la2^`s9yMh`s{B-UF=tU7nOb~iSojr-rT`+w)$^L^jHGaZ{g zF8~13I}vsP?4wXamweajXt@a>Xy=3j#t8l3=pn!mT!bKuz%V4{)~)Dtt11}UR3U3S zia+h0%j;aFRH;#Em>#LeHqWvf5Al7QrK4%<^X$p=s*kXhFaU8XaDfViAQ6d%{UI?L zq8&{RHJ57USSLt2{VtYW>c$3xS)Ey3czz>|T?R`o95e{b3MLKTjBc;TAsjsHnsf+P zT~2SOL-2S#c)QJmD|L+=`=TA+)mhY^E@x&QEF!}T`H;tMem7f{!hZgVI(Fjmpg)Zn zzBL!xjB);y7#-SfkOW}gl3r6dX`I&vV3a6?iAo$(_C_anT;BSX{SX^~8VJC6mTM3q zFb0=MI3FbFJ50|L=rYwM{{t_MxB^4bNGw~MeRKEUZ-_+wf3*#~`tkbFV%7mgU&&I9 zDJ?0TRw^qts%TF|QUUNg3jiH}_v}V|s#me3X`gAYt`%VMyZu_( z<8>%mfGzL`G#`uKt8^oM<=n0LKW-G%P)c78lNZ_~i!8{CR!IKm$=StTz?C){C@ zRdAY4>^O-QCozH`LZV2FEoBnbEs;@3v*v4Ql#=X+RD;(?fBtYeXnq3Zprw&{=Clt^ zd8sa@ME+aoG)bwJXN-Dk{?=$$4_n0ZSLM}k_PD@Lla^@|sf8nsk f-Od2|+|4?gaPnLPx;s&HBZgY{k!3@bjb$LKsoSX0Bl9ZF51Qh284au+&TQb>QRE`bG%obH( zTrjyu^!sENA+O12#iW=SXFE?85Eq&JPmGH#wQlaYfW?#f#1&vn6LCc*_JGOZ;%hlR zpZ>m*Wyvwe$rFI86(o2#xK{sbvR?=l@Q{d^d`Y5t^J6Ik#?8Glb}TAZp|X-ugFU>g1*9J6GFApZhEfK1pnFSl^HbpNg{atUsWy#q;sm?RJOXo>n6e*D zz9=LzdA|@B+ZXA`MBycq&kHGVK$yoIH|NRDWdd4d&nn3ZG#3aAxPgQ#a?k@q?mhEl kejQzK5FeOqt0T|D1c@UHkdDb2I+K~11Q@Vb$quy#0HW)DPyhe` diff --git a/Assets/Prefabs/.DS_Store b/Assets/Prefabs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..406d18b3734fd7bc193becee2363dbbcc4667259 GIT binary patch literal 6148 zcmeHKy-veG4EB`{K_FC#h4Dt#N<2WQ67c|?*h+tZAt4n%D~iOx%F2$!#=^wPz{@c5 z0(?GOB~c*2QXynlzVG6*6W@1HToaKSTul2!JtB&rjGa{sp9rtBHl(8#UUcCeDP=UH z9D365Hp5?JfX{B7_UIs-TJ`+S=`1_y4<|)Fm&6}l+kEpPNyb?*hEMdk{q}ry|FYZe zKmC>e{J4^fyWx~JkT<_+Gde~78KrcH-;5^I$bIMbJO66_``1sGn|C4q)@S6!#~ywf zQ`-lPcpoOlfH7bUESmw;Y?f$E&_-jx7%&DF4Dk2CLm6YmQZRfvFoYHW*o8R==G;qg zj8}{mOF^taoP+`;)M<<1Bpi0Hez9UHDBcF+Gq?I19b*g z? zPj+CDn5@F$#MFEN%xqxc;n0`u>7Ba#m?KzV4GRw&L}2nh7Ik*U0-%8m{F4P(L^iQn zFgh|ywgUMq3{DJ*48;tox%nPZ5@!Tq^9!%+Nb) z@W`R1vk!zu9>>1et-h0)YTG hkZ=Wgdt>2u=E?jro}fTrV1fh)D2y03$Mei#1^|$)NsRyi diff --git a/Assets/Scripts/Base/GeneralSubmodules/ColorSubmodule.cs b/Assets/Scripts/Base/GeneralSubmodules/ColorSubmodule.cs index b92de51a..fc0ec107 100644 --- a/Assets/Scripts/Base/GeneralSubmodules/ColorSubmodule.cs +++ b/Assets/Scripts/Base/GeneralSubmodules/ColorSubmodule.cs @@ -67,5 +67,49 @@ namespace Ichni.RhythmGame this.baseColorDirtyMark = false; this.emissionColorDirtyMark = false; } + + public override void SaveBM() + { + matchedBM = new Beatmap.ColorSubmodule_BM(attachedElement, originalBaseColor, emissionEnabled, + originalEmissionColor, originalEmissionIntensity); + } + } + + namespace Beatmap + { + public class ColorSubmodule_BM : Submodule_BM + { + public Color originalBaseColor; + public bool emissionEnabled; + public Color originalEmissionColor; + public float originalEmissionIntensity; + + public ColorSubmodule_BM() + { + + } + + public ColorSubmodule_BM(BaseElement attachedElement, Color originalBaseColor, bool emissionEnabled, + Color originalEmissionColor, float originalEmissionIntensity) : base(attachedElement) + { + this.originalBaseColor = originalBaseColor; + this.emissionEnabled = emissionEnabled; + this.originalEmissionColor = originalEmissionColor; + this.originalEmissionIntensity = originalEmissionIntensity; + } + + public override void ExecuteBM() + { + attachedElement = GetElement(attachedElementGuid); + attachedElement.colorSubmodule = new ColorSubmodule(attachedElement, originalBaseColor, emissionEnabled, + originalEmissionColor, originalEmissionIntensity); + } + + public override void DuplicateBM(BaseElement attached) + { + attached.colorSubmodule = new ColorSubmodule(attached, originalBaseColor, emissionEnabled, + originalEmissionColor, originalEmissionIntensity); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Base/GeneralSubmodules/EffectSubmodule.cs b/Assets/Scripts/Base/GeneralSubmodules/EffectSubmodule.cs index 1ee96325..63cdd663 100644 --- a/Assets/Scripts/Base/GeneralSubmodules/EffectSubmodule.cs +++ b/Assets/Scripts/Base/GeneralSubmodules/EffectSubmodule.cs @@ -12,6 +12,45 @@ namespace Ichni.RhythmGame { effectList = new List(); } + + public override void SaveBM() + { + matchedBM = new Beatmap.EffectSubmodule_BM(attachedElement); + } + } + + public interface IHaveEffect + { + public EffectSubmodule effectSubmodule { get; set; } + } + + namespace Beatmap + { + public class EffectSubmodule_BM : Submodule_BM + { + public List effectList; + + public EffectSubmodule_BM() + { + + } + + public EffectSubmodule_BM(BaseElement attachedElement) : base(attachedElement) + { + effectList = new List(); + } + + public override void ExecuteBM() + { + attachedElement = GetElement(attachedElementGuid); + (attachedElement as IHaveEffect).effectSubmodule = new EffectSubmodule(attachedElement); + } + + public override void DuplicateBM(BaseElement attached) + { + (attached as IHaveEffect).effectSubmodule = new EffectSubmodule(attached); + } + } } public abstract class EffectBase diff --git a/Assets/Scripts/Base/GeneralSubmodules/SubmoduleBase.cs b/Assets/Scripts/Base/GeneralSubmodules/SubmoduleBase.cs index 8bf8042c..f051ed34 100644 --- a/Assets/Scripts/Base/GeneralSubmodules/SubmoduleBase.cs +++ b/Assets/Scripts/Base/GeneralSubmodules/SubmoduleBase.cs @@ -1,5 +1,7 @@ +using System; using System.Collections; using System.Collections.Generic; +using Ichni.RhythmGame.Beatmap; using UnityEngine; namespace Ichni.RhythmGame @@ -7,15 +9,58 @@ namespace Ichni.RhythmGame public abstract class SubmoduleBase { public BaseElement attachedElement; - + + public Submodule_BM matchedBM; + public SubmoduleBase(BaseElement attachedElement) { this.attachedElement = attachedElement; } - + public virtual void InitialRefresh() { - + + } + + public abstract void SaveBM(); + } + + namespace Beatmap + { + public abstract class Submodule_BM + { + [System.NonSerialized] public BaseElement attachedElement; //存档类对应的游戏物体 + public Guid attachedElementGuid; + + public Submodule_BM() + { + + } + + public Submodule_BM(BaseElement attachedElement) + { + this.attachedElement = attachedElement; + attachedElementGuid = attachedElement.elementGuid; + } + + public static BaseElement_BM GetElementBM(Guid id) + { + if (BaseElement_BM.identifier.TryGetValue(id, out BaseElement_BM element_BM)) + { + return element_BM; + } + + Debug.LogAssertion("Element not found or do not have id"); + return null; + } + + public static BaseElement GetElement(Guid id) + { + return GetElementBM(id)?.matchedElement; + } + + public abstract void ExecuteBM(); + public abstract void DuplicateBM(BaseElement attached); } } } \ No newline at end of file diff --git a/Assets/Scripts/Base/GeneralSubmodules/TimeDurationSubmodule.cs b/Assets/Scripts/Base/GeneralSubmodules/TimeDurationSubmodule.cs index 7864f3e6..a8bfb58f 100644 --- a/Assets/Scripts/Base/GeneralSubmodules/TimeDurationSubmodule.cs +++ b/Assets/Scripts/Base/GeneralSubmodules/TimeDurationSubmodule.cs @@ -18,9 +18,9 @@ namespace Ichni.RhythmGame endTime = 999;//TODO: 换为songLength } - public TimeDurationSubmodule(BaseElement attachedElement, float startTime, float endTime) : base(attachedElement) + public TimeDurationSubmodule(BaseElement attachedElement, bool isOverridingDuration, float startTime, float endTime) : base(attachedElement) { - this.isOverridingDuration = false; + this.isOverridingDuration = isOverridingDuration; this.startTime = startTime; this.endTime = endTime; } @@ -73,5 +73,42 @@ namespace Ichni.RhythmGame startTime = durations.Min(duration => duration.x); endTime = durations.Max(duration => duration.y); } + + public override void SaveBM() + { + matchedBM = new Beatmap.TimeDurationSubmodule_BM(attachedElement, this); + } + } + + namespace Beatmap + { + public class TimeDurationSubmodule_BM : Submodule_BM + { + public bool isOverridingDuration; + public float startTime, endTime; + + public TimeDurationSubmodule_BM() + { + + } + + public TimeDurationSubmodule_BM(BaseElement attachedElement, TimeDurationSubmodule timeDurationSubmodule) : base(attachedElement) + { + isOverridingDuration = timeDurationSubmodule.isOverridingDuration; + startTime = timeDurationSubmodule.startTime; + endTime = timeDurationSubmodule.endTime; + } + + public override void ExecuteBM() + { + attachedElement = GetElement(attachedElementGuid); + attachedElement.timeDurationSubmodule = new TimeDurationSubmodule(attachedElement, isOverridingDuration, startTime, endTime); + } + + public override void DuplicateBM(BaseElement attached) + { + attached.timeDurationSubmodule = new TimeDurationSubmodule(attached, isOverridingDuration, startTime, endTime); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Base/GeneralSubmodules/TransformSubmodule.cs b/Assets/Scripts/Base/GeneralSubmodules/TransformSubmodule.cs index c1aac24a..74aa4e57 100644 --- a/Assets/Scripts/Base/GeneralSubmodules/TransformSubmodule.cs +++ b/Assets/Scripts/Base/GeneralSubmodules/TransformSubmodule.cs @@ -28,10 +28,7 @@ namespace Ichni.RhythmGame public bool scaleDirtyMark; public bool eulerAnglesOffsetLock; - - public UnityAction OnPositionChanged; - public UnityAction OnEulerAnglesChanged; - public UnityAction OnScaleChanged; + public TransformSubmodule(BaseElement attachedElement) : base(attachedElement) { @@ -79,5 +76,45 @@ namespace Ichni.RhythmGame attachedElement.SetTransformObserver(); } + + public override void SaveBM() + { + matchedBM = new Beatmap.TransformSubmodule_BM(attachedElement, originalPosition, originalEulerAngles, originalScale); + } + } + + namespace Beatmap + { + public class TransformSubmodule_BM : Submodule_BM + { + public Vector3 originalPosition; + public Vector3 originalEulerAngles; + public Vector3 originalScale; + + public TransformSubmodule_BM() + { + + } + + public TransformSubmodule_BM(BaseElement attachedElement, Vector3 originalPosition, + Vector3 originalEulerAngles, Vector3 originalScale) : + base(attachedElement) + { + this.originalPosition = originalPosition; + this.originalEulerAngles = originalEulerAngles; + this.originalScale = originalScale; + } + + public override void ExecuteBM() + { + attachedElement = GetElement(attachedElementGuid); + attachedElement.transformSubmodule = new TransformSubmodule(attachedElement, originalPosition, originalEulerAngles, originalScale); + } + + public override void DuplicateBM(BaseElement attached) + { + attached.transformSubmodule = new TransformSubmodule(attached, originalPosition, originalEulerAngles, originalScale); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/GameElements/Notes/JudgeSubmodules/NoteJudgeSubmodule.cs b/Assets/Scripts/GameElements/Notes/JudgeSubmodules/NoteJudgeSubmodule.cs index 581ba12b..b53e8a7d 100644 --- a/Assets/Scripts/GameElements/Notes/JudgeSubmodules/NoteJudgeSubmodule.cs +++ b/Assets/Scripts/GameElements/Notes/JudgeSubmodules/NoteJudgeSubmodule.cs @@ -6,10 +6,47 @@ namespace Ichni.RhythmGame { public class NoteJudgeSubmodule : SubmoduleBase { + public List judgeUnitList; + public NoteJudgeSubmodule(BaseElement attachedElement) : base(attachedElement) { } + + public override void SaveBM() + { + matchedBM = new Beatmap.NoteJudgeSubmodule_BM(attachedElement); + } + } + + namespace Beatmap + { + public class NoteJudgeSubmodule_BM : Submodule_BM + { + public List judgeUnitList; + + public NoteJudgeSubmodule_BM() + { + + } + + public NoteJudgeSubmodule_BM(BaseElement attachedElement) : base(attachedElement) + { + judgeUnitList = new List(); + } + + public override void ExecuteBM() + { + attachedElement = GetElement(attachedElementGuid); + //(attachedElement as NoteElement).noteJudgeSubmodule = new NoteJudgeSubmodule(attachedElement); + } + + public override void DuplicateBM(BaseElement attached) + { + //(attached as NoteElement).noteJudgeSubmodule = new NoteJudgeSubmodule(attached); + } + } + } public class NoteJudgeUnit diff --git a/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackPathSubmodule.cs b/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackPathSubmodule.cs index 34edf9e7..99105895 100644 --- a/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackPathSubmodule.cs +++ b/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackPathSubmodule.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Generic; using Dreamteck.Splines; +using Ichni.RhythmGame.Beatmap; using Unity.VisualScripting; using UnityEngine; @@ -63,4 +64,48 @@ namespace Ichni.RhythmGame path.SetPoint(point.index, point.node, SplineComputer.Space.Local); } } + + public partial class TrackPathSubmodule + { + override public void SaveBM() + { + matchedBM = new TrackPathSubmodule_BM(attachedElement, this); + } + } + + namespace Beatmap + { + public class TrackPathSubmodule_BM : Submodule_BM + { + public Track.TrackSpaceType trackSpaceType; + public Track.TrackSamplingType trackSamplingType; + public bool isClosed; + + public TrackPathSubmodule_BM() + { + + } + + + public TrackPathSubmodule_BM(BaseElement attachedElement, TrackPathSubmodule trackPathSubmodule) : base( + attachedElement) + { + this.trackSpaceType = trackPathSubmodule.trackSpaceType; + this.trackSamplingType = trackPathSubmodule.trackSamplingType; + this.isClosed = trackPathSubmodule.isClosed; + } + + public override void ExecuteBM() + { + attachedElement = GetElement(attachedElementGuid); + (attachedElement as Track).trackPathSubmodule = new TrackPathSubmodule(attachedElement as Track, trackSpaceType, trackSamplingType, isClosed); + } + + public override void DuplicateBM(BaseElement attached) + { + (attached as Track).trackPathSubmodule = new TrackPathSubmodule(attached as Track, trackSpaceType, trackSamplingType, isClosed); + } + } + + } } \ No newline at end of file diff --git a/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackRendererSubmodule.cs b/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackRendererSubmodule.cs index afe4ec7a..1e4431fd 100644 --- a/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackRendererSubmodule.cs +++ b/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackRendererSubmodule.cs @@ -11,12 +11,17 @@ namespace Ichni.RhythmGame public MeshGenerator meshGenerator; public MeshRenderer meshRenderer; public Material renderMaterial; - + public TrackRendererSubmodule(Track track) : base(track) { this.track = track; this.track.trackRendererSubmodule = this; } + + public override void SaveBM() + { + throw new System.NotImplementedException(); + } } public class TrackRendererSubmoduleAutoOrient : TrackRendererSubmodule @@ -44,5 +49,41 @@ namespace Ichni.RhythmGame splineRenderer.clipTo = 0; } } + + public override void SaveBM() + { + matchedBM = new Beatmap.TrackRendererSubmoduleAutoOrient_BM(attachedElement, this); + } + } + + namespace Beatmap + { + public class TrackRendererSubmoduleAutoOrient_BM : Submodule_BM + { + public string renderMaterialName; + + public TrackRendererSubmoduleAutoOrient_BM() + { + + } + + public TrackRendererSubmoduleAutoOrient_BM(BaseElement attachedElement, + TrackRendererSubmodule trackRendererSubmodule) : base(attachedElement) + { + renderMaterialName = trackRendererSubmodule.renderMaterial.name; + } + + public override void ExecuteBM() + { + attachedElement = GetElement(attachedElementGuid); + (attachedElement as Track).trackRendererSubmodule = + new TrackRendererSubmodule(attachedElement as Track); + } + + public override void DuplicateBM(BaseElement attached) + { + (attached as Track).trackRendererSubmodule = new TrackRendererSubmodule(attached as Track); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackTimeSubmodule.cs b/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackTimeSubmodule.cs index bb9efbb1..81a0786b 100644 --- a/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackTimeSubmodule.cs +++ b/Assets/Scripts/GameElements/Track/TrackSubmodules/TrackTimeSubmodule.cs @@ -7,14 +7,21 @@ namespace Ichni.RhythmGame public class TrackTimeSubmodule : TrackSubmodule { public float headPercent, tailPercent; - + public TrackTimeSubmodule(Track track) : base(track) { this.track = track; this.track.trackTimeSubmodule = this; } + + public override void SaveBM() + { + throw new System.NotImplementedException(); + } } - + + #region Movable + public class TrackTimeSubmoduleMovable : TrackTimeSubmodule { public float trackStartTime; @@ -40,40 +47,125 @@ namespace Ichni.RhythmGame public void UpdateTrackPart() { float songTime = EditorManager.instance.songModule.songTime; - + headPercent = GetTrackPercent(songTime); tailPercent = GetTrackPercent(songTime - visibleTrackTimeLength); - + if (track.trackRendererSubmodule != null) { track.trackRendererSubmodule.meshGenerator.clipFrom = tailPercent; track.trackRendererSubmodule.meshGenerator.clipTo = headPercent; } } - + public float GetTrackPercent(float songTimeInTime) { - float per = AnimationCurveEvaluator.Evaluate(animationCurveType, (songTimeInTime - trackStartTime) / trackTotalTime); + float per = AnimationCurveEvaluator.Evaluate(animationCurveType, + (songTimeInTime - trackStartTime) / trackTotalTime); return Mathf.Clamp01(per); } + + public override void SaveBM() + { + matchedBM = new Beatmap.TrackTimeSubmoduleMovable_BM(attachedElement, this); + } } - + + namespace Beatmap + { + public class TrackTimeSubmoduleMovable_BM : Submodule_BM + { + public float trackStartTime; + public float trackEndTime; + public float visibleTrackTimeLength; + public AnimationCurveType animationCurveType; + + public TrackTimeSubmoduleMovable_BM() + { + + } + + public TrackTimeSubmoduleMovable_BM(BaseElement attachedElement, TrackTimeSubmoduleMovable trackTimeSubmoduleMovable) : base(attachedElement) + { + trackStartTime = trackTimeSubmoduleMovable.trackStartTime; + trackEndTime = trackTimeSubmoduleMovable.trackEndTime; + visibleTrackTimeLength = trackTimeSubmoduleMovable.visibleTrackTimeLength; + animationCurveType = trackTimeSubmoduleMovable.animationCurveType; + } + + public override void ExecuteBM() + { + attachedElement = GetElement(attachedElementGuid); + Track track = attachedElement as Track; + track.trackTimeSubmodule = new TrackTimeSubmoduleMovable(track, trackStartTime, trackEndTime, visibleTrackTimeLength, animationCurveType); + } + + public override void DuplicateBM(BaseElement attached) + { + Track track = attached as Track; + track.trackTimeSubmodule = new TrackTimeSubmoduleMovable(track, trackStartTime, trackEndTime, visibleTrackTimeLength, animationCurveType); + } + } + } + + #endregion + + #region Static public class TrackTimeSubmoduleStatic : TrackTimeSubmodule { public float trackTotalTime; public AnimationCurveType animationCurveType; - public TrackTimeSubmoduleStatic(Track track, float trackTotalTime, AnimationCurveType animationCurveType) : base(track) + public TrackTimeSubmoduleStatic(Track track, float trackTotalTime, AnimationCurveType animationCurveType) : + base(track) { this.trackTotalTime = trackTotalTime; this.animationCurveType = animationCurveType; this.headPercent = 0; this.tailPercent = 1; - + track.timeDurationSubmodule.startTime = -999; track.timeDurationSubmodule.endTime = 999; //timeDurationSubmodule 根据下辖Note的时间来设置 } + + public override void SaveBM() + { + matchedBM = new Beatmap.TrackTimeSubmoduleStatic_BM(attachedElement, this); + } } + namespace Beatmap + { + public class TrackTimeSubmoduleStatic_BM : Submodule_BM + { + public float trackTotalTime; + public AnimationCurveType animationCurveType; + + public TrackTimeSubmoduleStatic_BM() + { + + } + + public TrackTimeSubmoduleStatic_BM(BaseElement attachedElement, TrackTimeSubmoduleStatic trackTimeSubmoduleStatic) : base(attachedElement) + { + trackTotalTime = trackTimeSubmoduleStatic.trackTotalTime; + animationCurveType = trackTimeSubmoduleStatic.animationCurveType; + } + + public override void ExecuteBM() + { + attachedElement = GetElement(attachedElementGuid); + Track track = attachedElement as Track; + track.trackTimeSubmodule = new TrackTimeSubmoduleStatic(track, trackTotalTime, animationCurveType); + } + + public override void DuplicateBM(BaseElement attached) + { + Track track = attached as Track; + track.trackTimeSubmodule = new TrackTimeSubmoduleStatic(track, trackTotalTime, animationCurveType); + } + } + } + #endregion } \ No newline at end of file diff --git a/Assets/StreamingAssets/.DS_Store b/Assets/StreamingAssets/.DS_Store index a9d8656d5a2d5a43686d8de5c7fcfe4fe5a3e8af..9a6292d986d181baf227098bd16607b7e7160ac8 100644 GIT binary patch delta 39 rcmZoMXffE}$I7(v$>ac54VDXzxz{GwuDHH84|Vhk(*