Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CustomNotes/Installers/CustomNotesGameInstaller.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public override void InstallBindings()
{
Container.BindInterfacesAndSelfTo<GameCameraManager>().AsSingle();
Container.Bind<IInitializable>().To<CustomNoteManager>().AsSingle();
Container.Bind<CustomNoteManager.Flags>().AsSingle();
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion CustomNotes/Installers/CustomNotesMenuInstaller.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public override void InstallBindings()
Container.Bind<NoteDetailsViewController>().FromNewComponentAsViewController().AsSingle();
Container.Bind<NoteListViewController>().FromNewComponentAsViewController().AsSingle();
Container.BindInterfacesAndSelfTo<NoteModifierViewController>().AsSingle();
Container.BindFlowCoordinator<NotesFlowCoordinator>();
Container.Bind<NotesFlowCoordinator>().FromNewComponentOnNewGameObject(nameof(NotesFlowCoordinator)).AsSingle();

Container.BindInterfacesTo<MenuButtonManager>().AsSingle();
Container.BindInterfacesTo<CustomNotesViewManager>().AsSingle();
Expand Down
85 changes: 68 additions & 17 deletions CustomNotes/Managers/CustomBombController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ namespace CustomNotes.Managers
internal class CustomBombController : MonoBehaviour, INoteControllerDidInitEvent
{
private PluginConfig _pluginConfig;
private CustomNoteManager.Flags _customNoteFlags;

private CustomNote _customNote;
private NoteMovement _noteMovement;
private BombNoteController _bombNoteController;
private MeshRenderer _bombMeshRenderer;

protected Transform bombMesh;
protected GameObject fakeFirstPersonBombMesh;
Expand All @@ -22,31 +24,44 @@ internal class CustomBombController : MonoBehaviour, INoteControllerDidInitEvent
protected SiraPrefabContainer container;
protected SiraPrefabContainer.Pool bombPool;

private bool _eventsRegistered = false;

[Inject]
internal void Init(PluginConfig pluginConfig, NoteAssetLoader noteAssetLoader, [InjectOptional(Id = "cn.bomb")] SiraPrefabContainer.Pool bombContainerPool)
internal void Init(PluginConfig pluginConfig, NoteAssetLoader noteAssetLoader, CustomNoteManager.Flags customNoteFlags, [InjectOptional(Id = "cn.bomb")] SiraPrefabContainer.Pool bombContainerPool)
{
_pluginConfig = pluginConfig;
_customNoteFlags = customNoteFlags;



_customNote = noteAssetLoader.CustomNoteObjects[noteAssetLoader.SelectedNote];
bombPool = bombContainerPool;

_bombNoteController = GetComponent<BombNoteController>();
_noteMovement = GetComponent<NoteMovement>();

if(bombPool != null)
{
_bombNoteController.didInitEvent.Add(this);
_noteMovement.noteDidFinishJumpEvent += DidFinish;
}


bombMesh = gameObject.transform.Find("Mesh");


MeshRenderer bm = GetComponentInChildren<MeshRenderer>();
_bombMeshRenderer = GetComponentInChildren<MeshRenderer>();

if (_customNoteFlags.ForceDisable)
{
return;
}

SetupCustomBomb();
}

protected virtual void SetupCustomBomb()
{
DeOrRegisterEvents(true);

if ((_pluginConfig.HMDOnly || LayerUtils.HMDOverride))
if (_pluginConfig.HMDOnly || LayerUtils.HMDOverride)
{
if(bombPool == null)
if (bombPool == null)
{
// create fake bombs for Custom Notes without Custom Bombs
fakeFirstPersonBombMesh = UnityEngine.Object.Instantiate(bombMesh.gameObject);
Expand All @@ -56,26 +71,65 @@ internal void Init(PluginConfig pluginConfig, NoteAssetLoader noteAssetLoader, [
fakeFirstPersonBombMesh.transform.localScale = Vector3.one;
fakeFirstPersonBombMesh.transform.localPosition = Vector3.zero;
fakeFirstPersonBombMesh.transform.rotation = Quaternion.identity;
fakeFirstPersonBombMesh.layer = (int)LayerUtils.NoteLayer.FirstPerson;
fakeFirstPersonBombMesh.layer = (int) LayerUtils.NoteLayer.FirstPerson;
}

}
else if (bombPool != null)
{
bm.enabled = false;
_bombMeshRenderer.enabled = false;
}
}


protected virtual void RevertToDefaultBomb()
{
DeOrRegisterEvents(false);

if (fakeFirstPersonBombMesh != null)
{
fakeFirstPersonBombMesh.SetActive(false);
}
_bombMeshRenderer.enabled = true;
}

protected virtual void DeOrRegisterEvents(bool register)
{
if (_eventsRegistered == register || bombPool == null) return;

_eventsRegistered = register;

if (register)
{
_bombNoteController.didInitEvent.Add(this);
_noteMovement.noteDidFinishJumpEvent += DidFinish;
return;
}

if (_bombNoteController != null)
{
_bombNoteController.didInitEvent.Remove(this);
}
if (_noteMovement != null)
{
_noteMovement.noteDidFinishJumpEvent -= DidFinish;
}
}

private void DidFinish()
{
if (_customNoteFlags.ForceDisable || container == null) return;

container.transform.SetParent(null);
bombPool.Despawn(container);
container = null;
}

public void HandleNoteControllerDidInit(NoteController noteController)
{
if(_customNoteFlags.ForceDisable)
{
RevertToDefaultBomb();
return;
}
SpawnThenParent(bombPool);
}

Expand Down Expand Up @@ -107,10 +161,7 @@ private void SpawnThenParent(SiraPrefabContainer.Pool bombModelPool)

protected void OnDestroy()
{
if (_bombNoteController != null)
{
_bombNoteController.didInitEvent.Remove(this);
}
DeOrRegisterEvents(false);
Destroy(fakeFirstPersonBombMesh);
}
}
Expand Down
89 changes: 71 additions & 18 deletions CustomNotes/Managers/CustomNoteController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@ namespace CustomNotes.Managers
public class CustomNoteController : MonoBehaviour, IColorable, INoteControllerNoteWasCutEvent, INoteControllerNoteWasMissedEvent, INoteControllerDidInitEvent
{
private PluginConfig _pluginConfig;
private CustomNoteManager.Flags _customNoteFlags;

protected Transform noteCube;
private CustomNote _customNote;
private GameNoteController _gameNoteController;
private CustomNoteColorNoteVisuals _customNoteColorNoteVisuals;
private MeshRenderer _noteMesh;

protected GameObject activeNote;
protected SiraPrefabContainer container;
Expand All @@ -27,17 +29,22 @@ public class CustomNoteController : MonoBehaviour, IColorable, INoteControllerNo
private SiraPrefabContainer.Pool _leftArrowNotePool;
private SiraPrefabContainer.Pool _rightArrowNotePool;

private bool _eventsRegistered = false;

public Color Color => _customNoteColorNoteVisuals != null ? _customNoteColorNoteVisuals.noteColor : Color.white;

[Inject]
internal void Init(PluginConfig pluginConfig,
NoteAssetLoader noteAssetLoader,
CustomNoteManager.Flags customNoteFlags,
[Inject(Id = "cn.left.arrow")] SiraPrefabContainer.Pool leftArrowNotePool,
[Inject(Id = "cn.right.arrow")] SiraPrefabContainer.Pool rightArrowNotePool,
[InjectOptional(Id = "cn.left.dot")] SiraPrefabContainer.Pool leftDotNotePool,
[InjectOptional(Id = "cn.right.dot")] SiraPrefabContainer.Pool rightDotNotePool)
{
_pluginConfig = pluginConfig;
_customNoteFlags = customNoteFlags;

_leftArrowNotePool = leftArrowNotePool;
_rightArrowNotePool = rightArrowNotePool;

Expand All @@ -49,22 +56,68 @@ internal void Init(PluginConfig pluginConfig,
_gameNoteController = GetComponent<GameNoteController>();
_customNoteColorNoteVisuals = gameObject.AddComponent<CustomNoteColorNoteVisuals>();

_gameNoteController.didInitEvent.Add(this);
_gameNoteController.noteWasMissedEvent.Add(this);
_gameNoteController.noteWasCutEvent.Add(this);
_customNoteColorNoteVisuals.didInitEvent += Visuals_DidInit;

noteCube = _gameNoteController.gameObject.transform.Find("NoteCube");

MeshRenderer noteMesh = GetComponentInChildren<MeshRenderer>();
_noteMesh = GetComponentInChildren<MeshRenderer>();

if (_customNoteFlags.ShouldDisableCustomNote())
{
// Don't set up if it's forcefully disabled or
// if Ghost Notes are enabled and this note is not part of the first set of notes
// (for late spawning notes when the pool has to be expanded)
return;
}

SetupCustomNote();
}

protected virtual void SetupCustomNote()
{
DeOrRegisterEvents(true);

if (_pluginConfig.HMDOnly == false && LayerUtils.HMDOverride == false)
{
// only disable if custom notes display on both hmd and display
noteMesh.forceRenderingOff = true;
_noteMesh.forceRenderingOff = true;
}
else
{
noteMesh.gameObject.layer = (int) LayerUtils.NoteLayer.ThirdPerson;
_noteMesh.gameObject.layer = (int) LayerUtils.NoteLayer.ThirdPerson;
}
}

protected virtual void RevertToDefaultNote()
{
DeOrRegisterEvents(false);

_noteMesh.forceRenderingOff = false;
_noteMesh.gameObject.layer = (int) LayerUtils.NoteLayer.Note;
}

protected virtual void DeOrRegisterEvents(bool register)
{
if (_eventsRegistered == register) return;

_eventsRegistered = register;

if (register)
{
_gameNoteController.didInitEvent.Add(this);
_gameNoteController.noteWasMissedEvent.Add(this);
_gameNoteController.noteWasCutEvent.Add(this);
_customNoteColorNoteVisuals.didInitEvent += Visuals_DidInit;
return;
}

if (_gameNoteController != null)
{
_gameNoteController.didInitEvent.Remove(this);
_gameNoteController.noteWasMissedEvent.Remove(this);
_gameNoteController.noteWasCutEvent.Remove(this);
}
if (_customNoteColorNoteVisuals != null)
{
_customNoteColorNoteVisuals.didInitEvent -= Visuals_DidInit;
}
}

Expand Down Expand Up @@ -93,6 +146,11 @@ public void HandleNoteControllerNoteWasCut(NoteController nc, in NoteCutInfo _)

public void HandleNoteControllerDidInit(NoteController noteController)
{
if(_customNoteFlags.ShouldDisableCustomNote())
{
RevertToDefaultNote();
return;
}
var data = noteController.noteData;
SpawnThenParent(data.colorType == ColorType.ColorA
? data.cutDirection == NoteCutDirection.Any ? _leftDotNotePool : _leftArrowNotePool
Expand Down Expand Up @@ -135,6 +193,10 @@ protected void SetActiveThenColor(GameObject note, Color color)

private void Visuals_DidInit(ColorNoteVisuals visuals, NoteController noteController)
{
if (_customNoteFlags.ShouldDisableCustomNote())
{
return;
}
SetActiveThenColor(activeNote, visuals.noteColor);
// Hide certain parts of the default note which is not required
if(_pluginConfig.HMDOnly == false && LayerUtils.HMDOverride == false)
Expand Down Expand Up @@ -171,16 +233,7 @@ private void Visuals_DidInit(ColorNoteVisuals visuals, NoteController noteContro

protected void OnDestroy()
{
if (_gameNoteController != null)
{
_gameNoteController.didInitEvent.Remove(this);
_gameNoteController.noteWasMissedEvent.Remove(this);
_gameNoteController.noteWasCutEvent.Remove(this);
}
if (_customNoteColorNoteVisuals != null)
{
_customNoteColorNoteVisuals.didInitEvent -= Visuals_DidInit;
}
DeOrRegisterEvents(false);
}

public void SetColor(Color color)
Expand Down
Loading