Get flag module working

This commit is contained in:
Andrew Cassidy 2020-06-02 22:45:48 -07:00
parent 33873cacc0
commit 00908c9e13
No known key found for this signature in database
GPG Key ID: 963017B38FD477A1
6 changed files with 122 additions and 49 deletions

View File

@ -43,7 +43,7 @@ PART
MODULE MODULE
{ {
name = ModuleConformalDecal name = ModuleConformalDecalGeneric
decalFront = Decal-Front decalFront = Decal-Front
decalBack = Decal-Back decalBack = Decal-Back
@ -61,7 +61,7 @@ PART
MODULE { MODULE {
IDENTIFIER { IDENTIFIER {
name = ModuleConformalDecal name = ModuleConformalDecalGeneric
} }
DATA { DATA {
decalShader = ConformalDecals/Feature/Bumped decalShader = ConformalDecals/Feature/Bumped
@ -87,7 +87,7 @@ PART
MODULE { MODULE {
IDENTIFIER { IDENTIFIER {
name = ModuleConformalDecal name = ModuleConformalDecalGeneric
} }
DATA { DATA {
decalShader = ConformalDecals/Paint/Diffuse decalShader = ConformalDecals/Paint/Diffuse

View File

@ -0,0 +1,53 @@
// ReStock+ 1.2.0
// 0.625m Radial Attachment Node
PART
{
name = decal-flag
module = Part
author = Andrew Cassidy
MODEL
{
model = ConformalDecals/Assets/decal-blank
scale = 1.0, 1.0, 1.0
}
scale = 1
rescaleFactor = 1
// Attachment
attachRules = 1,1,0,0,1
node_attach = 0.0, 0.0, 0.1, 0.0, 0.0, -1.0
// Tech
TechRequired = specializedConstruction
entryCost = 600
// Info
cost = 75
category = Structural
title = Blank Flag
manufacturer = #autoLOC_501648 // Maxo Construction Toys
description = foo
tags = foo
bulkheadProfiles = srf
// Parameters
mass = 0.015
dragModelType = default
maximum_drag = 0.1
minimum_drag = 0.05
angularDrag = 1.0
crashTolerance = 10
maxTemp = 2000
breakingForce = 350
breakingTorque = 150
MODULE
{
name = ModuleConformalDecalFlag
decalFront = Decal-Front
decalBack = Decal-Back
useBaseNormal = true
}
}

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:ad647a749e7c04e13234735a12958e628cae94e3275dcac1ab8117652a1ecefa oid sha256:86aa2ce6f0d2889caae9f3d9ca47a047964ca7d1ed86e30ec6150569bf6455ff
size 29696 size 30208

View File

@ -60,12 +60,6 @@ namespace ConformalDecals {
private Bounds _decalBounds; private Bounds _decalBounds;
private Vector2 _backTextureBaseScale; private Vector2 _backTextureBaseScale;
public ModuleConformalDecalBase() {
decalBackTransform = null;
decalModelTransform = null;
decalProjectorTransform = null;
}
private int DecalQueue { private int DecalQueue {
get { get {
_decalQueueCounter++; _decalQueueCounter++;
@ -83,36 +77,6 @@ namespace ConformalDecals {
if (HighLogic.LoadedSceneIsEditor) { if (HighLogic.LoadedSceneIsEditor) {
UpdateTweakables(); UpdateTweakables();
} }
if (materialProperties == null) {
// materialProperties is null, so make a new one
materialProperties = ScriptableObject.CreateInstance<MaterialPropertyCollection>();
materialProperties.Initialize();
}
else {
// materialProperties already exists, so make a copy
materialProperties = ScriptableObject.Instantiate(materialProperties);
}
// set shader
materialProperties.SetShader(decalShader);
// get back material if necessary
if (updateBackScale) {
this.Log("Getting material and base scale for back material");
var backRenderer = decalBackTransform.GetComponent<MeshRenderer>();
if (backRenderer == null) {
this.LogError($"Specified decalBack transform {decalBack} has no renderer attached! Setting updateBackScale to false.");
updateBackScale = false;
}
else if ((backMaterial = backRenderer.material) == null) {
this.LogError($"Specified decalBack transform {decalBack} has a renderer but no material! Setting updateBackScale to false.");
updateBackScale = false;
}
else {
_backTextureBaseScale = backMaterial.GetTextureScale(PropertyIDs._MainTex);
}
}
// find front transform // find front transform
decalFrontTransform = part.FindModelTransform(decalFront); decalFrontTransform = part.FindModelTransform(decalFront);
@ -148,6 +112,26 @@ namespace ConformalDecals {
decalProjectorTransform = part.FindModelTransform(decalProjector); decalProjectorTransform = part.FindModelTransform(decalProjector);
if (decalProjectorTransform == null) throw new FormatException($"Could not find decalProjector transform: '{decalProjector}'."); if (decalProjectorTransform == null) throw new FormatException($"Could not find decalProjector transform: '{decalProjector}'.");
} }
// get back material if necessary
if (updateBackScale) {
this.Log("Getting material and base scale for back material");
var backRenderer = decalBackTransform.GetComponent<MeshRenderer>();
if (backRenderer == null) {
this.LogError($"Specified decalBack transform {decalBack} has no renderer attached! Setting updateBackScale to false.");
updateBackScale = false;
}
else {
backMaterial = backRenderer.material;
if (backMaterial == null) {
this.LogError($"Specified decalBack transform {decalBack} has a renderer but no material! Setting updateBackScale to false.");
updateBackScale = false;
}
else {
_backTextureBaseScale = backMaterial.GetTextureScale(PropertyIDs._MainTex);
}
}
}
// update EVERYTHING if currently attached // update EVERYTHING if currently attached
if (_isAttached) { if (_isAttached) {

View File

@ -5,15 +5,24 @@ using UnityEngine;
namespace ConformalDecals { namespace ConformalDecals {
public class ModuleConformalDecalFlag : ModuleConformalDecalBase { public class ModuleConformalDecalFlag : ModuleConformalDecalBase {
[KSPField] public MaterialTextureProperty flagTextureProperty;
[KSPField]
private MaterialTextureProperty _flagTextureProperty;
public override void OnLoad(ConfigNode node) { public override void OnLoad(ConfigNode node) {
base.OnLoad(node);
_flagTextureProperty = new MaterialTextureProperty("_MainTex", Texture2D.whiteTexture); if (materialProperties == null) {
materialProperties.AddProperty(_flagTextureProperty); // materialProperties is null, so make a new one
materialProperties = ScriptableObject.CreateInstance<MaterialPropertyCollection>();
materialProperties.Initialize();
}
else {
// materialProperties already exists, so make a copy
materialProperties = ScriptableObject.Instantiate(materialProperties);
}
// set shader
materialProperties.SetShader(decalShader);
base.OnLoad(node);
} }
public override void OnStart(StartState state) { public override void OnStart(StartState state) {
@ -24,7 +33,21 @@ namespace ConformalDecals {
} }
private void UpdateFlag(string flagUrl) { private void UpdateFlag(string flagUrl) {
_flagTextureProperty.texture = GameDatabase.Instance.GetTexture(flagUrl, false); this.Log($"Loading flag texture '{flagUrl}'.");
var flagTexture = GameDatabase.Instance.GetTexture(flagUrl, false);
if (flagTexture == null) {
this.LogWarning($"Unable to find flag texture '{flagUrl}'.");
return;
}
if (flagTextureProperty == null) {
this.Log("Initializing flag property");
flagTextureProperty = new MaterialTextureProperty("_Decal", flagTexture, isMain: true);
materialProperties.AddProperty(flagTextureProperty);
}
else {
flagTextureProperty.texture = flagTexture;
}
materialProperties.UpdateMaterials(); materialProperties.UpdateMaterials();
} }

View File

@ -5,8 +5,19 @@ using UnityEngine;
namespace ConformalDecals { namespace ConformalDecals {
public class ModuleConformalDecalGeneric : ModuleConformalDecalBase { public class ModuleConformalDecalGeneric : ModuleConformalDecalBase {
public override void OnLoad(ConfigNode node) { public override void OnLoad(ConfigNode node) {
base.OnLoad(node);
if (materialProperties == null) {
// materialProperties is null, so make a new one
materialProperties = ScriptableObject.CreateInstance<MaterialPropertyCollection>();
materialProperties.Initialize();
}
else {
// materialProperties already exists, so make a copy
materialProperties = ScriptableObject.Instantiate(materialProperties);
}
// set shader
materialProperties.SetShader(decalShader);
// add texture nodes // add texture nodes
foreach (var textureNode in node.GetNodes("TEXTURE")) { foreach (var textureNode in node.GetNodes("TEXTURE")) {
materialProperties.AddProperty(new MaterialTextureProperty(textureNode)); materialProperties.AddProperty(new MaterialTextureProperty(textureNode));
@ -21,6 +32,8 @@ namespace ConformalDecals {
foreach (var colorNode in node.GetNodes("COLOR")) { foreach (var colorNode in node.GetNodes("COLOR")) {
materialProperties.AddProperty(new MaterialColorProperty(colorNode)); materialProperties.AddProperty(new MaterialColorProperty(colorNode));
} }
base.OnLoad(node);
} }
} }
} }