From 7f493f682503f5186308de7b8f74b5b49233cfe4 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Thu, 2 Nov 2023 11:51:31 +0800 Subject: +init --- GameCode/LaunchableDefenseMechanismInteractor.cs | 83 ++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 GameCode/LaunchableDefenseMechanismInteractor.cs (limited to 'GameCode/LaunchableDefenseMechanismInteractor.cs') diff --git a/GameCode/LaunchableDefenseMechanismInteractor.cs b/GameCode/LaunchableDefenseMechanismInteractor.cs new file mode 100644 index 0000000..c408385 --- /dev/null +++ b/GameCode/LaunchableDefenseMechanismInteractor.cs @@ -0,0 +1,83 @@ +using UnityEngine; + +public class LaunchableDefenseMechanismInteractor : InteractorBase, DayNightCycle.IDaytimeSensitive +{ + public GameObject focusIndicator; + + public LaunchableProjectile projectilePrefab; + + public Transform projectileSpawn; + + public bool autoReloadOnDawn = true; + + private LaunchableProjectile currentProjectile; + + private void Start() + { + DayNightCycle.Instance.RegisterDaytimeSensitiveObject(this); + Reload(); + if (DayNightCycle.Instance.CurrentTimestate == DayNightCycle.Timestate.Day) + { + base.gameObject.SetActive(value: false); + } + } + + public override void Focus(PlayerInteraction player) + { + if ((bool)currentProjectile) + { + focusIndicator.SetActive(value: true); + } + } + + public override void InteractionBegin(PlayerInteraction player) + { + if ((bool)currentProjectile) + { + currentProjectile.Launch(); + currentProjectile.transform.parent = null; + currentProjectile = null; + Unfocus(player); + } + } + + public void OnDawn_AfterSunrise() + { + base.gameObject.SetActive(value: false); + if (autoReloadOnDawn) + { + Reload(); + } + } + + public void OnDawn_BeforeSunrise() + { + } + + public void OnDusk() + { + base.gameObject.SetActive(value: true); + } + + public override void Unfocus(PlayerInteraction player) + { + focusIndicator.SetActive(value: false); + } + + public void Reload() + { + if (!currentProjectile) + { + currentProjectile = Object.Instantiate(projectilePrefab, projectileSpawn.transform.position, projectileSpawn.transform.rotation, base.transform.parent); + } + } + + private void OnDrawGizmos() + { + Gizmos.color = Color.black; + Gizmos.DrawWireMesh(projectilePrefab.GetComponentInChildren().sharedMesh, 0, projectileSpawn.position, projectileSpawn.rotation, projectilePrefab.transform.localScale); + Gizmos.color = Color.magenta; + Gizmos.DrawLine(projectileSpawn.position, projectileSpawn.position + projectileSpawn.forward * 15f); + Gizmos.DrawWireSphere(projectileSpawn.position + projectileSpawn.forward * 15f, 0.3f); + } +} -- cgit v1.1-26-g67d0