Add ISRU and custom animation module

pull/653/head
Andrew Cassidy 5 years ago
parent 93b4b46735
commit 6871021b8a
No known key found for this signature in database
GPG Key ID: 963017B38FD477A1

@ -1 +1 @@
Subproject commit d8d49e303bdd463c3f8d5e2d8c6c3f8718d2eeec
Subproject commit f8b6ab64ffbe90f0e5c2ce6a5eacc568715978a6

@ -0,0 +1,22 @@
// Patches applying art changes to ISRUs
// Contents:
// - Convert-O-Tron 125 (MiniISRU)
// Convert-O-Tron 125
@PART[MiniISRU]
{
@author = Andrew Cassidy
!MODEL {}
MODEL
{
model = ReStock/Assets/Resource/restock-isru-125-1
scale = 1.0, 1.0, 1.0
}
MODULE
{
name = ModuleRestockISRUAnimation
deployAnimationName = heater
}
}

@ -0,0 +1,110 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Restock
{
public class ModuleRestockISRUAnimation: PartModule
{
[KSPField] public string activeAnimationName = "";
[KSPField] public string deployAnimationName = "";
public bool isDeployed = false;
public Animation DeployAnimation
{
get;
private set;
}
private List<BaseConverter> _modules;
private bool _deployAnimationPresent = false;
public void Start()
{
if (base.vessel == null) return;
_modules = base.part.FindModulesImplementing<BaseConverter>();
_deployAnimationPresent = (deployAnimationName != string.Empty);
DeployAnimation = ((_deployAnimationPresent) ? base.part.FindModelAnimators(deployAnimationName)[0] : null);
foreach (var a in base.part.FindModelAnimators()) a.Stop();
}
public override void OnLoad(ConfigNode node)
{
if (isDeployed)
{
PlayDeployAnimation(1000);
}
else
{
PlayDeployAnimation(-1000);
}
}
public void Update()
{
if (!HighLogic.LoadedSceneIsFlight || base.vessel == null) return;
try
{
if (!CheatOptions.InfiniteElectricity)
{
var ecHash = PartResourceLibrary.ElectricityHashcode;
base.vessel.GetConnectedResourceTotals(ecHash, out var ecAmount, out _, true);
Debug.Log(ecAmount);
if (ecAmount < 0.1)
{
if (isDeployed) RetractModule();
return;
}
}
int enabledCount = 0;
foreach (var m in _modules)
{
if (m.ModuleIsActive()) enabledCount++;
}
if (isDeployed && enabledCount == 0) RetractModule();
else if (!isDeployed && enabledCount != 0) DeployModule();
}
catch (Exception e)
{
this.LogException("Failed to update animation module", e);
}
}
public void DeployModule()
{
isDeployed = true;
PlayDeployAnimation(1);
}
public void RetractModule()
{
isDeployed = false;
PlayDeployAnimation(-1);
}
private void PlayDeployAnimation(int speed)
{
if (_deployAnimationPresent)
{
var deployAnimationState = DeployAnimation[deployAnimationName];
if (speed < 0 && deployAnimationState.time < Mathf.Epsilon)
{
deployAnimationState.time = deployAnimationState.length;
}
else if (speed > 0 && deployAnimationState.time > deployAnimationState.length - Mathf.Epsilon)
{
deployAnimationState.time = 0.0f;
}
deployAnimationState.speed = speed;
DeployAnimation.Play(deployAnimationName);
}
}
}
}

@ -47,6 +47,7 @@
<Compile Include="MaterialModifiers\IMaterialModifier.cs" />
<Compile Include="MaterialModifiers\MaterialModifierParser.cs" />
<Compile Include="MaterialModifiers\TexturePropertyMaterialModifier.cs" />
<Compile Include="ModuleRestockISRUAnimation.cs" />
<Compile Include="ModuleRestockModifyFairingMaterials.cs" />
<Compile Include="ModuleRestockModifyMaterials.cs" />
<Compile Include="PartModuleExtensions.cs" />

Loading…
Cancel
Save