Clean up things broken by the merge

And refactor flag module yet again
feature-better-tweakables
Andrew Cassidy 2 years ago
parent 7a909c18bc
commit 39555d92d1

@ -1,4 +1,4 @@
<?xml version="1.0" ?><Project Sdk="Microsoft.NET.Sdk">
<?xml version="1.0" encoding="utf-8"?><Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<LangVersion>8</LangVersion>
@ -36,22 +36,22 @@
</ItemGroup>
<ItemGroup>
<Compile Remove="dlls\**"/>
<Compile Remove="dlls\**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Remove="dlls\**"/>
<EmbeddedResource Remove="dlls\**" />
</ItemGroup>
<ItemGroup>
<None Remove="dlls\**"/>
<None Remove="dlls\**" />
</ItemGroup>
<ItemGroup>
<None Include="..\.editorconfig" />
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="/bin/cp -v '$(OutDir)ConformalDecals.dll' '$(SolutionDir)../GameData/ConformalDecals/Plugins/ConformalDecals.dll'" IgnoreExitCode="true"/>
<Exec Command="/bin/cp -v '$(OutDir)ConformalDecals.dll' '$(SolutionDir)../GameData/ConformalDecals/Plugins/ConformalDecals.dll'" IgnoreExitCode="true" />
<!--Fuck you MSBuild stop trying to run CMD.exe on macOS-->
</Target>

