1
Fork 0
mirror of https://github.com/thegeneralist01/Scene-Manager-DevRepo synced 2026-01-11 23:50:29 +01:00

Resetting barriers now removes the old barrier and spawns a new one at the original position/heading. Made it so you can no longer spawn barriers on top of other barriers

This commit is contained in:
Rich Dunne 2020-09-07 20:23:27 -06:00
parent ad2ef2c4a8
commit 1aa94a0d50

View file

@ -59,8 +59,8 @@ namespace SceneManager
if (shadowBarrier) if (shadowBarrier)
shadowBarrier.Delete(); shadowBarrier.Delete();
shadowBarrier = new Rage.Object(Settings.barrierValues[barrierList.Index], TracePlayerView(15, TraceFlags.IntersectEverything).HitPosition, rotateBarrier.Index); //shadowBarrier = new Rage.Object(Settings.barrierValues[barrierList.Index], TracePlayerView(15, TraceFlags.IntersectEverything).HitPosition, Game.LocalPlayer.Character.Heading);
//shadowBarrier = new Rage.Object(barrierObjectNames[barrierList.Index], TracePlayerView(15, TraceFlags.IntersectEverything).HitPosition, rotateBarrier.Index); shadowBarrier = new Rage.Object(Settings.barrierValues[barrierList.Index], TracePlayerView(15, TraceFlags.IntersectEverything).HitPosition, rotateBarrier.Value);
Rage.Native.NativeFunction.Natives.PLACE_OBJECT_ON_GROUND_PROPERLY(shadowBarrier); Rage.Native.NativeFunction.Natives.PLACE_OBJECT_ON_GROUND_PROPERLY(shadowBarrier);
shadowBarrier.IsGravityDisabled = true; shadowBarrier.IsGravityDisabled = true;
shadowBarrier.IsCollisionEnabled = false; shadowBarrier.IsCollisionEnabled = false;
@ -85,9 +85,9 @@ namespace SceneManager
private static void UpdateShadowBarrierPosition() private static void UpdateShadowBarrierPosition()
{ {
DisableBarrierMenuOptionsIfShadowConeTooFar(); DisableBarrierMenuOptionsIfShadowConeTooFar();
shadowBarrier.Position = TracePlayerView(SettingsMenu.barrierPlacementDistance.Value, TraceFlags.IntersectEverything).HitPosition; //shadowBarrier.Position = TracePlayerView(SettingsMenu.barrierPlacementDistance.Value, TraceFlags.IntersectWorld).HitPosition;
Rage.Native.NativeFunction.Natives.PLACE_OBJECT_ON_GROUND_PROPERLY(shadowBarrier); //Rage.Native.NativeFunction.Natives.PLACE_OBJECT_ON_GROUND_PROPERLY(shadowBarrier);
shadowBarrier.Heading = rotateBarrier.Value; shadowBarrier.SetPositionWithSnap(TracePlayerView(SettingsMenu.barrierPlacementDistance.Value, TraceFlags.IntersectEverything).HitPosition);
void DisableBarrierMenuOptionsIfShadowConeTooFar() void DisableBarrierMenuOptionsIfShadowConeTooFar()
{ {
@ -127,7 +127,7 @@ namespace SceneManager
if (scrollerItem == rotateBarrier) if (scrollerItem == rotateBarrier)
{ {
shadowBarrier.Heading = rotateBarrier.Index; shadowBarrier.Heading = rotateBarrier.Value;
} }
} }
@ -155,11 +155,15 @@ namespace SceneManager
if (selectedItem == resetBarriers) if (selectedItem == resetBarriers)
{ {
foreach(Barrier barrier in barriers.Where(b => b.GetBarrier()?.Model.Name != "0xa2c44e80")) // 0xa2c44e80 is the model name of the spawned flare var currentBarriers = barriers.Where(b => b.Object?.Model.Name != "0xa2c44e80").ToList();
foreach(Barrier barrier in currentBarriers)
{ {
barrier.GetBarrier().Position = barrier.GetPosition(); var newBarrier = new Rage.Object(barrier.Object.Model, barrier.Position, barrier.Rotation);
barrier.GetBarrier().Heading = barrier.GetRotation(); barriers.Add(new Barrier(newBarrier, newBarrier.Position, newBarrier.Heading));
barrier.Object.Delete();
barriers.Remove(barrier);
} }
currentBarriers.Clear();
} }
} }
@ -180,18 +184,18 @@ namespace SceneManager
switch (removeBarrierOptions.Index) switch (removeBarrierOptions.Index)
{ {
case 0: case 0:
barriers[barriers.Count - 1].GetBarrier().Delete(); barriers[barriers.Count - 1].Object.Delete();
barriers.RemoveAt(barriers.Count - 1); barriers.RemoveAt(barriers.Count - 1);
break; break;
case 1: case 1:
barriers = barriers.OrderBy(c => c.DistanceTo(Game.LocalPlayer.Character)).ToList(); barriers = barriers.OrderBy(b => b.Object.DistanceTo2D(Game.LocalPlayer.Character)).ToList();
barriers[0].GetBarrier().Delete(); barriers[0].Object.Delete();
barriers.RemoveAt(0); barriers.RemoveAt(0);
break; break;
case 2: case 2:
foreach (Barrier b in barriers.Where(b => b.GetBarrier())) foreach (Barrier b in barriers.Where(b => b.Object))
{ {
b.GetBarrier().Delete(); b.Object.Delete();
} }
if (barriers.Count > 0) if (barriers.Count > 0)
{ {
@ -251,7 +255,8 @@ namespace SceneManager
{ {
Vector3 direction = GetPlayerLookingDirection(out start); Vector3 direction = GetPlayerLookingDirection(out start);
end = start + (maxTraceDistance * direction); end = start + (maxTraceDistance * direction);
return World.TraceLine(start, end, flags); 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.IntersectEverything) => TracePlayerView(out Vector3 v1, out Vector3 v2, maxTraceDistance, flags); internal static HitResult TracePlayerView(float maxTraceDistance = 30f, TraceFlags flags = TraceFlags.IntersectEverything) => TracePlayerView(out Vector3 v1, out Vector3 v2, maxTraceDistance, flags);