Global override for selectability and kill part on detach

pull/19/head
Andrew Cassidy 4 years ago
parent e10ea7af5a
commit 0bdb712839
No known key found for this signature in database
GPG Key ID: 963017B38FD477A1

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cb10644075b5b826620fe4cf86eb78d71ad1ae3ab7a30527b5b67b329c3d978b
size 41472
oid sha256:9b4405eaa6d2efc358a8364e1cc9ea3eba73c42f6a3d50da1433447ca989068a
size 41984

@ -1,4 +1,7 @@
CONFORMALDECALS {
decalLayer = 31
selectableInFlight = false
SHADERBLACKLIST {
shader = DepthMask
shader = KSP/Alpha/Cutoff

@ -6,11 +6,15 @@ namespace ConformalDecals {
public static class DecalConfig {
private static Texture2D _blankNormal;
private static List<string> _shaderBlacklist;
private static int _decalLayer = 31;
private static int _decalLayer = 31;
private static bool _selectableInFlight = false;
public static Texture2D BlankNormal => _blankNormal;
public static int DecalLayer => _decalLayer;
public static bool SelectableInFlight => _selectableInFlight;
public static bool IsBlacklisted(Shader shader) {
return IsBlacklisted(shader.name);
}
@ -26,6 +30,7 @@ namespace ConformalDecals {
}
ParseUtil.ParseIntIndirect(ref _decalLayer, node, "decalLayer");
ParseUtil.ParseBoolIndirect(ref _selectableInFlight, node, "selectableInFlight");
}
}

@ -237,13 +237,7 @@ namespace ConformalDecals {
public override void OnStart(StartState state) {
this.Log("Starting module");
// handle tweakables
if (HighLogic.LoadedSceneIsEditor) {
GameEvents.onEditorPartEvent.Add(OnEditorEvent);
GameEvents.onVariantApplied.Add(OnVariantApplied);
UpdateTweakables();
}
materialProperties.RenderQueue = DecalQueue;
@ -261,19 +255,39 @@ namespace ConformalDecals {
}
}
// handle tweakables
if (HighLogic.LoadedSceneIsEditor) {
GameEvents.onEditorPartEvent.Add(OnEditorEvent);
GameEvents.onVariantApplied.Add(OnVariantApplied);
UpdateTweakables();
}
// handle flight events
if (HighLogic.LoadedSceneIsFlight) {
GameEvents.onPartWillDie.Add(OnPartWillDie);
Part.layerMask |= 1 << DecalConfig.DecalLayer;
decalColliderTransform.gameObject.layer = DecalConfig.DecalLayer;
if (!selectableInFlight) {
if (!selectableInFlight || !DecalConfig.SelectableInFlight) {
decalColliderTransform.GetComponent<Collider>().enabled = false;
}
if (part.parent == null) part.explode();
}
}
public virtual void OnDestroy() {
// remove GameEvents
GameEvents.onEditorPartEvent.Remove(OnEditorEvent);
GameEvents.onVariantApplied.Remove(OnVariantApplied);
if (HighLogic.LoadedSceneIsEditor) {
GameEvents.onEditorPartEvent.Remove(OnEditorEvent);
GameEvents.onVariantApplied.Remove(OnVariantApplied);
}
if (HighLogic.LoadedSceneIsFlight) {
GameEvents.onPartWillDie.Remove(OnPartWillDie);
}
// remove from preCull delegate
Camera.onPreCull -= Render;
@ -332,6 +346,13 @@ namespace ConformalDecals {
}
}
protected void OnPartWillDie(Part willDie) {
if (willDie == part.parent) {
this.Log("Parent part about to be destroyed! Killing decal part.");
part.Die();
}
}
protected void OnAttach() {
if (part.parent == null) {
this.LogError("Attach function called but part has no parent!");

Loading…
Cancel
Save