@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
} // 如果没有选择主题包,则材质名称下拉框不可用
|
||||
|
||||
|
||||
@@ -40,9 +40,12 @@ namespace Ichni
|
||||
|
||||
public NoteBase.NoteJudgeType currentJudgeType;
|
||||
public bool useNotePrefab = true;
|
||||
public bool ExpandWhileClick = false;
|
||||
public bool ExpandWhileClick = true;
|
||||
|
||||
public BasePrefabsCollection basePrefabs;
|
||||
public Dictionary<string, CustomPrefabsCollection> customPrefabs;
|
||||
|
||||
|
||||
public NoteAudioCollection noteAudioCollection;
|
||||
|
||||
[Title("Runtime Global Elements")]
|
||||
@@ -73,6 +76,7 @@ namespace Ichni
|
||||
{
|
||||
StartCoroutine(StartFrameRate());
|
||||
|
||||
|
||||
this.elementName = "EditorManager";
|
||||
this.elementGuid = Guid.Empty;
|
||||
uiManager.hierarchy.GenerateTab(this, null);
|
||||
@@ -90,6 +94,7 @@ namespace Ichni
|
||||
|
||||
isLoaded = true;
|
||||
songInformation.songTime = musicPlayer.audioSource.time - songInformation.offset;
|
||||
|
||||
}
|
||||
public float CurrentFrameRate;
|
||||
public TMP_Text FPStext;
|
||||
|
||||
Reference in New Issue
Block a user