mirror of
https://github.com/thegeneralist01/Scene-Manager-DevRepo
synced 2026-01-12 08:00:30 +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:
parent
ad2ef2c4a8
commit
1aa94a0d50
1 changed files with 20 additions and 15 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue