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

Added Barrier object

This commit is contained in:
Rich Dunne 2021-05-01 13:11:33 -06:00
parent 0e79fd8be8
commit 93951b3e28
4 changed files with 70 additions and 84 deletions

View file

@ -175,9 +175,9 @@ namespace SceneManager.Menus
internal static void Cleanup() internal static void Cleanup()
{ {
foreach (Barrier barrier in BarrierManager.Barriers.Where(x => x.Object)) foreach (Barrier barrier in BarrierManager.Barriers)
{ {
barrier.Object.Delete(); barrier.Delete();
} }
if (BarrierManager.PlaceholderBarrier) if (BarrierManager.PlaceholderBarrier)
{ {

View file

@ -56,7 +56,6 @@ namespace SceneManager
menuItem.HighlightedBackColor = menuItem.ForeColor; menuItem.HighlightedBackColor = menuItem.ForeColor;
} }
} }
} }
internal static bool AreMenusClosed() internal static bool AreMenusClosed()

View file

@ -1,26 +1,71 @@
using Rage; using Rage;
using SceneManager.Menus;
using SceneManager.Utils;
using System.Xml.Serialization; using System.Xml.Serialization;
namespace SceneManager.Objects namespace SceneManager.Objects
{ {
[XmlRoot(ElementName = "Barrier", Namespace = "")] [XmlRoot(ElementName = "Barrier", Namespace = "")]
public class Barrier // Change this and properties to Public for import/export public class Barrier : Object // Change this and properties to Public for import/export
{ {
public Object Object { get; } public Vector3 SpawnPosition { get; }
public Model @Model{ get; } public float SpawnHeading { get; }
public Vector3 Position { get; } new public bool Invincible { get; }
public float Rotation { get; }
public bool Invincible { get; }
public bool Immobile { get; } public bool Immobile { get; }
public bool LightsEnabled { get; }
public int TextureVariation { get; }
internal Barrier(Object barrier, Vector3 barrierPosition, float barrierRotation, bool invincible, bool immobile) internal Barrier(Object barrier, Vector3 barrierPosition, float barrierRotation, bool invincible, bool immobile, int textureVariation = 0, bool lightsEnabled = false) : base(barrier.Model, barrierPosition, barrierRotation)
{ {
Object = barrier; SpawnPosition = barrierPosition;
@Model = barrier.Model; SpawnHeading = barrierRotation;
Position = barrierPosition;
Rotation = barrierRotation;
Invincible = invincible; Invincible = invincible;
IsInvincible = invincible;
Immobile = immobile; Immobile = immobile;
TextureVariation = textureVariation;
LightsEnabled = lightsEnabled;
if(BarrierManager.PlaceholderBarrier)
{
SetPositionWithSnap(BarrierManager.PlaceholderBarrier.Position);
}
Rage.Native.NativeFunction.Natives.SET_ENTITY_DYNAMIC(this, true);
if (Invincible)
{
Rage.Native.NativeFunction.Natives.SET_DISABLE_FRAG_DAMAGE(this, true);
if (Model.Name != "prop_barrier_wat_03a")
{
Rage.Native.NativeFunction.Natives.SET_DISABLE_BREAKING(this, true);
}
}
IsPositionFrozen = Immobile;
if (Settings.EnableAdvancedBarricadeOptions)
{
SetAdvancedOptions();
}
}
private void SetAdvancedOptions()
{
Rage.Native.NativeFunction.Natives.x971DA0055324D033(this, TextureVariation);
if (LightsEnabled)
{
Rage.Native.NativeFunction.Natives.SET_ENTITY_LIGHTS(this, false);
}
else
{
Rage.Native.NativeFunction.Natives.SET_ENTITY_LIGHTS(this, true);
}
//Rage.Native.NativeFunction.Natives.SET_ENTITY_TRAFFICLIGHT_OVERRIDE(barrier, setBarrierTrafficLight.Index);
IsPositionFrozen = true;
GameFiber.Sleep(50);
if (this && !Immobile)
{
IsPositionFrozen = false;
}
} }
} }
} }