@ -27,6 +27,7 @@ namespace ConformalDecals.MaterialProperties {
public string TextureUrl {
get => _textureUrl;
set {
if (_textureUrl == value) return; // URL hasnt changed
_texture = LoadTexture(value, isNormal);
_textureUrl = value;
}

@ -441,14 +441,12 @@ namespace ConformalDecals {
}
}
// find all valid renderers
var renderers = part.parent.FindModelComponents<MeshRenderer>();
foreach (var renderer in renderers) {
// skip disabled renderers
if (renderer.gameObject.activeInHierarchy == false) continue;
// skip blacklisted shaders
if (DecalConfig.IsBlacklisted(renderer.material.shader)) continue;
/// Setup decal by calling update functions relevent for the current situation
protected virtual void SetupDecal() {
if (HighLogic.LoadedSceneIsEditor) {
// Update tweakables in editor mode
UpdateTweakables();
}
if (HighLogic.LoadedSceneIsGame) {
UpdateAll();

@ -1,5 +1,3 @@
using ConformalDecals.MaterialProperties;
using UniLinq;
using UnityEngine;
namespace ConformalDecals {
@ -10,8 +8,6 @@ namespace ConformalDecals {
[KSPField(isPersistant = true)] public bool useCustomFlag;
private MaterialTextureProperty _flagTextureProperty;
public string MissionFlagUrl {
get {
if (HighLogic.LoadedSceneIsEditor) {
@ -27,28 +23,16 @@ namespace ConformalDecals {
}
}
public override void OnLoad(ConfigNode node) {
base.OnLoad(node);
// Since OnLoad is called for all modules, we only need to update this module
// Updating symmetry counterparts would be redundent
UpdateFlag();
}
public override void OnStart(StartState state) {
base.OnStart(state);
if (HighLogic.LoadedSceneIsEditor) {
// Register flag change event
GameEvents.onMissionFlagSelect.Add(OnEditorFlagSelected);
// Register reset button event
Events[nameof(ResetFlag)].guiActiveEditor = useCustomFlag;
Events[nameof(ResetFlagButton)].guiActiveEditor = useCustomFlag;
}
// Since OnStart is called for all modules, we only need to update this module
// Updating symmetry counterparts would be redundent
UpdateFlag();
base.OnStart(state);
}
public override void OnDestroy() {
@ -56,92 +40,81 @@ namespace ConformalDecals {
// Unregister flag change event
GameEvents.onMissionFlagSelect.Remove(OnEditorFlagSelected);
}
base.OnDestroy();
}
[KSPEvent(guiActive = false, guiActiveEditor = true, guiName = "#LOC_ConformalDecals_gui-select-flag")]
public void SelectFlag() {
public void SelectFlagButton() {
// Button for selecting a flag
// This is a bit of a hack to bring up the stock flag selection menu
// When its done, it calls OnCustomFlagSelected()
// ReSharper disable once PossibleNullReferenceException
var flagBrowser = (Instantiate((Object) (new FlagBrowserGUIButton(null, null, null, null)).FlagBrowserPrefab) as GameObject).GetComponent<FlagBrowser>();
flagBrowser.OnFlagSelected = OnCustomFlagSelected;
}
[KSPEvent(guiActive = false, guiActiveEditor = true, guiName = "#LOC_ConformalDecals_gui-reset-flag")]
public void ResetFlag() {
public void ResetFlagButton() {
// we are no longer using a custom flag, so instead use the mission or agency flag
useCustomFlag = false;
flagUrl = "Mission";
UpdateFlag(true);
SetFlag("Mission", false, true);
// disable the reset button, since it no longer makes sense
Events[nameof(ResetFlag)].guiActiveEditor = false;
flagUrl = MissionFlagUrl;
useCustomFlag = false;
UpdateAll();
foreach (var decal in part.symmetryCounterparts.Select(o => o.GetComponent<ModuleConformalFlag>())) {
decal.Events[nameof(ResetFlag)].guiActiveEditor = false;
decal.flagUrl = flagUrl;
decal.useCustomFlag = false;
decal.UpdateAll();
}
Events[nameof(ResetFlagButton)].guiActiveEditor = false;
}
private void OnCustomFlagSelected(FlagBrowser.FlagEntry newFlagEntry) {
// Callback for when a flag is selected in the menu spawned by SelectFlag()
// we are now using a custom flag with the URL of the new flag entry
useCustomFlag = true;
flagUrl = newFlagEntry.textureInfo.name;
UpdateFlag(true);
SetFlag(newFlagEntry.textureInfo.name, true, true);
// make sure the reset button is now available
Events[nameof(ResetFlag)].guiActiveEditor = true;
flagUrl = newFlagEntry.textureInfo.name;
useCustomFlag = true;
UpdateAll();
Events[nameof(ResetFlagButton)].guiActiveEditor = true;
}
private void OnEditorFlagSelected(string newFlagUrl) {
// Callback for when a new mission flag is selected in the editor
// Since this callback is called for all modules, we only need to update this module
// Updating symmetry counterparts would be redundent
// if we are using the mission flag, update it. otherwise ignore the call
if (!useCustomFlag) {
flagUrl = newFlagUrl;
// Since this callback is called for all modules, we only need to update this module
// Updating symmetry counterparts would be redundent
UpdateFlag();
SetFlag(newFlagUrl, false, false);
}
}
// Update the displayed flag texture for this decal or optionally any symmetry counterparts
private void UpdateFlag(bool recursive = false) {
// get the decal material property for the decal texture
var textureProperty = materialProperties.AddOrGetTextureProperty("_Decal", true);
private void SetFlag(string newFlagUrl, bool isCustom, bool recursive) {
// Function to set the flag URL, the custom flag
if(useCustomFlag) {
// set the texture to the custom flag
textureProperty.TextureUrl = flagUrl;
}
else {
// set the texture to the mission flag
textureProperty.TextureUrl = MissionFlagUrl;
}
// Set values
flagUrl = newFlagUrl;
useCustomFlag = isCustom;
UpdateMaterials();
UpdateScale();
// Update material and projection
UpdateAll();
// Update symmetry counterparts if called to
if (recursive) {
// for each symmetry counterpart, copy this part's properties and update it in turn
foreach (var counterpart in part.symmetryCounterparts) {
var decal = counterpart.GetComponent<ModuleConformalFlag>();
decal.useCustomFlag = useCustomFlag;
decal.flagUrl = flagUrl;
decal.UpdateFlag();
decal.SetFlag(newFlagUrl, isCustom, false);
}
}
}
protected override void UpdateMaterials() {
// get the decal material property for the decal texture
var textureProperty = materialProperties.AddOrGetTextureProperty("_Decal", true);
if (useCustomFlag) { // set the texture to the custom flag
textureProperty.TextureUrl = flagUrl;
} else { // set the texture to the mission flag
textureProperty.TextureUrl = MissionFlagUrl;
}
base.UpdateMaterials();
}
}
}
}

@ -29,8 +29,7 @@ namespace ConformalDecals {
public void SetText() {
if (_textEntryController == null) {
_textEntryController = TextEntryController.Create(text, font, style, vertical, lineSpacing, charSpacing, lineSpacingRange, charSpacingRange, OnTextUpdate);
}
else {
} else {
_textEntryController.Close();
}
}
@ -47,8 +46,7 @@ namespace ConformalDecals {
public void SetFillColor() {
if (_fillColorPickerController == null) {
_fillColorPickerController = ColorPickerController.Create(fillColor, OnFillColorUpdate);
}
else {
} else {
_fillColorPickerController.Close();
}
}
@ -70,8 +68,7 @@ namespace ConformalDecals {
public void SetOutlineColor() {
if (_outlineColorPickerController == null) {
_outlineColorPickerController = ColorPickerController.Create(outlineColor, OnOutlineColorUpdate);
}
else {
} else {
_outlineColorPickerController.Close();
}
}
@ -234,8 +231,7 @@ namespace ConformalDecals {
string fontName = "";
if (ParseUtil.ParseStringIndirect(ref fontName, node, "fontName")) {
font = DecalConfig.GetFont(fontName);
}
else if (font == null) font = DecalConfig.GetFont("Calibri SDF");
} else if (font == null) font = DecalConfig.GetFont("Calibri SDF");
int styleInt = 0;
if (ParseUtil.ParseIntIndirect(ref styleInt, node, "style")) {
@ -247,28 +243,11 @@ namespace ConformalDecals {
}
protected override void SetupDecal() {
if (HighLogic.LoadedSceneIsEditor) {
// Update tweakables in editor mode
UpdateTweakables();
}
if (HighLogic.LoadedSceneIsGame) {
// For some reason text rendering fails on the first frame of a scene, so this is my workaround
StartCoroutine(UpdateTextLate());
}
else {
scale = defaultScale;
depth = defaultDepth;
opacity = defaultOpacity;
cutoff = defaultCutoff;
wear = defaultWear;
UpdateTextures();
UpdateMaterials();
UpdateProjection();
// QUEUE PART FOR ICON FIXING IN VAB
DecalIconFixer.QueuePart(part.name);
} else {
base.SetupDecal();
}
}
@ -281,7 +260,7 @@ namespace ConformalDecals {
// Render text
var newText = new DecalText(text, font, style, vertical, lineSpacing, charSpacing);
var output = TextRenderer.UpdateText(_currentText, newText);
// update the _currentText state variable
// this is the ONLY place this variable should be set! otherwise the current state is lost
_currentText = newText;
@ -320,4 +299,4 @@ namespace ConformalDecals {
base.UpdateTweakables();
}
}
}
}
Loading…
Cancel
Save