恶搞更新

Signed-off-by: TRAfoer <lhf190@outlook.com>
This commit is contained in:
2025-07-22 15:38:48 +08:00
parent 551d9c2b86
commit 2dae60d368
48 changed files with 35847 additions and 59531 deletions

View File

@@ -3,11 +3,12 @@ using System.Collections.Generic;
using System.Linq;
using Ichni.Editor;
using Ichni.RhythmGame.Beatmap;
using Sirenix.OdinInspector;
using UnityEngine;
namespace Ichni.RhythmGame
{
public abstract partial class GameElement : MonoBehaviour, IBaseElement, IComparable<GameElement>
public abstract partial class GameElement : SerializedMonoBehaviour, IBaseElement, IComparable<GameElement>
{
//物体名
public string elementName;

View File

@@ -25,7 +25,7 @@ namespace Ichni.RhythmGame
{
Hold hold = Instantiate(EditorManager.instance.basePrefabs.holdNote, parentElement.transform)
.GetComponent<Hold>();
hold.Initialize(elementName, id, tags, EditorManager.instance.useNotePrefab ? false : isFirstGenerated, parentElement);
hold.exactJudgeTime = exactJudgeTime;
hold.holdEndTime = holdEndTime;
@@ -108,21 +108,39 @@ namespace Ichni.RhythmGame
var holdSpecial = inspector.GenerateContainer("Hold");
var holdSpecialSubcontainer = holdSpecial.GenerateSubcontainer(3);
var holdEndTimeInputField = inspector.GenerateInputField(this, holdSpecialSubcontainer, "holdEndTime", nameof(holdEndTime));
var holdEndTimeInputField = inspector.GenerateInputField(this, holdSpecialSubcontainer, "holdEndTime", nameof(holdEndTime), true);
var holdingTimeInputField = inspector.GenerateInputField(holdSpecialSubcontainer, "holdingTime", (holdEndTime - exactJudgeTime).ToString());
holdEndTimeInputField.AddListenerFunction(() =>
{
holdingTimeInputField.inputField.text = (holdEndTime - exactJudgeTime).ToString();
noteVisual?.effectSubmodule.effectCollection["Holding"].ForEach(effect =>
{
effect.effectTime = holdEndTime - exactJudgeTime;
});
});
holdingTimeInputField.AddListenerFunction(() =>
{
holdEndTime = float.Parse(holdingTimeInputField.inputField.text) + exactJudgeTime;
noteVisual?.effectSubmodule.effectCollection["Holding"].ForEach(effect =>
{
effect.effectTime = holdingTime;
});
});
inspector.MarkedElements["ExactJudgeTime"].AddListenerFunction(() =>
{
noteVisual?.effectSubmodule.effectCollection["Holding"].ForEach(effect =>
{
effect.effectTime = holdEndTime - exactJudgeTime;
});
// 新增根据holdingTimeInputField的值更新holdEndTime
float holdingTimeValue;
if (float.TryParse(holdingTimeInputField.inputField.text, out holdingTimeValue))
{
holdEndTime = exactJudgeTime + holdingTimeValue;
holdEndTimeInputField.inputField.text = holdEndTime.ToString();
}
});
}
}
@@ -170,7 +188,7 @@ namespace Ichni.RhythmGame
{
isHolding = false;
isFinalJudged = true;
noteAudioSubmodule?.PlayNoteJudgeAudios(EditorManager.instance.currentJudgeType);
noteAudioSubmodule?.PlayNoteJudgeAudios(EditorManager.instance.currentJudgeType);//有待商榷
}
if (!isFirstJudged && songTime >= exactJudgeTime)
@@ -182,6 +200,7 @@ namespace Ichni.RhythmGame
if (isFirstJudged && !isHolding && songTime < holdEndTime)
{
noteAudioSubmodule?.PlayNoteJudgeAudios(EditorManager.instance.currentJudgeType);
isHolding = true;
}
}

View File

@@ -52,6 +52,8 @@ namespace Ichni.RhythmGame
particleTracker.stopTime = stopTime;
particleTracker.themeBundleList = ThemeBundleManager.instance.loadedThemeBundleList.ConvertAll(x => x.themeBundleName);
particleTracker.materialNameList = new List<string>();
particleTracker.themeBundleName = themeBundleName;
particleTracker.materialName = materialName;
particleTracker.SetParticleMaterial(themeBundleName, materialName);
particleTracker.SetParticleSettings(prewarm, is3D, width, extendDirection, density, lifeTime, isAutoOrient, particleRotation);
return particleTracker;
@@ -64,8 +66,13 @@ namespace Ichni.RhythmGame
public void SetParticleMaterial(string themeBundleName, string materialName)
{
Material material = ThemeBundleManager.instance.GetObject<Material>(themeBundleName, materialName) ??
EditorManager.instance.basePrefabs.defaultParticleMaterial;
Material material = ThemeBundleManager.instance.GetObject<Material>(themeBundleName, materialName);
if (material == null)
{
print("Material not found: " + themeBundleName + ", " + materialName);
material = ThemeBundleManager.instance.GetObject<Material>("basic", "Basic_Track_Default");
}
Renderer particleRenderer = particle.GetComponent<Renderer>();
particleRenderer.material = Instantiate(material);
particleRenderer.InitializeShader();
@@ -143,6 +150,10 @@ namespace Ichni.RhythmGame
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Particle Tracker");
// 确保 themeBundleList 初始化
if (themeBundleList == null)
themeBundleList = ThemeBundleManager.instance.loadedThemeBundleList.ConvertAll(x => x.themeBundleName);
DynamicUISubcontainer particleSettings0 = container.GenerateSubcontainer(3);
inspector.GenerateToggle(this, particleSettings0, "Prewarm", nameof(prewarm)).AddListenerFunction(SetPrewarm);
inspector.GenerateInputField(this, particleSettings0, "Play Time", nameof(playTime));
@@ -176,8 +187,9 @@ namespace Ichni.RhythmGame
}
else
{
materialNameList = new List<string>(); // 防止为null
var objectNameDropdown =
inspector.GenerateDropdown(this, materialSettings, "Material Name", new List<string>(), nameof(materialName));
inspector.GenerateDropdown(this, materialSettings, "Material Name", materialNameList, nameof(materialName));
objectNameDropdown.dropdown.interactable = false;
} // 如果没有选择主题包,则材质名称下拉框不可用