Compare commits

...

6 Commits

@ -0,0 +1,120 @@
name: Build and Release
on:
push:
pull_request:
types:
- opened
- edited
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Setup .NET Core SDK
uses: actions/setup-dotnet@v1.7.2
with:
dotnet-version: '6.0.x'
- name: Install Python Tools
run: |
python -m pip install --upgrade pip
python -m pip install -r Tools/requirements.txt
- name: Download Dependencies
run: |
mkdir -p DepthMask/dlls
mkdir -p GameData
mkdir -p GameData/DepthMask
wget --user drewcassidy --password ${{ secrets.PILE_OF_ROCKS_PASS }} https://pileof.rocks/Secret/KSP-1.12.3-dlls.zip
unzip KSP-*-dlls.zip -d DepthMask/
- name: Generate Version Info
run: |
python Tools/version.py
- name: Validate Version Info
uses: DasSkelett/AVC-VersionFileValidator@master
with:
only: '["./GameData/DepthMask/DepthMask.version"]'
- name: Build DLL
run: |
dotnet build --configuration Release DepthMask.sln
- name: Upload Build
uses: actions/upload-artifact@v3
with:
name: DepthMask
path: |
GameData/DepthMask
README.md
CHANGELOG.md
LICENSE.md
deploy:
needs: build
runs-on: ubuntu-latest
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install Python Tools
run: |
python -m pip install --upgrade pip
python -m pip install yaclog
- name: Setup SSH keys
uses: kielabokkie/ssh-key-and-known-hosts-action@v1
with:
ssh-private-key: ${{ secrets.PILE_OF_ROCKS_PRIVATE_KEY }}
ssh-host: pileof.rocks
- name: Get version name and body
run: |
echo "VERSION_TITLE=$(yaclog show -n)" >> $GITHUB_ENV
echo "$(yaclog show -mb)" >> RELEASE.md
- name: Download Build Artifacts
uses: actions/download-artifact@v3
- name: Zip Download Packages
run: |
mkdir deploy
zip -r deploy/DepthMask-$GITHUB_REF.zip DepthMask/*
cp DepthMask/GameData/DepthMask/DepthMask.version deploy/
ls deploy
- name: Publish to Github
uses: softprops/action-gh-release@v1
with:
files: |
deploy/Shabby-*.zip
deploy/DepthMask.version
name: DepthMask Version ${{ env.GITHUB_REF }}
body_path: RELEASE.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish to Server
run: |
rsync -t deploy/* drewcassidy@pileof.rocks:/var/www/pileof.rocks/html/KSP/

1
.gitignore vendored

@ -329,3 +329,4 @@ ASALocalRun/
# MFractors (Xamarin productivity tool) working folder
.mfractor/
DepthMask/dlls
GameData

@ -14,4 +14,28 @@ Global
{AF7B4795-7A4F-4238-BF1D-F0AC763C15C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AF7B4795-7A4F-4238-BF1D-F0AC763C15C8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
Policies = $0
$0.DotNetNamingPolicy = $1
$1.DirectoryNamespaceAssociation = PrefixedHierarchical
$0.TextStylePolicy = $2
$2.FileWidth = 80
$2.TabsToSpaces = True
$2.scope = text/x-csharp
$2.NoTabsAfterNonTabs = True
$2.EolMarker = Unix
$0.CSharpFormattingPolicy = $3
$3.NewLinesForBracesInTypes = False
$3.NewLinesForBracesInMethods = False
$3.NewLinesForBracesInProperties = False
$3.NewLinesForBracesInAccessors = False
$3.NewLinesForBracesInAnonymousMethods = False
$3.NewLinesForBracesInControlBlocks = False
$3.NewLinesForBracesInAnonymousTypes = False
$3.NewLinesForBracesInObjectCollectionArrayInitializers = False
$3.NewLinesForBracesInLambdaExpressionBody = False
$3.scope = text/x-csharp
$3.SpaceAfterCast = True
$0.StandardHeader = $4
EndGlobalSection
EndGlobal

@ -5,7 +5,7 @@
<IsPackable>false</IsPackable>
<PlatformTarget>x64</PlatformTarget>
<NoWarn>1701;1702;CS0649;CS1591</NoWarn>
<AssemblyVersion>1.1.2</AssemblyVersion>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<ItemGroup>
@ -36,7 +36,8 @@
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="cp -v '$(TargetPath)' '$(SolutionDir)/Releases/DepthMask/Gamedata'"/>
<MakeDir Directories="$(SolutionDir)/GameData/DepthMask"/>
<Copy SourceFiles="$(OutDir)DepthMask.dll" DestinationFolder="$(SolutionDir)/GameData/DepthMask"/>
</Target>
</Project>

@ -1,42 +1,36 @@
using UnityEngine;
using UnityEngine.Serialization;
using System.Collections.Generic;
using System.Linq;
namespace DepthMask
{
public class ModuleDepthMask : PartModule
{
namespace DepthMask {
public class ModuleDepthMask : PartModule {
// The name of the transform that has your mask mesh. The only strictly required property
[KSPField]
public string maskTransform = "";
[KSPField] public string maskTransform = "";
[KSPField]
public string bodyTransform = "";
[KSPField] public string bodyTransform = "";
// The name of the depth mask shader
[KSPField]
public string shaderName = "DepthMask";
[KSPField] public string shaderName = "DepthMask";
// The render queue value for the mesh, should be less than maskRenderQueue
[KSPField]
public int meshRenderQueue = 1000;
[KSPField] public int meshRenderQueue = 1000;
// the render queue value for the mask, should be less than 2000
[KSPField]
public int maskRenderQueue = 1999;
[KSPField] public int maskRenderQueue = 1999;
// depth mask object transforms
public Transform[] maskTransformObjects;
public List<Transform> maskTransformObjects;
// body object transform
public Transform bodyTransformObject;
public List<Transform> bodyTransformObjects;
// depth mask shader object
public Shader depthShader;
public override void OnStart(StartState state)
{
public override void OnStart(StartState state) {
base.OnStart(state);
UpdateAllMaterials();
@ -47,83 +41,93 @@ namespace DepthMask
}
private void OnDestroy()
{
private void OnDestroy() {
GameEvents.onVariantApplied.Remove(OnVariantApplied);
GameEvents.onPartRepaired.Remove(OnPartRepaired);
}
public override void OnLoad(ConfigNode node)
{
public override void OnLoad(ConfigNode node) {
base.OnLoad(node);
if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) return;
this.maskTransformObjects = base.part.FindModelTransforms(maskTransform);
if (this.maskTransformObjects.Length == 0 || this.maskTransformObjects == null)
{
this.LogError($"Can't find transform {maskTransform}");
return;
this.maskTransformObjects = new List<Transform>();
this.bodyTransformObjects = new List<Transform>();
foreach (string name in maskTransform.Split(',')) {
var trimmed = name.Trim();
var transforms = base.part.FindModelTransforms(trimmed);
if (transforms.Length == 0) {
this.LogError($"Can't find any mask transforms named {trimmed}");
}
this.maskTransformObjects.AddRange(transforms);
}
if (bodyTransform.Length == 0)
{
this.bodyTransformObject = base.part.partTransform;
if (this.maskTransformObjects.Count == 0) {
this.LogError($"Can't find any mask transforms");
return;
}
else
{
this.bodyTransformObject = base.part.FindModelTransform(bodyTransform);
if (this.bodyTransformObject == null)
{
this.LogError($"Can't find transform {bodyTransform}");
this.bodyTransformObject = base.part.partTransform;
if (bodyTransform.Length == 0) {
this.bodyTransformObjects.Add(base.part.partTransform);
} else {
foreach (string name in bodyTransform.Split(',')) {
var trimmed = name.Trim();
var transforms = base.part.FindModelTransforms(trimmed);
if (transforms.Length == 0) {
this.LogError($"Can't find any body transforms named {trimmed}");
}
this.bodyTransformObjects.AddRange(transforms);
}
}
if (this.bodyTransformObjects.Count == 0) {
this.LogError($"Can't find any body transforms");
return;
}
this.depthShader = Shader.Find(shaderName);
if (this.depthShader == null)
{
if (this.depthShader == null) {
this.LogError($"Can't find shader {shaderName}");
return;
}
}
public void OnVariantApplied(Part appliedPart, PartVariant variant)
{
public void OnVariantApplied(Part appliedPart, PartVariant variant) {
// I dont know why changing part variants resets all the materials to their as-loaded state, but it does
if (appliedPart == this.part) UpdateAllMaterials();
}
public void OnPartRepaired(Part repairedPart)
{
public void OnPartRepaired(Part repairedPart) {
// Part repair resets part of the mesh from the prefab, so it needs to be reapplied
if (repairedPart == this.part) UpdateAllMaterials();
}
private void UpdateAllMaterials()
{
var renderers = bodyTransformObject.GetComponentsInChildren<Renderer>(true);
private void UpdateAllMaterials() {
var renderers = new List<Renderer>();
foreach (var body in bodyTransformObjects) {
renderers.AddRange(body.GetComponentsInChildren<Renderer>(true));
}
foreach (var renderer in renderers)
{
foreach (var renderer in renderers) {
var queue = renderer.material.renderQueue;
if (queue <= maskRenderQueue) continue;
queue = meshRenderQueue + ((queue - 2000) / 2);
renderer.material.renderQueue = queue;
}
foreach (var maskObject in maskTransformObjects)
{
foreach (var maskObject in maskTransformObjects) {
var renderer = maskObject.GetComponent<Renderer>();
renderer.material.shader = depthShader;
renderer.material.renderQueue = maskRenderQueue;
}
}
private void LogError(string message)
{
private void LogError(string message) {
Debug.LogError($"[{part.partInfo?.name ?? part.name} {this.GetType()}] {message}");
}
}

@ -1 +1,3 @@
[assembly: KSPAssembly("DepthMask", 1, 1, 2)]
using System.Reflection;
[assembly: KSPAssembly("DepthMask", 99, 99, 99)]

@ -0,0 +1,14 @@
using System.Reflection;
// KSP assembly information
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersionAttribute("{{ ver_major }}.{{ ver_minor }}.{{ ver_patch }}")]
[assembly: AssemblyInformationalVersionAttribute("{{ ver_major }}.{{ ver_minor }}.{{ ver_patch }}")]
[assembly: KSPAssembly("DepthMask", {{ ver_major }}, {{ ver_minor }}, {{ ver_patch }})]
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyCopyright("2022 Andrew Cassidy")]

@ -0,0 +1,20 @@
{
"NAME":"DepthMask",
"URL":"https://github.com/drewcassidy/KSP-DepthMask/releases/latest/download/DepthMask.version",
"DOWNLOAD":"https://github.com/drewcassidy/KSP-DepthMask/releases/latest",
"CHANGE_LOG_URL":"https://github.com/drewcassidy/KSP-DepthMask/blob/master/CHANGELOG.md",
"VERSION": {
"MAJOR": {{ ver_major }},
"MINOR": {{ ver_minor }},
"PATCH": {{ ver_patch }},
"BUILD": {{ ver_build }}
},
"KSP_VERSION_MIN": {
"MAJOR":1,
"MINOR":11
},
"KSP_VERSION_MAX": {
"MAJOR":1,
"MINOR":12
}
}

@ -0,0 +1,3 @@
GitPython ~= 3.1.27
yaclog ~= 1.0.4
jinja2 ~= 3.1.0

@ -0,0 +1,55 @@
# This file generates versioned files for deploying DepthMask
import yaclog
import yaclog.version
import git as gp
import os
from pathlib import Path
from jinja2 import Environment, FileSystemLoader, select_autoescape
def run():
basedir = Path(__file__).parent.parent
g = gp.Git(basedir)
release = True
tag, distance, sha = g.execute(["git", "describe", "--tags"]).split("-")
if int(distance) > 0:
release = False
tag = yaclog.version.increment_version(tag, 2)
segments = tag.split('.')
ver_major, ver_minor, ver_patch = segments[0:3]
if len(segments) >= 4:
ver_build = segments[3]
elif release:
ver_build = int(distance)
else:
ver_build = int("0x" + sha[1:5], 16)
print(f'Configuring version {ver_major}.{ver_minor}.{ver_patch} build {ver_build}')
env = Environment(
loader=FileSystemLoader(basedir / "Templates"),
autoescape=select_autoescape()
)
for template_name in ["GameData/DepthMask/DepthMask.version", "DepthMask/Properties/AssemblyInfo.cs"]:
print("Generating " + template_name)
template = env.get_template(template_name)
with open(basedir / template_name, "w") as fh:
fh.write(template.render(
ver_major=ver_major,
ver_minor=ver_minor,
ver_patch=ver_patch,
ver_build=ver_build,
tag=tag
))
print('Done!')
if __name__ == '__main__':
run()
Loading…
Cancel
Save