mirror of
https://github.com/thegeneralist01/Scene-Manager-DevRepo
synced 2026-01-11 23:50:29 +01:00
Refactored some private functions to local functions, updated public functions to internal.
This commit is contained in:
parent
730e85fe3c
commit
89771ab3df
1 changed files with 129 additions and 134 deletions
|
|
@ -10,22 +10,21 @@ namespace SceneManager
|
||||||
{
|
{
|
||||||
class BarrierMenu
|
class BarrierMenu
|
||||||
{
|
{
|
||||||
public static UIMenu barrierMenu { get; private set; }
|
internal static UIMenu barrierMenu = new UIMenu("Scene Manager", "~o~Barrier Management");
|
||||||
public static List<Barrier> barriers = new List<Barrier>();
|
internal static List<Barrier> barriers = new List<Barrier>();
|
||||||
private static UIMenuListScrollerItem<string> barrierList = new UIMenuListScrollerItem<string>("Select Barrier", "", Settings.barrierKeys);
|
private static UIMenuListScrollerItem<string> barrierList = new UIMenuListScrollerItem<string>("Spawn Barrier", "", Settings.barrierKeys);
|
||||||
private static UIMenuNumericScrollerItem<int> rotateBarrier = new UIMenuNumericScrollerItem<int>("Rotate Barrier", "", 0, 350, 10);
|
private static UIMenuNumericScrollerItem<int> rotateBarrier = new UIMenuNumericScrollerItem<int>("Rotate Barrier", "", 0, 350, 10);
|
||||||
private static UIMenuListScrollerItem<string> removeBarrierOptions = new UIMenuListScrollerItem<string>("Remove Barrier", "", new[] { "Last Barrier", "Nearest Barrier", "All Barriers" });
|
private static UIMenuListScrollerItem<string> removeBarrierOptions = new UIMenuListScrollerItem<string>("Remove Barrier", "", new[] { "Last Barrier", "Nearest Barrier", "All Barriers" });
|
||||||
private static UIMenuItem resetBarriers = new UIMenuItem("Reset Barriers", "Reset all spawned barriers to their original position and rotation");
|
private static UIMenuItem resetBarriers = new UIMenuItem("Reset Barriers", "Reset all spawned barriers to their original position and rotation");
|
||||||
public static Rage.Object shadowBarrier;
|
internal static Rage.Object shadowBarrier;
|
||||||
|
|
||||||
internal static void InstantiateMenu()
|
internal static void InstantiateMenu()
|
||||||
{
|
{
|
||||||
barrierMenu = new UIMenu("Scene Manager", "~o~Barrier Management");
|
|
||||||
barrierMenu.ParentMenu = MainMenu.mainMenu;
|
barrierMenu.ParentMenu = MainMenu.mainMenu;
|
||||||
MenuManager.menuPool.Add(barrierMenu);
|
MenuManager.menuPool.Add(barrierMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void BuildBarrierMenu()
|
internal static void BuildBarrierMenu()
|
||||||
{
|
{
|
||||||
barrierMenu.AddItem(resetBarriers);
|
barrierMenu.AddItem(resetBarriers);
|
||||||
resetBarriers.ForeColor = Color.Gold;
|
resetBarriers.ForeColor = Color.Gold;
|
||||||
|
|
@ -40,13 +39,11 @@ namespace SceneManager
|
||||||
barrierMenu.AddItem(barrierList, 0);
|
barrierMenu.AddItem(barrierList, 0);
|
||||||
barrierList.ForeColor = Color.Gold;
|
barrierList.ForeColor = Color.Gold;
|
||||||
|
|
||||||
barrierMenu.RefreshIndex();
|
|
||||||
|
|
||||||
barrierMenu.OnItemSelect += BarrierMenu_OnItemSelected;
|
barrierMenu.OnItemSelect += BarrierMenu_OnItemSelected;
|
||||||
barrierMenu.OnScrollerChange += BarrierMenu_OnScrollerChange;
|
barrierMenu.OnScrollerChange += BarrierMenu_OnScrollerChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CreateShadowBarrier(UIMenu barrierMenu)
|
internal static void CreateShadowBarrier(UIMenu barrierMenu)
|
||||||
{
|
{
|
||||||
Hints.Display($"~o~Scene Manager\n~y~[Hint]~y~ ~w~The shadow cone will disappear if you aim too far away.");
|
Hints.Display($"~o~Scene Manager\n~y~[Hint]~y~ ~w~The shadow cone will disappear if you aim too far away.");
|
||||||
|
|
||||||
|
|
@ -59,11 +56,10 @@ namespace SceneManager
|
||||||
shadowBarrier.IsCollisionEnabled = false;
|
shadowBarrier.IsCollisionEnabled = false;
|
||||||
shadowBarrier.Opacity = 0.7f;
|
shadowBarrier.Opacity = 0.7f;
|
||||||
|
|
||||||
GameFiber ShadowConeLoopFiber = new GameFiber(() => LoopToDisplayShadowBarrier(barrierMenu));
|
GameFiber ShadowConeLoopFiber = new GameFiber(() => LoopToDisplayShadowBarrier());
|
||||||
ShadowConeLoopFiber.Start();
|
ShadowConeLoopFiber.Start();
|
||||||
}
|
|
||||||
|
|
||||||
private static void LoopToDisplayShadowBarrier(UIMenu barrierMenu)
|
void LoopToDisplayShadowBarrier()
|
||||||
{
|
{
|
||||||
while (barrierMenu.Visible && shadowBarrier)
|
while (barrierMenu.Visible && shadowBarrier)
|
||||||
{
|
{
|
||||||
|
|
@ -81,9 +77,8 @@ namespace SceneManager
|
||||||
|
|
||||||
if (shadowBarrier)
|
if (shadowBarrier)
|
||||||
shadowBarrier.Delete();
|
shadowBarrier.Delete();
|
||||||
}
|
|
||||||
|
|
||||||
private static void UpdateShadowBarrierPosition()
|
void UpdateShadowBarrierPosition()
|
||||||
{
|
{
|
||||||
DisableBarrierMenuOptionsIfShadowConeTooFar();
|
DisableBarrierMenuOptionsIfShadowConeTooFar();
|
||||||
shadowBarrier.SetPositionWithSnap(TracePlayerView(Settings.BarrierPlacementDistance, TraceFlags.IntersectWorld).HitPosition);
|
shadowBarrier.SetPositionWithSnap(TracePlayerView(Settings.BarrierPlacementDistance, TraceFlags.IntersectWorld).HitPosition);
|
||||||
|
|
@ -107,6 +102,39 @@ namespace SceneManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------ CREDIT PNWPARKS FOR THESE FUNCTIONS ------------\\
|
||||||
|
// Implement Parks's 'Get Point Player is Looking At' script for better placement in 3rd person https://bitbucket.org/snippets/gtaparks/MeBKxX
|
||||||
|
|
||||||
|
HitResult TracePlayerView(float maxTraceDistance = 30f, TraceFlags flags = TraceFlags.IntersectWorld) => TracePlayerView2(out Vector3 v1, out Vector3 v2, maxTraceDistance, flags);
|
||||||
|
|
||||||
|
HitResult TracePlayerView2(out Vector3 start, out Vector3 end, float maxTraceDistance, TraceFlags flags)
|
||||||
|
{
|
||||||
|
Vector3 direction = GetPlayerLookingDirection(out start);
|
||||||
|
end = start + (maxTraceDistance * direction);
|
||||||
|
var barrierObjects = barriers.Where(b => b.Object).Select(b => b.Object).ToArray();
|
||||||
|
return World.TraceLine(start, end, flags, barrierObjects);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 GetPlayerLookingDirection(out Vector3 camPosition)
|
||||||
|
{
|
||||||
|
if (Camera.RenderingCamera)
|
||||||
|
{
|
||||||
|
camPosition = Camera.RenderingCamera.Position;
|
||||||
|
return Camera.RenderingCamera.Direction;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float pitch = Rage.Native.NativeFunction.Natives.GET_GAMEPLAY_CAM_RELATIVE_PITCH<float>();
|
||||||
|
float heading = Rage.Native.NativeFunction.Natives.GET_GAMEPLAY_CAM_RELATIVE_HEADING<float>();
|
||||||
|
|
||||||
|
camPosition = Rage.Native.NativeFunction.Natives.GET_GAMEPLAY_CAM_COORD<Vector3>();
|
||||||
|
return (Game.LocalPlayer.Character.Rotation + new Rotator(pitch, 0, heading)).ToVector().ToNormalized();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//------------ CREDIT PNWPARKS FOR THESE FUNCTIONS ------------\\
|
||||||
|
}
|
||||||
|
|
||||||
private static void BarrierMenu_OnScrollerChange(UIMenu sender, UIMenuScrollerItem scrollerItem, int oldIndex, int newIndex)
|
private static void BarrierMenu_OnScrollerChange(UIMenu sender, UIMenuScrollerItem scrollerItem, int oldIndex, int newIndex)
|
||||||
{
|
{
|
||||||
|
|
@ -172,23 +200,43 @@ namespace SceneManager
|
||||||
}
|
}
|
||||||
currentBarriers.Clear();
|
currentBarriers.Clear();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private static void SpawnBarrier()
|
void SpawnBarrier()
|
||||||
{
|
{
|
||||||
var barrier = new Rage.Object(shadowBarrier.Model, shadowBarrier.Position, rotateBarrier.Value);
|
var barrier = new Rage.Object(shadowBarrier.Model, shadowBarrier.Position, rotateBarrier.Value);
|
||||||
barrier.SetPositionWithSnap(shadowBarrier.Position);
|
barrier.SetPositionWithSnap(shadowBarrier.Position);
|
||||||
Rage.Native.NativeFunction.Natives.SET_ENTITY_DYNAMIC(barrier, true);
|
Rage.Native.NativeFunction.Natives.SET_ENTITY_DYNAMIC(barrier, true);
|
||||||
barrier.IsPositionFrozen = false;
|
barrier.IsPositionFrozen = false;
|
||||||
Rage.Native.NativeFunction.Natives.SET_DISABLE_FRAG_DAMAGE(barrier, true);
|
Rage.Native.NativeFunction.Natives.SET_DISABLE_FRAG_DAMAGE(barrier, true);
|
||||||
//Rage.Native.NativeFunction.Natives.SET_DISABLE_BREAKING(barrier, true);
|
|
||||||
|
|
||||||
barriers.Add(new Barrier(barrier, barrier.Position, barrier.Heading));
|
barriers.Add(new Barrier(barrier, barrier.Position, barrier.Heading));
|
||||||
removeBarrierOptions.Enabled = true;
|
removeBarrierOptions.Enabled = true;
|
||||||
resetBarriers.Enabled = true;
|
resetBarriers.Enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void RemoveBarrier()
|
void SpawnFlare()
|
||||||
|
{
|
||||||
|
var flare = new Weapon("weapon_flare", shadowBarrier.Position, 1);
|
||||||
|
|
||||||
|
Rage.Native.NativeFunction.Natives.SET_ENTITY_DYNAMIC(flare, true);
|
||||||
|
GameFiber.StartNew(() =>
|
||||||
|
{
|
||||||
|
while (flare && flare.HeightAboveGround > 0.05f)
|
||||||
|
{
|
||||||
|
GameFiber.Yield();
|
||||||
|
}
|
||||||
|
GameFiber.Sleep(1000);
|
||||||
|
if (flare)
|
||||||
|
{
|
||||||
|
flare.IsPositionFrozen = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
barriers.Add(new Barrier(flare, flare.Position, flare.Heading));
|
||||||
|
removeBarrierOptions.Enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RemoveBarrier()
|
||||||
{
|
{
|
||||||
switch (removeBarrierOptions.Index)
|
switch (removeBarrierOptions.Index)
|
||||||
{
|
{
|
||||||
|
|
@ -216,59 +264,6 @@ namespace SceneManager
|
||||||
removeBarrierOptions.Enabled = barriers.Count == 0 ? false : true;
|
removeBarrierOptions.Enabled = barriers.Count == 0 ? false : true;
|
||||||
resetBarriers.Enabled = barriers.Count == 0 ? false : true;
|
resetBarriers.Enabled = barriers.Count == 0 ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SpawnFlare()
|
|
||||||
{
|
|
||||||
var flare = new Weapon("weapon_flare", shadowBarrier.Position, 1);
|
|
||||||
|
|
||||||
Rage.Native.NativeFunction.Natives.SET_ENTITY_DYNAMIC(flare, true);
|
|
||||||
GameFiber.StartNew(() =>
|
|
||||||
{
|
|
||||||
while (flare && flare.HeightAboveGround > 0.05f)
|
|
||||||
{
|
|
||||||
GameFiber.Yield();
|
|
||||||
}
|
}
|
||||||
GameFiber.Sleep(1000);
|
|
||||||
if (flare)
|
|
||||||
{
|
|
||||||
flare.IsPositionFrozen = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
barriers.Add(new Barrier(flare, flare.Position, flare.Heading));
|
|
||||||
removeBarrierOptions.Enabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------ CREDIT PNWPARKS FOR THESE FUNCTIONS ------------\\
|
|
||||||
// Implement Parks's 'Get Point Player is Looking At' script for better placement in 3rd person https://bitbucket.org/snippets/gtaparks/MeBKxX
|
|
||||||
internal static Vector3 GetPlayerLookingDirection(out Vector3 camPosition)
|
|
||||||
{
|
|
||||||
if (Camera.RenderingCamera)
|
|
||||||
{
|
|
||||||
camPosition = Camera.RenderingCamera.Position;
|
|
||||||
return Camera.RenderingCamera.Direction;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
float pitch = Rage.Native.NativeFunction.Natives.GET_GAMEPLAY_CAM_RELATIVE_PITCH<float>();
|
|
||||||
float heading = Rage.Native.NativeFunction.Natives.GET_GAMEPLAY_CAM_RELATIVE_HEADING<float>();
|
|
||||||
|
|
||||||
camPosition = Rage.Native.NativeFunction.Natives.GET_GAMEPLAY_CAM_COORD<Vector3>();
|
|
||||||
return (Game.LocalPlayer.Character.Rotation + new Rotator(pitch, 0, heading)).ToVector().ToNormalized();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static Vector3 GetPlayerLookingDirection() => GetPlayerLookingDirection(out Vector3 v1);
|
|
||||||
|
|
||||||
internal static HitResult TracePlayerView(out Vector3 start, out Vector3 end, float maxTraceDistance, TraceFlags flags)
|
|
||||||
{
|
|
||||||
Vector3 direction = GetPlayerLookingDirection(out start);
|
|
||||||
end = start + (maxTraceDistance * direction);
|
|
||||||
var barrierObjects = barriers.Where(b => b.Object).Select(b => b.Object).ToArray();
|
|
||||||
return World.TraceLine(start, end, flags, barrierObjects);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static HitResult TracePlayerView(float maxTraceDistance = 30f, TraceFlags flags = TraceFlags.IntersectWorld) => TracePlayerView(out Vector3 v1, out Vector3 v2, maxTraceDistance, flags);
|
|
||||||
//------------ CREDIT PNWPARKS FOR THESE FUNCTIONS ------------\\
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue