Allow creating achievement reveals from props

This commit is contained in:
Nick 2022-06-19 14:31:13 -04:00
parent e0bde5551b
commit 03709bf7dd
2 changed files with 69 additions and 21 deletions

View File

@ -1,4 +1,5 @@
using NewHorizons.External.Modules; using NewHorizons.Components.Achievement;
using NewHorizons.External.Modules;
using OWML.Common; using OWML.Common;
using UnityEngine; using UnityEngine;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
@ -46,35 +47,77 @@ namespace NewHorizons.Builder.ShipLog
private static void MakeTrigger(GameObject go, Sector sector, PropModule.RevealInfo info, IModBehaviour mod) private static void MakeTrigger(GameObject go, Sector sector, PropModule.RevealInfo info, IModBehaviour mod)
{ {
SphereShape newShape = MakeShape(go, info, Shape.CollisionMode.Volume); var shape = MakeShape(go, info, Shape.CollisionMode.Volume);
OWTriggerVolume newVolume = go.AddComponent<OWTriggerVolume>();
newVolume._shape = newShape; var volume = go.AddComponent<OWTriggerVolume>();
ShipLogFactListTriggerVolume volume = go.AddComponent<ShipLogFactListTriggerVolume>(); volume._shape = shape;
volume._factIDs = info.reveals;
if (info.reveals != null)
{
var factRevealVolume = go.AddComponent<ShipLogFactListTriggerVolume>();
factRevealVolume._factIDs = info.reveals;
}
if (!string.IsNullOrEmpty(info.achievementID))
{
var achievementVolume = go.AddComponent<AchievementVolume>();
achievementVolume.achievementID = info.achievementID;
}
} }
private static void MakeObservable(GameObject go, Sector sector, PropModule.RevealInfo info, IModBehaviour mod) private static void MakeObservable(GameObject go, Sector sector, PropModule.RevealInfo info, IModBehaviour mod)
{ {
go.layer = LayerMask.NameToLayer("Interactible"); go.layer = LayerMask.NameToLayer("Interactible");
SphereCollider newSphere = go.AddComponent<SphereCollider>();
newSphere.radius = info.radius; var sphere = go.AddComponent<SphereCollider>();
OWCollider newCollider = go.AddComponent<OWCollider>(); sphere.radius = info.radius;
ShipLogFactObserveTrigger newObserveTrigger = go.AddComponent<ShipLogFactObserveTrigger>();
newObserveTrigger._factIDs = info.reveals; var collider = go.AddComponent<OWCollider>();
newObserveTrigger._maxViewDistance = info.maxDistance == -1f ? 2f : info.maxDistance;
newObserveTrigger._maxViewAngle = info.maxAngle; var maxDistance = info.maxDistance == -1f ? 2f : info.maxDistance;
newObserveTrigger._owCollider = newCollider;
newObserveTrigger._disableColliderOnRevealFact = true; if (info.reveals != null)
{
var observeTrigger = go.AddComponent<ShipLogFactObserveTrigger>();
observeTrigger._factIDs = info.reveals;
observeTrigger._maxViewDistance = maxDistance;
observeTrigger._maxViewAngle = info.maxAngle;
observeTrigger._owCollider = collider;
observeTrigger._disableColliderOnRevealFact = true;
}
if (!string.IsNullOrEmpty(info.achievementID))
{
var achievementTrigger = go.AddComponent<AchievementObserveTrigger>();
achievementTrigger.achievementID = info.achievementID;
achievementTrigger.disableColliderOnUnlockAchievement = true;
achievementTrigger.maxViewDistance = maxDistance;
achievementTrigger.maxViewAngle = info.maxAngle;
}
} }
private static void MakeSnapshot(GameObject go, Sector sector, PropModule.RevealInfo info, IModBehaviour mod) private static void MakeSnapshot(GameObject go, Sector sector, PropModule.RevealInfo info, IModBehaviour mod)
{ {
SphereShape newShape = MakeShape(go, info, Shape.CollisionMode.Manual); var shape = MakeShape(go, info, Shape.CollisionMode.Manual);
ShapeVisibilityTracker newTracker = go.AddComponent<ShapeVisibilityTracker>();
newTracker._shapes = new Shape[] { newShape }; var visibilityTracker = go.AddComponent<ShapeVisibilityTracker>();
ShipLogFactSnapshotTrigger newSnapshotTrigger = go.AddComponent<ShipLogFactSnapshotTrigger>(); visibilityTracker._shapes = new Shape[] { shape };
newSnapshotTrigger._maxDistance = info.maxDistance == -1f ? 200f : info.maxDistance;
newSnapshotTrigger._factIDs = info.reveals; var maxDistance = info.maxDistance == -1f ? 200f : info.maxDistance;
if (info.reveals != null)
{
var snapshotTrigger = go.AddComponent<ShipLogFactSnapshotTrigger>();
snapshotTrigger._maxDistance = maxDistance;
snapshotTrigger._factIDs = info.reveals;
}
if (!string.IsNullOrEmpty(info.achievementID))
{
var achievementTrigger = go.AddComponent<AchievementSnapshotTrigger>();
achievementTrigger.maxDistance = maxDistance;
achievementTrigger.achievementID = info.achievementID;
}
} }
} }
} }

View File

@ -385,6 +385,11 @@ namespace NewHorizons.External.Modules
/// A list of facts to reveal /// A list of facts to reveal
/// </summary> /// </summary>
public string[] reveals; public string[] reveals;
/// <summary>
/// An achievement to unlock. Optional.
/// </summary>
public string achievementID;
} }
[JsonObject] [JsonObject]