Create components for achievement reveals

This commit is contained in:
Nick 2022-06-19 14:30:53 -04:00
parent e7f2d9b93a
commit e0bde5551b
3 changed files with 132 additions and 0 deletions

View File

@ -0,0 +1,52 @@
using NewHorizons.AchievementsPlus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace NewHorizons.Components.Achievement
{
public class AchievementObserveTrigger : MonoBehaviour, IObservable
{
public string achievementID;
public float maxViewDistance = 2f;
public float maxViewAngle = 180f;
public bool disableColliderOnUnlockAchievement;
public bool achievementUnlocked;
private OWCollider _owCollider;
private void Reset()
{
gameObject.layer = LayerMask.NameToLayer("Interactible");
}
private void Awake()
{
if (disableColliderOnUnlockAchievement)
{
_owCollider = gameObject.GetAddComponent<OWCollider>();
}
}
public void Observe(RaycastHit raycastHit, Vector3 raycastOrigin)
{
float num = Vector3.Angle(raycastHit.point - raycastOrigin, -transform.forward);
if (!achievementUnlocked && raycastHit.distance < maxViewDistance && num < maxViewAngle)
{
if (disableColliderOnUnlockAchievement)
{
_owCollider.SetActivation(false);
}
AchievementHandler.Earn(achievementID);
achievementUnlocked = true;
}
}
public void LoseFocus() { }
}
}

View File

@ -0,0 +1,38 @@
using NewHorizons.AchievementsPlus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace NewHorizons.Components.Achievement
{
// Modified version of ShipLogFactSnapshotTrigger
public class AchievementSnapshotTrigger : MonoBehaviour
{
private void Awake()
{
_visibilityTracker = GetComponent<VisibilityTracker>();
GlobalMessenger<ProbeCamera>.AddListener("ProbeSnapshot", new Callback<ProbeCamera>(OnProbeSnapshot));
}
private void OnDestroy()
{
GlobalMessenger<ProbeCamera>.RemoveListener("ProbeSnapshot", new Callback<ProbeCamera>(OnProbeSnapshot));
}
private void OnProbeSnapshot(ProbeCamera probeCamera)
{
if (_visibilityTracker != null && _visibilityTracker.IsVisibleToProbe(probeCamera.GetOWCamera()) && (_visibilityTracker.transform.position - probeCamera.transform.position).magnitude < maxDistance)
{
AchievementHandler.Earn(achievementID);
}
}
public string achievementID;
public float maxDistance = 200f;
private VisibilityTracker _visibilityTracker;
}
}

View File

@ -0,0 +1,42 @@
using NewHorizons.AchievementsPlus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace NewHorizons.Components.Achievement
{
public class AchievementVolume : MonoBehaviour
{
private void Start()
{
_trigger = gameObject.GetRequiredComponent<OWTriggerVolume>();
_trigger.OnEntry += OnEntry;
return;
}
private void OnDestroy()
{
_trigger.OnEntry -= OnEntry;
}
private void OnEntry(GameObject hitObj)
{
if ((!_player || hitObj.CompareTag("PlayerDetector")) && (!_probe || hitObj.CompareTag("ProbeDetector")))
{
AchievementHandler.Earn(achievementID);
_trigger.OnEntry -= OnEntry;
}
}
public string achievementID;
private bool _player = true;
private bool _probe;
private OWTriggerVolume _trigger;
}
}