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:
parent
0e79fd8be8
commit
93951b3e28
4 changed files with 70 additions and 84 deletions
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,6 @@ namespace SceneManager
|
||||||
menuItem.HighlightedBackColor = menuItem.ForeColor;
|
menuItem.HighlightedBackColor = menuItem.ForeColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static bool AreMenusClosed()
|
internal static bool AreMenusClosed()
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue