Skip to content

Commit 05b9be9

Browse files
committed
Project Upload
0 parents  commit 05b9be9

11 files changed

Lines changed: 1005 additions & 0 deletions
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using UnityEngine;
6+
7+
//AnimatedContainer allows an animation to correspond with the percentage of a particular resource in a container.
8+
9+
namespace BDAnimationModules
10+
{
11+
public class AnimatedContainer : PartModule
12+
{
13+
[KSPField(isPersistant = false)]
14+
public string ContainerAnimationName;
15+
16+
[KSPField(isPersistant = false)]
17+
public string ResourceType;
18+
19+
private AnimationState[] containerStates;
20+
private PartResource animatedResource;
21+
private double resAmount;
22+
private double resMax;
23+
private double normalizedRes;
24+
25+
26+
27+
28+
public override void OnStart(PartModule.StartState state)
29+
{
30+
31+
containerStates = SetUpAnimation(ContainerAnimationName, this.part);
32+
33+
foreach(PartResource pr in part.Resources) //finds which resource has been specified
34+
{
35+
if (pr.resourceName.Equals (ResourceType))
36+
{
37+
animatedResource = pr;
38+
break;
39+
}
40+
}
41+
42+
43+
resMax = animatedResource.maxAmount;
44+
resAmount = animatedResource.amount;
45+
normalizedRes = resAmount/resMax;
46+
foreach (var cs in containerStates)
47+
{
48+
cs.normalizedTime = (float)normalizedRes;
49+
}
50+
51+
52+
53+
}
54+
55+
public override void OnUpdate()
56+
{
57+
58+
resAmount = animatedResource.amount;
59+
resMax = animatedResource.maxAmount;
60+
normalizedRes = resAmount/resMax;
61+
62+
63+
64+
foreach (var cs in containerStates)
65+
{
66+
cs.normalizedTime = (float)normalizedRes;
67+
}
68+
69+
70+
}
71+
72+
73+
public static AnimationState[] SetUpAnimation(string animationName, Part part) //Thanks Majiir!
74+
{
75+
var states = new List<AnimationState>();
76+
foreach (var animation in part.FindModelAnimators(animationName))
77+
{
78+
var animationState = animation[animationName];
79+
animationState.speed = 0;
80+
animationState.enabled = true;
81+
animationState.wrapMode = WrapMode.ClampForever;
82+
animation.Blend(animationName);
83+
states.Add(animationState);
84+
}
85+
return states.ToArray();
86+
}
87+
88+
//for some reason OnSave causes nullReferenceExceptions...
89+
90+
/**public override void OnSave(ConfigNode node)
91+
{
92+
resAmount = animatedResource.amount;
93+
resMax = animatedResource.maxAmount;
94+
normalizedRes = resAmount/resMax;
95+
96+
97+
98+
foreach (var cs in containerStates)
99+
{
100+
cs.normalizedTime = (float)normalizedRes;
101+
}
102+
}
103+
**/
104+
105+
/**private void updateAnim()
106+
{
107+
resAmount = animatedResource.amount;
108+
resMax = animatedResource.maxAmount;
109+
normalizedRes = resAmount/resMax;
110+
111+
112+
113+
foreach (var cs in containerStates)
114+
{
115+
cs.normalizedTime = (float)normalizedRes;
116+
}
117+
118+
}
119+
**/
120+
121+
122+
}
123+
}
124+
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
using System;
2+
using System.Collections.Generic;
3+
//using System.Linq;
4+
using System.Text;
5+
using UnityEngine;
6+
//AnimatedEngine allows an animation to be played while activating/deactivating an engine.
7+
8+
namespace BDAnimationModules
9+
{
10+
public class AnimatedEngine : PartModule
11+
{
12+
[KSPField(isPersistant = false)]
13+
public string EngineAnimationName;
14+
15+
[KSPField(isPersistant = false)]
16+
public float WaitForAnimation = 0;
17+
18+
private bool engineIsOn = false;
19+
private ModuleEngines modEng = null;
20+
private ModuleEnginesFX modEngFX = null;
21+
private AnimationState[] engineStates;
22+
private bool userActivated = false;
23+
private bool engineIsFX = false;
24+
25+
public override void OnStart(PartModule.StartState state)
26+
{
27+
28+
try{
29+
engineStates = SetUpAnimation(EngineAnimationName, this.part);
30+
}catch(NullReferenceException e){Debug.Log ("NRE while setting up animation: "+e);}
31+
32+
33+
try{
34+
foreach (var me in this.part.FindModulesImplementing<ModuleEngines>())
35+
{
36+
engineIsOn = me.EngineIgnited;
37+
modEng = me;
38+
engineIsFX = false;
39+
}
40+
}catch(NullReferenceException e){Debug.Log ("NRE while finding ModuleEngines: "+e);}
41+
42+
try{
43+
foreach (var me in this.part.FindModulesImplementing<ModuleEnginesFX>())
44+
{
45+
engineIsOn = me.EngineIgnited;
46+
modEngFX = me;
47+
engineIsFX = true;
48+
}
49+
}catch(NullReferenceException e){Debug.Log ("NRE while finding ModuleEnginesFX: "+e);}
50+
51+
try{
52+
if (engineIsOn)
53+
{
54+
foreach (var anim in engineStates)
55+
{
56+
anim.normalizedTime = 1;
57+
}
58+
}
59+
else
60+
{
61+
foreach (var anim in engineStates)
62+
{
63+
anim.normalizedTime = 0;
64+
}
65+
}
66+
}catch(NullReferenceException e){Debug.Log ("NRE on anim initial state set: "+e);}
67+
68+
69+
}
70+
71+
//Original OnUpdate (0.1)
72+
/**
73+
public override void OnUpdate()
74+
{
75+
bool engineWas = engineIsOn;
76+
engineIsOn = modEng.EngineIgnited;
77+
if(engineStates.All(s => s.normalizedTime>=1) || engineStates.All (s => s.normalizedTime<=0))
78+
{
79+
foreach(var anim in engineStates){anim.speed = 0;}
80+
}
81+
82+
if (engineWas != engineIsOn)
83+
{
84+
if (engineIsOn)
85+
{
86+
foreach (var anim in engineStates)
87+
{
88+
anim.normalizedTime = 0;
89+
anim.speed = 1;
90+
//Debug.Log ("played forward");
91+
}
92+
}
93+
else
94+
{
95+
foreach (var anim in engineStates)
96+
{
97+
anim.normalizedTime = 1;
98+
anim.speed = -1;
99+
//Debug.Log ("played reverse");
100+
}
101+
}
102+
}
103+
}
104+
105+
**/
106+
107+
//New OnUpdate (waits till animation before activating Engine)
108+
109+
public override void OnUpdate()
110+
{
111+
Debug.Log ("engineIsFX = "+engineIsFX);
112+
if(!engineIsFX)
113+
{
114+
engineIsOn = modEng.EngineIgnited;
115+
}
116+
else
117+
{
118+
engineIsOn = modEngFX.EngineIgnited;
119+
}
120+
121+
122+
foreach(var anim in engineStates)
123+
{
124+
if(anim.normalizedTime>=1)
125+
{
126+
anim.speed = 0;
127+
anim.normalizedTime = 1;
128+
}
129+
if(anim.normalizedTime <=0)
130+
{
131+
anim.speed = 0;
132+
anim.normalizedTime = 0;
133+
}
134+
}
135+
136+
137+
138+
if(engineIsOn)
139+
{
140+
userActivated = true;
141+
foreach(var anim in engineStates)
142+
{
143+
anim.speed = 1;
144+
}
145+
}
146+
foreach(var anim in engineStates)
147+
{
148+
if (anim.normalizedTime < WaitForAnimation)
149+
{
150+
if(!engineIsFX)
151+
{
152+
modEng.Shutdown();
153+
}
154+
else
155+
{
156+
modEngFX.Shutdown ();
157+
}
158+
}
159+
if (anim.normalizedTime >= WaitForAnimation && userActivated)
160+
{
161+
if(!engineIsFX)
162+
{
163+
modEng.Activate();
164+
}
165+
else
166+
{
167+
modEngFX.Activate();
168+
}
169+
userActivated = false;
170+
}
171+
if (anim.normalizedTime >= WaitForAnimation && !engineIsOn)
172+
{
173+
//userActivated = false;
174+
anim.speed = -1;
175+
}
176+
}
177+
178+
}
179+
180+
181+
182+
183+
184+
public static AnimationState[] SetUpAnimation(string animationName, Part part) //Thanks Majiir!
185+
{
186+
var states = new List<AnimationState>();
187+
foreach (var animation in part.FindModelAnimators(animationName))
188+
{
189+
var animationState = animation[animationName];
190+
animationState.speed = 0;
191+
animationState.enabled = true;
192+
animationState.wrapMode = WrapMode.ClampForever;
193+
animation.Blend(animationName);
194+
states.Add(animationState);
195+
196+
}
197+
return states.ToArray();
198+
}
199+
}
200+
}
201+

