using System; using System.Collections; using System.Collections.Generic; using Ichni.RhythmGame.Beatmap; using UnityEngine; using UnityEngine.InputSystem; namespace Ichni.RhythmGame.ThemeBundles.Basic { public class JudgeTrigger : EnvironmentObject, IHaveNoteJudgeTriggerSubmodule, IScheduledElement { public SpriteRenderer triggerSprite; public Collider triggerCollider; public NoteJudgeTriggerSubmodule noteJudgeTriggerSubmodule { get; set; } public static JudgeTrigger GenerateElement(string elementName, Guid id, List tags, bool isFirstGenerated, GameElement parentElement, string themeBundleName, string objectName, bool isStatic) { JudgeTrigger judgeTrigger = EnvironmentObject.GenerateElement(elementName, id, tags, isFirstGenerated, themeBundleName, objectName, parentElement, isStatic).GetComponent(); return judgeTrigger; } public override void SetDefaultSubmodules() { base.SetDefaultSubmodules(); noteJudgeTriggerSubmodule = new NoteJudgeTriggerSubmodule(this); } public override void AfterInitialize() { base.AfterInitialize(); CoreServices.UpdateScheduler.Register(UpdatePhase.Misc, this); } public override void OnDelete() { base.OnDelete(); CoreServices.UpdateScheduler.Unregister(UpdatePhase.Misc, this); } #region [IScheduledElement] Scheduler Interface public void ScheduledUpdate(UpdatePhase phase, float songTime) { triggerSprite.color = IsMouseOver() ? Color.red : Color.white; } public bool IsScheduledActive => isActiveAndEnabled; #endregion private bool IsMouseOver() { //Raycast to check if mouse is over the object Ray ray = GameManager.Instance.cameraManager.gameCamera.cam.ScreenPointToRay(Mouse.current.position.ReadValue()); if (Physics.Raycast(ray, out RaycastHit hit)) { if (hit.collider == triggerCollider) { return true; } } return false; } } namespace Beatmap { public class JudgeTrigger_BM : EnvironmentObject_BM { public JudgeTrigger_BM() { } public JudgeTrigger_BM(string elementName, Guid elementGuid, List tags, GameElement_BM parentElement, string themeBundleName, string objectName, bool isStatic) : base(elementName, elementGuid, tags, parentElement, themeBundleName, objectName, isStatic) { } public override void ExecuteBM() { matchedElement = JudgeTrigger.GenerateElement(elementName, elementGuid, tags, false, GetElement(attachedElementGuid), themeBundleName, objectName, isStatic); } } } }