mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Allow creating achievement reveals from props
This commit is contained in:
parent
e0bde5551b
commit
03709bf7dd
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
5
NewHorizons/External/Modules/PropModule.cs
vendored
5
NewHorizons/External/Modules/PropModule.cs
vendored
@ -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]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user