BDAnimationModules/AnimatedRCS.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Collections.Generic;
3+
//using System.Linq;
4+
using System.Text;
5+
using UnityEngine;
6+
7+
namespace BDAnimationModules
8+
{
9+
public class AnimatedRCS : PartModule
10+
{
11+
[KSPField(isPersistant = false)]
12+
public string AnimationName;
13+
14+
private AnimationState[] rcsStates;
15+
private bool rcsIsOn;
16+
17+
public override void OnStart(PartModule.StartState state)
18+
{
19+
rcsStates = Utils.SetUpAnimation (AnimationName, this.part);
20+
21+
22+
}
23+
24+
public override void OnUpdate()
25+
{
26+
rcsIsOn = this.vessel.ActionGroups.groups[3];
27+
28+
29+
foreach (AnimationState anim in rcsStates)
30+
{
31+
if(rcsIsOn && anim.normalizedTime<1){anim.speed = 1;}
32+
if(rcsIsOn && anim.normalizedTime>=1)
33+
{
34+
anim.speed = 0;
35+
anim.normalizedTime = 1;
36+
}
37+
if(!rcsIsOn && anim.normalizedTime>0){anim.speed = -1;}
38+
if(!rcsIsOn && anim.normalizedTime<=0)
39+
{
40+
anim.speed = 0;
41+
anim.normalizedTime = 0;
42+
}
43+
}
44+
45+
46+
47+
}
48+
49+
50+
}
51+
}
52+

0 commit comments

Comments
 (0)