View file

@ -21,7 +21,7 @@ namespace SceneManager.Utils
var barrierKey = Settings.Barriers.Where(x => x.Key == BarrierMenu.BarrierList.SelectedItem).FirstOrDefault().Key; var barrierKey = Settings.Barriers.Where(x => x.Key == BarrierMenu.BarrierList.SelectedItem).FirstOrDefault().Key;
var barrierValue = Settings.Barriers[barrierKey].Name; var barrierValue = Settings.Barriers[barrierKey].Name;
PlaceholderBarrier = new Rage.Object(barrierValue, UserInput.GetMousePositionForBarrier, BarrierMenu.RotateBarrier.Value); PlaceholderBarrier = new Object(barrierValue, UserInput.GetMousePositionForBarrier, BarrierMenu.RotateBarrier.Value);
if (!PlaceholderBarrier) if (!PlaceholderBarrier)
{ {
BarrierMenu.Menu.Close(); BarrierMenu.Menu.Close();
@ -39,7 +39,7 @@ namespace SceneManager.Utils
// Start with lights off for Parks's objects // Start with lights off for Parks's objects
if (Settings.EnableAdvancedBarricadeOptions) if (Settings.EnableAdvancedBarricadeOptions)
{ {
Rage.Native.NativeFunction.Natives.x971DA0055324D033(PlaceholderBarrier, BarrierMenu.BarrierTexture.Value); Rage.Native.NativeFunction.Natives.x971DA0055324D033(PlaceholderBarrier, BarrierMenu.BarrierTexture.Value); // _SET_OBJECT_TEXTURE_VARIATION
SetBarrierLights(); SetBarrierLights();
} }
} }
@ -136,47 +136,8 @@ namespace SceneManager.Utils
} }
else else
{ {
var barrier = new Rage.Object(PlaceholderBarrier.Model, PlaceholderBarrier.Position, BarrierMenu.RotateBarrier.Value); var barrier = new Barrier(PlaceholderBarrier, PlaceholderBarrier.Position, BarrierMenu.RotateBarrier.Value, BarrierMenu.Invincible.Checked, BarrierMenu.Immobile.Checked, BarrierMenu.BarrierTexture.Value, BarrierMenu.SetBarrierLights.Checked);
barrier.SetPositionWithSnap(PlaceholderBarrier.Position); Barriers.Add(barrier);
Rage.Native.NativeFunction.Natives.SET_ENTITY_DYNAMIC(barrier, true);
if (BarrierMenu.Invincible.Checked)
{
Rage.Native.NativeFunction.Natives.SET_DISABLE_FRAG_DAMAGE(barrier, true);
if (barrier.Model.Name != "prop_barrier_wat_03a")
{
Rage.Native.NativeFunction.Natives.SET_DISABLE_BREAKING(barrier, true);
}
}
if (BarrierMenu.Immobile.Checked)
{
barrier.IsPositionFrozen = true;
}
else
{
barrier.IsPositionFrozen = false;
}
if (Settings.EnableAdvancedBarricadeOptions)
{
Rage.Native.NativeFunction.Natives.x971DA0055324D033(barrier, BarrierMenu.BarrierTexture.Value);
if (BarrierMenu.SetBarrierLights.Checked)
{
Rage.Native.NativeFunction.Natives.SET_ENTITY_LIGHTS(barrier, false);
}
else
{
Rage.Native.NativeFunction.Natives.SET_ENTITY_LIGHTS(barrier, true);
}
//Rage.Native.NativeFunction.Natives.SET_ENTITY_TRAFFICLIGHT_OVERRIDE(barrier, setBarrierTrafficLight.Index);
barrier.IsPositionFrozen = true;
GameFiber.Sleep(50);
if (barrier && !BarrierMenu.Immobile.Checked)
{
barrier.IsPositionFrozen = false;
}
}
Barriers.Add(new Barrier(barrier, barrier.Position, barrier.Heading, BarrierMenu.Invincible.Checked, BarrierMenu.Immobile.Checked));
BarrierMenu.RemoveBarrierOptions.Enabled = true; BarrierMenu.RemoveBarrierOptions.Enabled = true;
BarrierMenu.ResetBarriers.Enabled = true; BarrierMenu.ResetBarriers.Enabled = true;
@ -210,21 +171,21 @@ namespace SceneManager.Utils
switch (removeBarrierOptionsIndex) switch (removeBarrierOptionsIndex)
{ {
case 0: case 0:
Barriers[Barriers.Count - 1].Object.Delete(); Barriers[Barriers.Count - 1].Delete();
Barriers.RemoveAt(Barriers.Count - 1); Barriers.RemoveAt(Barriers.Count - 1);
break; break;
case 1: case 1:
var nearestBarrier = Barriers.OrderBy(b => b.Object.DistanceTo2D(Game.LocalPlayer.Character)).FirstOrDefault(); var nearestBarrier = Barriers.OrderBy(b => b.DistanceTo2D(Game.LocalPlayer.Character)).FirstOrDefault();
if (nearestBarrier != null) if (nearestBarrier != null)
{ {
nearestBarrier.Object.Delete(); nearestBarrier.Delete();
Barriers.Remove(nearestBarrier); Barriers.Remove(nearestBarrier);
} }
break; break;
case 2: case 2:
foreach (Barrier b in Barriers.Where(b => b.Object)) foreach (Barrier b in Barriers)
{ {
b.Object.Delete(); b.Delete();
} }
if (Barriers.Count > 0) if (Barriers.Count > 0)
{ {
@ -244,30 +205,11 @@ namespace SceneManager.Utils
var currentBarriers = Barriers.Where(b => b.Model.Name != "0xa2c44e80").ToList(); // 0xa2c44e80 is the flare weapon hash var currentBarriers = Barriers.Where(b => b.Model.Name != "0xa2c44e80").ToList(); // 0xa2c44e80 is the flare weapon hash
foreach (Barrier barrier in currentBarriers) foreach (Barrier barrier in currentBarriers)
{ {
var newBarrier = new Rage.Object(barrier.Model, barrier.Position, barrier.Rotation); Barriers.Add(new Barrier(barrier, barrier.SpawnPosition, barrier.SpawnHeading, barrier.Invincible, barrier.Immobile, barrier.TextureVariation, barrier.LightsEnabled));
newBarrier.SetPositionWithSnap(barrier.Position);
Rage.Native.NativeFunction.Natives.SET_ENTITY_DYNAMIC(newBarrier, true);
newBarrier.IsPositionFrozen = barrier.Immobile;
if (barrier.Invincible)
{
Rage.Native.NativeFunction.Natives.SET_DISABLE_FRAG_DAMAGE(newBarrier, true);
if (newBarrier.Model.Name != "prop_barrier_wat_03a")
{
Rage.Native.NativeFunction.Natives.SET_DISABLE_BREAKING(newBarrier, true);
}
}
//Rage.Native.NativeFunction.Natives.SET_ENTITY_TRAFFICLIGHT_OVERRIDE(newBarrier, setBarrierTrafficLight.Index);
newBarrier.IsPositionFrozen = true;
GameFiber.Sleep(50);
if (newBarrier && !barrier.Immobile)
{
newBarrier.IsPositionFrozen = false;
}
Barriers.Add(new Barrier(newBarrier, newBarrier.Position, newBarrier.Heading, barrier.Invincible, barrier.Immobile));
if (barrier.Object) if (barrier)
{ {
barrier.Object.Delete(); barrier.Delete();
} }
Barriers.Remove(barrier); Barriers.Remove(barrier);
} }