Add ISRU and custom animation module

This commit is contained in:
2019-08-15 00:09:18 -07:00
parent 93b4b46735
commit 6871021b8a
9 changed files with 134 additions and 1 deletions

View File

@ -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);
}
}
}
}

View File

@ -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" />