【修复】叽里咕噜说啥呢听不懂

Signed-off-by: TRAfoer <lhf190@outlook.com>
This commit is contained in:
2025-08-14 21:27:15 +08:00
parent dc530472ba
commit a0b3dfe557
21 changed files with 221801 additions and 16196 deletions

7
Assets/Assets.sln.meta Normal file
View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 459a7ea4ef65c664482b6377848ac5c3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6dbdd314784e80440b48088e6357c1ef
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,4 @@
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -103,8 +104,9 @@ namespace Ichni.RhythmGame
var effectNameInputField = inspector.GenerateInputField(subcontainer, "Effect Name"); var effectNameInputField = inspector.GenerateInputField(subcontainer, "Effect Name");
var addEffectButton = inspector.GenerateButton(this, subcontainer, "Add Effect", () => var addEffectButton = inspector.GenerateButton(this, subcontainer, "Add Effect", () =>
{ {
if (EffectCollection.TryGetValue(effectNameInputField.GetValue<string>(), out EffectBase newEffect)) if (EffectCollection.TryGetValue(effectNameInputField.GetValue<string>(), out var factory))
{ {
EffectBase newEffect = factory.Invoke(); // 创建新实例
newEffect.attachedGameElement = attachedGameElement; newEffect.attachedGameElement = attachedGameElement;
effectCollection[effect.Key].Add(newEffect); effectCollection[effect.Key].Add(newEffect);
newEffect.AccommodatingList = effectCollection[effect.Key]; newEffect.AccommodatingList = effectCollection[effect.Key];
@@ -132,23 +134,23 @@ namespace Ichni.RhythmGame
Note, Note,
} }
private static Dictionary<string, EffectBase> EffectCollection { get; } = private static Dictionary<string, Func<EffectBase>> EffectCollection { get; } =
new Dictionary<string, EffectBase>() new Dictionary<string, Func<EffectBase>>()
{ {
{ "Bloom", new BloomEffect(1, 2, CustomCurvePresets.Parabolic(1, 0, 1)) }, { "Bloom", ()=>new BloomEffect(1, 2, CustomCurvePresets.Parabolic(1, 0, 1)) },
{ "CameraShake", new CameraShakeEffect(1, 50, 1, 1, 1) }, { "CameraShake",()=> new CameraShakeEffect(1, 50, 1, 1, 1) },
{ "CameraOffset", new CameraOffsetEffect(0.2f, Vector3.forward, CustomCurvePresets.CustomPeakTimeParabolic(1, 0, 1, 0.3f)) }, { "CameraOffset", ()=>new CameraOffsetEffect(0.2f, Vector3.forward, CustomCurvePresets.CustomPeakTimeParabolic(1, 0, 1, 0.3f)) },
{ "CameraZoom", new CameraZoomEffect(0.2f, 5f,CustomCurvePresets.Parabolic(1,0,1))}, { "CameraZoom",()=> new CameraZoomEffect(0.2f, 5f,CustomCurvePresets.Parabolic(1,0,1))},
{ "CameraTilt", new CameraTiltEffect(0.2f, new Vector3(0, 0, 5), CustomCurvePresets.CustomPeakTimeParabolic(1, 0, 1, 0.3f)) }, { "CameraTilt", ()=>new CameraTiltEffect(0.2f, new Vector3(0, 0, 5), CustomCurvePresets.CustomPeakTimeParabolic(1, 0, 1, 0.3f)) },
{ "ChromaticAberration", new ChromaticAberrationEffect(1, 1, CustomCurvePresets.Parabolic(1, 0, 1)) }, { "ChromaticAberration", ()=>new ChromaticAberrationEffect(1, 1, CustomCurvePresets.Parabolic(1, 0, 1)) },
{ "RadialBlur", new RadialBlurEffect(1,4,0.5f,0.5f, 1, CustomCurvePresets.Parabolic(1,0,1))}, { "RadialBlur",()=> new RadialBlurEffect(1,4,0.5f,0.5f, 1, CustomCurvePresets.Parabolic(1,0,1))},
{ "Vignette", new VignetteEffect(1, 1, 0.4f, Color.black, CustomCurvePresets.Parabolic(1, 0, 1)) }, { "Vignette", ()=>new VignetteEffect(1, 1, 0.4f, Color.black, CustomCurvePresets.Parabolic(1, 0, 1)) },
{ "SetInteger", new SetIntegerEffect("New Variable", 0, false, 0, 1) }, { "SetInteger",()=> new SetIntegerEffect("New Variable", 0, false, 0, 1) },
{ "EnableControl", new EnableControlEffect(null, "New Variable", 0, false, "") }, { "EnableControl",()=> new EnableControlEffect(null, "New Variable", 0, false, "") },
{ "Pixelate", new PixelateEffect(1, 320, 180, CustomCurvePresets.Instant())}, { "Pixelate", ()=>new PixelateEffect(1, 320, 180, CustomCurvePresets.Instant())},
{ "LowPassFilter", new LowPassFilterEffect(1, 10, CustomCurvePresets.Parabolic(1, 0, 1)) }, { "LowPassFilter", ()=>new LowPassFilterEffect(1, 10, CustomCurvePresets.Parabolic(1, 0, 1)) },
{ "HighPassFilter", new HighPassFilterEffect(1, 22000, CustomCurvePresets.Parabolic(1, 0, 1)) }, { "HighPassFilter",()=> new HighPassFilterEffect(1, 22000, CustomCurvePresets.Parabolic(1, 0, 1)) },
{ "DTM_RippleEffect", new DTMRippleEffect(0.65f, Color.white, 0) } { "DTM_RippleEffect",()=> new DTMRippleEffect(0.65f, Color.white, 0) }
}; };
} }

View File

@@ -42,7 +42,7 @@ namespace Ichni.RhythmGame
point.isBeyond1 = trackPercent.animations.Any(animation => animation.endValue > 1); //判断是否有超过1的动画超过1将会循环 point.isBeyond1 = trackPercent.animations.Any(animation => animation.endValue > 1); //判断是否有超过1的动画超过1将会循环
//添加默认动画 //添加默认动画
if (point.parentElement is Track track1 && track1.submoduleList.Where(submodule => submodule is TrackTimeSubmoduleMovable).Count() == 1) if (isFirstGenerated && point.parentElement is Track track1 && track1.submoduleList.Where(submodule => submodule is TrackTimeSubmoduleMovable).Count() == 1)
{ {
TrackTimeSubmoduleMovable trackTimeSubmoduleMovable = track1.submoduleList.Where(submodule => submodule is TrackTimeSubmoduleMovable).FirstOrDefault() as TrackTimeSubmoduleMovable; TrackTimeSubmoduleMovable trackTimeSubmoduleMovable = track1.submoduleList.Where(submodule => submodule is TrackTimeSubmoduleMovable).FirstOrDefault() as TrackTimeSubmoduleMovable;
point.trackPercent.Add( point.trackPercent.Add(

View File

@@ -2,6 +2,7 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using DG.Tweening.Core.Easing;
using Ichni; using Ichni;
using Ichni.Editor; using Ichni.Editor;
using Ichni.RhythmGame; using Ichni.RhythmGame;
@@ -309,4 +310,24 @@ public class FlexibleFloatTab : MonoBehaviour
FatherWindow.ConnectedPoint.Refresh(true); FatherWindow.ConnectedPoint.Refresh(true);
EventPoint.Locked = false; EventPoint.Locked = false;
} }
public void CutEvent()
{
EventPoint eventPoint = FatherWindow.ConnectedPoint;
if (eventPoint == null) return;
for (int i = 0; i < BeatNextDeviver; i++)
{
float segmentStartTime = eventPoint.animatedFloat.startTime + (eventPoint.animatedFloat.endTime - eventPoint.animatedFloat.startTime) / BeatNextDeviver * i;
float segmentEndTime = eventPoint.animatedFloat.startTime + (eventPoint.animatedFloat.endTime - eventPoint.animatedFloat.startTime) / BeatNextDeviver * (i + 1);
connectFloat.Add(new AnimatedFloat(
segmentStartTime,
segmentEndTime,
AnimationCurveEvaluator.Evaluate(eventPoint.animatedFloat.animationCurveType, (segmentStartTime - eventPoint.animatedFloat.startTime) / (eventPoint.animatedFloat.endTime - eventPoint.animatedFloat.startTime)) * (eventPoint.animatedFloat.endValue - eventPoint.animatedFloat.startValue) + eventPoint.animatedFloat.startValue,
AnimationCurveEvaluator.Evaluate(eventPoint.animatedFloat.animationCurveType, (segmentEndTime - eventPoint.animatedFloat.startTime) / (eventPoint.animatedFloat.endTime - eventPoint.animatedFloat.startTime)) * (eventPoint.animatedFloat.endValue - eventPoint.animatedFloat.startValue) + eventPoint.animatedFloat.startValue,
AnimationCurveType.Linear));
}
RemoveEventPoint(eventPoint);
connectFloat.Sort();
Initialize(connectFloat, Title);
FatherWindow.ChangeValue();
}
} }

View File

@@ -247,6 +247,10 @@ public partial class GraphicalFlexibleFloatWindow
EventPoint.Locked = false; EventPoint.Locked = false;
} }
} }
else if (Keyboard.current.lKey.wasPressedThisFrame)
{
ConnectedPoint.FatherTab.CutEvent();
}
} }
@@ -282,6 +286,7 @@ public partial class GraphicalFlexibleFloatWindow
} }
} }
} }
public partial class GraphicalFlexibleFloatWindow public partial class GraphicalFlexibleFloatWindow
{//以后显示类写这里,别在叠大粪了 {//以后显示类写这里,别在叠大粪了

View File

@@ -3,6 +3,8 @@ using UnityEngine;
using Ichni.RhythmGame; using Ichni.RhythmGame;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
using DG.Tweening; using DG.Tweening;
using UniRx;
using UniRx.Triggers;
namespace Ichni.Editor namespace Ichni.Editor
{ {
@@ -46,12 +48,19 @@ namespace Ichni.Editor
transform.localScale = Vector3.zero; transform.localScale = Vector3.zero;
StartCoroutine(WindowAnim.ShowPanelOnScale(gameObject)); StartCoroutine(WindowAnim.ShowPanelOnScale(gameObject));
targetGameElement.OnDestroyAsObservable()
.Subscribe(_ =>
{
if (gameObject != null) Destroy(gameObject);
instance = null;
});
} }
void Update() void Update()
{ {
if (isMoving) return;
if (isMoving) return;
transform.eulerAngles = targetGameElement.parentElement?.transform.eulerAngles ?? Vector3.zero;
transform.position = targetGameElement.transform.position; transform.position = targetGameElement.transform.position;
if (Mouse.current.leftButton.wasPressedThisFrame) if (Mouse.current.leftButton.wasPressedThisFrame)
{ {
@@ -144,13 +153,14 @@ namespace Ichni.Editor
// 应用新位置 // 应用新位置
Vector3 newPosition = initialTargetPosition + worldAxis * worldDelta; Vector3 newPosition = initialTargetPosition + worldAxis * worldDelta;
Vector3 newPositionFormatted = new Vector3(
Mathf.Round(newPosition.x * 100f) / 100f, targetGameElement.transform.position = newPosition;
Mathf.Round(newPosition.y * 100f) / 100f, targetGameElement.transform.localPosition = new Vector3(
Mathf.Round(newPosition.z * 100f) / 100f Mathf.Round(targetGameElement.transform.localPosition.x * 100f) / 100f,
Mathf.Round(targetGameElement.transform.localPosition.y * 100f) / 100f,
Mathf.Round(targetGameElement.transform.localPosition.z * 100f) / 100f
); );
targetGameElement.transform.position = newPositionFormatted; transform.position = newPosition;
transform.position = newPositionFormatted;
} }
private Vector3 GetWorldAxis(int moveCode) private Vector3 GetWorldAxis(int moveCode)

View File

@@ -56,10 +56,6 @@ namespace Ichni
private void Awake() private void Awake()
{ {
instance = this; instance = this;
useNotePrefab = true;
ExpandWhileClick = true;
useQuickMove = true;
useClickSelect = true;
isLoaded = false; isLoaded = false;
projectManager = new ProjectManager(); projectManager = new ProjectManager();
operationManager = new OperationManager(); operationManager = new OperationManager();

File diff suppressed because it is too large Load Diff

View File

@@ -6071,9 +6071,9 @@
},{ },{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : { "originalPosition" : {
"x" : -2.4, "x" : -1,
"y" : 0, "y" : 0,
"z" : 0.000900268555 "z" : 0
}, },
"originalEulerAngles" : { "originalEulerAngles" : {
"x" : 0, "x" : 0,
@@ -6229,9 +6229,9 @@
},{ },{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : { "originalPosition" : {
"x" : -2.02, "x" : -0.4218756,
"y" : 0, "y" : 0,
"z" : 0.00410461426 "z" : 0
}, },
"originalEulerAngles" : { "originalEulerAngles" : {
"x" : 0, "x" : 0,
@@ -55344,9 +55344,9 @@
},{ },{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : { "originalPosition" : {
"x" : 0, "x" : 1,
"y" : 0, "y" : 0,
"z" : -976 "z" : -473
}, },
"originalEulerAngles" : { "originalEulerAngles" : {
"x" : 0, "x" : 0,
@@ -114526,6 +114526,66 @@
"attachedElementGuid" : { "attachedElementGuid" : {
"value" : "588ff8e9-8646-4385-9d5e-371ecae6ae57" "value" : "588ff8e9-8646-4385-9d5e-371ecae6ae57"
} }
},{
"__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp",
"isShowingSphere" : true,
"elementName" : "New Path Node",
"tags" : [
],
"elementGuid" : {
"value" : "a1bee609-d1b2-4e63-8080-a6c26812d9d3"
},
"attachedElementGuid" : {
"value" : "2ecc4f84-1d6f-4f5f-b56a-039ce54d9b53"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 0,
"y" : 0,
"z" : -976
},
"originalEulerAngles" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalScale" : {
"x" : 1,
"y" : 1,
"z" : 1
},
"attachedElementGuid" : {
"value" : "a1bee609-d1b2-4e63-8080-a6c26812d9d3"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "a1bee609-d1b2-4e63-8080-a6c26812d9d3"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
"originalBaseColor" : {
"r" : 1,
"g" : 1,
"b" : 1,
"a" : 1
},
"emissionEnabled" : false,
"originalEmissionColor" : {
"r" : 0,
"g" : 0,
"b" : 0,
"a" : 1
},
"originalEmissionIntensity" : 0,
"attachedElementGuid" : {
"value" : "a1bee609-d1b2-4e63-8080-a6c26812d9d3"
}
} }
], ],
"attachedElementGuid" : { "attachedElementGuid" : {

View File

@@ -1,5 +1,5 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
CRC: 3206372954 CRC: 1884651117
AssetBundleManifest: AssetBundleManifest:
AssetBundleInfos: AssetBundleInfos:
Info_0: Info_0:

View File

@@ -1,15 +1,15 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
CRC: 562226463 CRC: 2016530734
Hashes: Hashes:
AssetFileHash: AssetFileHash:
serializedVersion: 2 serializedVersion: 2
Hash: 94eab340bf8fd6cb0a0b0e354cc48b17 Hash: 1552a2d53f685e0a2c6886fa73458cb6
TypeTreeHash: TypeTreeHash:
serializedVersion: 2 serializedVersion: 2
Hash: 274766e643314232a0624647b0f6f65e Hash: def11529b5fcdd04f866537b77a9d0ed
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: 94eab340bf8fd6cb0a0b0e354cc48b17 Hash: 1552a2d53f685e0a2c6886fa73458cb6
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 1 - Class: 1

View File

@@ -1,15 +1,15 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
CRC: 969896204 CRC: 3790798872
Hashes: Hashes:
AssetFileHash: AssetFileHash:
serializedVersion: 2 serializedVersion: 2
Hash: ba6732b1dc61496eb10a7bdedf0cfa3f Hash: 329c54c663ceab6a6601ca19a05f5121
TypeTreeHash: TypeTreeHash:
serializedVersion: 2 serializedVersion: 2
Hash: a82c29dac7008dd4e8ddbd3da1533c37 Hash: bc905bc089e6ae59636d56a0812b978b
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: ba6732b1dc61496eb10a7bdedf0cfa3f Hash: 329c54c663ceab6a6601ca19a05f5121
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 1 - Class: 1

View File

@@ -1,15 +1,15 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
CRC: 2841792033 CRC: 2978929696
Hashes: Hashes:
AssetFileHash: AssetFileHash:
serializedVersion: 2 serializedVersion: 2
Hash: dcd570fc931461005f81963b02073d83 Hash: dbc0a33c4cf19f56cd82cf89b7106341
TypeTreeHash: TypeTreeHash:
serializedVersion: 2 serializedVersion: 2
Hash: 76414f0bd3072e0f403e9f6ae6853349 Hash: e9ae0438db04172fb4d82acc92d8d8de
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: dcd570fc931461005f81963b02073d83 Hash: dbc0a33c4cf19f56cd82cf89b7106341
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 1 - Class: 1

View File

@@ -96,6 +96,10 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
base.Refresh(); base.Refresh();
// judgeEffect.transform.position = tailPoint.transform.position; // judgeEffect.transform.position = tailPoint.transform.position;
} }
public override void SetHighlight()
{
return; // HoldNoteVisual不需要高亮
}
} }
public partial class DTMNoteVisualHold public partial class DTMNoteVisualHold