mirror of
https://github.com/drewcassidy/KSP-Conformal-Decals.git
synced 2024-09-01 18:23:54 +00:00
Get flag module working
This commit is contained in:
parent
6a5604911d
commit
6c20675a99
@ -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
|
||||||
|
53
Distribution/GameData/ConformalDecals/Parts/decal-flag.cfg
Normal file
53
Distribution/GameData/ConformalDecals/Parts/decal-flag.cfg
Normal 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
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
@ -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) {
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user