mirror of
https://github.com/drewcassidy/KSP-Conformal-Decals.git
synced 2024-09-01 18:23:54 +00:00
Add flag selection to flag decals
• Add flag selection code blatantly stolen from WBDecals • Fix attachment of symmetrically attached decals
This commit is contained in:
parent
e42ff52fb5
commit
a4c46b94d2
Binary file not shown.
@ -324,7 +324,7 @@ namespace ConformalDecals {
|
||||
}
|
||||
|
||||
protected void OnEditorEvent(ConstructionEventType eventType, Part eventPart) {
|
||||
if (eventPart != this.part) return;
|
||||
if (this.part != eventPart && !part.symmetryCounterparts.Contains(eventPart)) return;
|
||||
switch (eventType) {
|
||||
case ConstructionEventType.PartAttached:
|
||||
OnAttach();
|
||||
|
@ -1,45 +1,109 @@
|
||||
using ConformalDecals.Util;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ConformalDecals {
|
||||
public class ModuleConformalFlag : ModuleConformalDecal {
|
||||
private const string DefaultFlag = "Squad/Flags/default";
|
||||
|
||||
[KSPField(isPersistant = true)] public string flagUrl = DefaultFlag;
|
||||
|
||||
[KSPField(isPersistant = true)] public bool useCustomFlag;
|
||||
|
||||
public string MissionFlagUrl {
|
||||
get {
|
||||
if (HighLogic.LoadedSceneIsEditor) {
|
||||
return string.IsNullOrEmpty(EditorLogic.FlagURL) ? HighLogic.CurrentGame.flagURL : EditorLogic.FlagURL;
|
||||
}
|
||||
|
||||
if (HighLogic.LoadedSceneIsFlight) {
|
||||
return string.IsNullOrEmpty(part.flagURL) ? HighLogic.CurrentGame.flagURL : part.flagURL;
|
||||
}
|
||||
|
||||
return DefaultFlag;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnLoad(ConfigNode node) {
|
||||
base.OnLoad(node);
|
||||
|
||||
UpdateFlag(GetDefaultFlag());
|
||||
if (useCustomFlag) {
|
||||
SetFlag(flagUrl);
|
||||
}
|
||||
else {
|
||||
SetFlag(MissionFlagUrl);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnStart(StartState state) {
|
||||
base.OnStart(state);
|
||||
|
||||
if (HighLogic.LoadedSceneIsGame) {
|
||||
GameEvents.onMissionFlagSelect.Add(UpdateFlag);
|
||||
GameEvents.onMissionFlagSelect.Add(OnEditorFlagSelected);
|
||||
}
|
||||
|
||||
UpdateFlag(GetDefaultFlag());
|
||||
if (HighLogic.LoadedSceneIsEditor) {
|
||||
Events[nameof(ResetFlag)].guiActiveEditor = useCustomFlag;
|
||||
}
|
||||
|
||||
if (useCustomFlag) {
|
||||
SetFlag(flagUrl);
|
||||
}
|
||||
else {
|
||||
SetFlag(MissionFlagUrl);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDestroy() {
|
||||
GameEvents.onMissionFlagSelect.Remove(UpdateFlag);
|
||||
GameEvents.onMissionFlagSelect.Remove(SetFlag);
|
||||
base.OnDestroy();
|
||||
}
|
||||
|
||||
private string GetDefaultFlag() {
|
||||
if (HighLogic.LoadedSceneIsGame) {
|
||||
return EditorLogic.FlagURL != string.Empty ? EditorLogic.FlagURL : HighLogic.CurrentGame.flagURL;
|
||||
}
|
||||
else {
|
||||
return DefaultFlag;
|
||||
[KSPEvent(guiActive = false, guiActiveEditor = true, guiName = "Select Flag")]
|
||||
public void SelectFlag() {
|
||||
var flagBrowser = (Instantiate((Object) (new FlagBrowserGUIButton(null, null, null, null)).FlagBrowserPrefab) as GameObject).GetComponent<FlagBrowser>();
|
||||
flagBrowser.OnFlagSelected = OnCustomFlagSelected;
|
||||
}
|
||||
|
||||
[KSPEvent(guiActive = false, guiActiveEditor = true, guiName = "Reset Flag")]
|
||||
public void ResetFlag() {
|
||||
SetFlag(MissionFlagUrl);
|
||||
SetFlagSymmetryCounterparts(MissionFlagUrl);
|
||||
|
||||
useCustomFlag = false;
|
||||
Events[nameof(ResetFlag)].guiActiveEditor = false;
|
||||
}
|
||||
|
||||
private void OnCustomFlagSelected(FlagBrowser.FlagEntry newFlagEntry) {
|
||||
SetFlag(newFlagEntry.textureInfo.name);
|
||||
SetFlagSymmetryCounterparts(newFlagEntry.textureInfo.name);
|
||||
|
||||
useCustomFlag = true;
|
||||
Events[nameof(ResetFlag)].guiActiveEditor = true;
|
||||
}
|
||||
|
||||
private void OnEditorFlagSelected(string newFlagUrl) {
|
||||
if (useCustomFlag) {
|
||||
SetFlag(newFlagUrl);
|
||||
SetFlagSymmetryCounterparts(newFlagUrl);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateFlag(string flagUrl) {
|
||||
this.Log($"Loading flag texture '{flagUrl}'.");
|
||||
private void SetFlag(string newFlagUrl) {
|
||||
this.Log($"Loading flag texture '{newFlagUrl}'.");
|
||||
|
||||
materialProperties.AddOrGetTextureProperty("_Decal", true).TextureUrl = flagUrl;
|
||||
flagUrl = newFlagUrl;
|
||||
materialProperties.AddOrGetTextureProperty("_Decal", true).TextureUrl = newFlagUrl;
|
||||
|
||||
UpdateMaterials();
|
||||
}
|
||||
|
||||
private void SetFlagSymmetryCounterparts(string newFlagUrl) {
|
||||
foreach (var counterpart in part.symmetryCounterparts) {
|
||||
var decal = counterpart.GetComponent<ModuleConformalFlag>();
|
||||
|
||||
decal.SetFlag(newFlagUrl);
|
||||
decal.useCustomFlag = useCustomFlag;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user