Skip to content

Commit

Permalink
Merge pull request #651 from MoonstoneStudios/black-hole-forge-move-p…
Browse files Browse the repository at this point in the history
…layers

Move players with black hole forge
  • Loading branch information
misternebula authored Dec 28, 2023
2 parents 1d39863 + f68dca0 commit 186c765
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 0 deletions.
77 changes: 77 additions & 0 deletions QSB/ElevatorSync/Patches/NomaiElevatorPatches.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
using HarmonyLib;
using QSB.Patches;
using QSB.Utility;
using UnityEngine;

namespace QSB.ElevatorSync.Patches;

[HarmonyPatch]
public class NomaiElevatorPatches : QSBPatch
{
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;

private static NomaiElevator blackHoleForge;
private static OWTriggerVolume blackHoleForgeTrigger;
private static NomaiElevator blackHoleForgeEntrance;
private static OWTriggerVolume blackHoleForgeEntranceTrigger;

private static bool runOnce;

[HarmonyPostfix]
[HarmonyPatch(typeof(NomaiElevator), nameof(NomaiElevator.FixedUpdate))]
public static void NomaiElevator_FixedUpdate(NomaiElevator __instance)
{
// The forge will handle everything.
if (__instance.name == "BlackHoleForge_EntrancePivot") return;

if (!blackHoleForge || !blackHoleForgeTrigger)
{
blackHoleForge = GameObject.Find("BlackHoleForgePivot").GetComponent<NomaiElevator>();
// Use a built-in trigger.
blackHoleForgeTrigger = GameObject.Find("BrittleHollow_Body/Sector_BH/Sector_NorthHemisphere/" +
"Sector_NorthPole/Sector_HangingCity/Sector_HangingCity_BlackHoleForge/BlackHoleForgePivot/" +
"Volumes_BlackHoleForge/DirectionalForceVolume")
.GetComponent<OWTriggerVolume>();
}

if (!blackHoleForgeEntrance || !blackHoleForgeEntranceTrigger)
{
blackHoleForgeEntrance = GameObject.Find("BlackHoleForge_EntrancePivot").GetComponent<NomaiElevator>();
blackHoleForgeEntranceTrigger = GameObject.Find("FakeSector_BlackHoleForge_EntrancePivot")
.GetComponent<OWTriggerVolume>();
}

var speed = blackHoleForge._speed;
var player = Locator.GetPlayerDetector();

var isInForge = blackHoleForgeTrigger.IsTrackingObject(player);
var isInEntrance = blackHoleForgeEntranceTrigger.IsTrackingObject(player);

if (isInEntrance)
{
// Speed is added to make sure the player moves with the forge AND the entrance.
speed += blackHoleForgeEntrance._speed;
}

if (isInEntrance || isInForge)
{
// Players do not move with the forge in the game,
// so they remain in place while the forge slides past them.
// This makes sure they move with the forge.
var newPos = Locator.GetPlayerTransform().position + new Vector3(0f, speed * Time.deltaTime, 0f);
Locator.GetPlayerTransform().position = newPos;
}

if (!runOnce)
{
// Recenter the universe because the player has been manually moved.
runOnce = true;

Delay.RunWhen(() => !__instance.enabled, () =>
{
runOnce = false;
CenterOfTheUniverse.s_instance.OnPlayerRepositioned();
});
}
}
}
30 changes: 30 additions & 0 deletions QSB/SectorSync/QSBSectorManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,36 @@ private static void CreateFakeSectors()
});
}


//black hole forge
{
var forge = GameObject.Find("BlackHoleForgePivot");
FakeSector.Create(forge,
forge.GetComponentInParent<Sector>(),
x =>
{
var trigger = x.gameObject.AddComponent<OWTriggerVolume>();
x._triggerRoot = GameObject.Find("BrittleHollow_Body/Sector_BH/Sector_NorthHemisphere/Sector_NorthPole/" +
"Sector_HangingCity/Sector_HangingCity_BlackHoleForge/BlackHoleForgePivot/" +
"Volumes_BlackHoleForge/DirectionalForceVolume");
});
}

// black hole forge entrance elevator
{
var entrance = GameObject.Find("BlackHoleForge_EntrancePivot");
var sector = GameObject.Find("Sector_HangingCity_BlackHoleForge").GetComponent<Sector>();
FakeSector.Create(entrance,
sector,
x =>
{
x.gameObject.AddComponent<OWTriggerVolume>();
var shape = x.gameObject.AddComponent<BoxShape>();
shape.size = new Vector3(5.5f, 5.8f, 5.5f);
shape.center = new Vector3(0f, 2.9f, 1.5f);
});
}

// OPC probe
{
var probe = Locator._orbitalProbeCannon
Expand Down

0 comments on commit 186c765

Please sign in to comment.