Skip to content

Commit

Permalink
Merge pull request #1 from HappyFaceIndustries/development
Browse files Browse the repository at this point in the history
Merge development for 1.2.0.0 release
  • Loading branch information
HappyFaceIndustries committed Jun 26, 2016
2 parents d020d14 + 56f40be commit 76bd953
Show file tree
Hide file tree
Showing 17 changed files with 1,042 additions and 376 deletions.
Binary file modified GameData/KerbalAnimationSuite/KerbalAnimationSuite.dll
Binary file not shown.
24 changes: 13 additions & 11 deletions KerbalAnimationSuite.userprefs
@@ -1,18 +1,20 @@
<Properties StartupItem="KerbalAnimationSuite\KerbalAnimationSuite.csproj" GitUserInfo="UsingGIT">
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
<MonoDevelop.Ide.Workbench ActiveDocument="KerbalAnimationSuite\Utils\EditableAnimationClip.cs">
<MonoDevelop.Ide.Workbench ActiveDocument="KerbalAnimationSuite\KerbalDebugging.cs">
<Files>
<File FileName="KerbalAnimationSuite\KAS_AnimationPlayerModule.cs" Line="37" Column="37" />
<File FileName="KerbalAnimationSuite\API\KerbalAnimationClip.cs" Line="34" Column="34" />
<File FileName="KerbalAnimationSuite\Utils\EditableAnimationClip.cs" Line="4" Column="4" />
<File FileName="KerbalAnimationSuite\KerbalAnimationSuite.cs" Line="12" Column="12" />
<File FileName="KerbalAnimationSuite\Utils\SelectedKerbalEVA.cs" Line="24" Column="24" />
<File FileName="KerbalAnimationSuite\Utils\SelectedBone.cs" Line="2" Column="2" />
<File FileName="KerbalAnimationSuite\GUI\AnimationWindow.cs" Line="34" Column="34" />
<File FileName="KerbalAnimationSuite\GUI\AnimationPropertiesWindow.cs" Line="7" Column="7" />
<File FileName="KerbalAnimationSuite\AnimationPlayerModule.cs" Line="101" Column="6" />
<File FileName="KerbalAnimationSuite\GUI\AnimationPlayerWindow.cs" Line="18" Column="17" />
<File FileName="KerbalAnimationSuite\Utils\EditableAnimationClip.cs" Line="1" Column="1" />
<File FileName="KerbalAnimationSuite\KerbalAnimationSuite.cs" Line="21" Column="54" />
<File FileName="KerbalAnimationSuite\Utils\SelectedKerbalEVA.cs" Line="1" Column="1" />
<File FileName="KerbalAnimationSuite\GUI\AnimationWindow.cs" Line="1" Column="1" />
<File FileName="KerbalAnimationSuite\GUI\AnimationPropertiesWindow.cs" Line="1" Column="1" />
<File FileName="KerbalAnimationSuite\GUI\HierarchyWindow.cs" Line="1" Column="1" />
<File FileName="KerbalAnimationSuite\GUI\ManipulationWindow.cs" Line="41" Column="41" />
<File FileName="KerbalAnimationSuite\GUI\Colors.cs" Line="40" Column="40" />
<File FileName="KerbalAnimationSuite\GUI\ManipulationWindow.cs" Line="1" Column="1" />
<File FileName="KerbalAnimationSuite\GUI\MasterWindow.cs" Line="1" Column="1" />
<File FileName="KerbalAnimationSuite\KerbalDebugging.cs" Line="64" Column="49" />
<File FileName="KerbalAnimationSuite\Utils\DebugUtil.cs" Line="1" Column="1" />
<File FileName="KerbalAnimationSuite\GUI\GUIHider.cs" Line="1" Column="1" />
</Files>
</MonoDevelop.Ide.Workbench>
<MonoDevelop.Ide.DebuggingService.Breakpoints>
Expand Down
23 changes: 18 additions & 5 deletions KerbalAnimationSuite/API/KerbalAnimationClip.cs
Expand Up @@ -11,16 +11,28 @@ public class KerbalAnimationClip
public static Dictionary<string, string> AnimationNames = null;

//constructors
protected KerbalAnimationClip()
public KerbalAnimationClip()
{
}
public KerbalAnimationClip(string url, bool fullPath = false)

//loading
public void LoadFromURL(string url)
{
if(!url.EndsWith(".anim"))
url += ".anim";
if (!fullPath)
url = KSPUtil.ApplicationRootPath + "GameData/" + url;
ConfigNode node = ConfigNode.Load (url);
string fullPath = KSPUtil.ApplicationRootPath + "GameData/" + url;
ConfigNode node = ConfigNode.Load (fullPath);
LoadAndBuild (node);
}
public void LoadFromPath(string fullPath)
{
if(!fullPath.EndsWith(".anim"))
fullPath += ".anim";
ConfigNode node = ConfigNode.Load (fullPath);
LoadAndBuild (node);
}
public void LoadFromConfig(ConfigNode node)
{
LoadAndBuild (node);
}
protected void LoadAndBuild(ConfigNode node)
Expand Down Expand Up @@ -160,6 +172,7 @@ protected void RemoveMixingTransform(string name)
protected AnimationClip BuildAnimationClip()
{
clip = new AnimationClip ();
clip.legacy = true;
clip.wrapMode = WrapMode.Loop;

//populate dictionaries with curves
Expand Down
145 changes: 145 additions & 0 deletions KerbalAnimationSuite/AnimationPlayerModule.cs
@@ -0,0 +1,145 @@
using System;
using System.IO;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace KerbalAnimation
{
[KSPAddon(KSPAddon.Startup.MainMenu, true)]
public class EVAModuleAdder : MonoBehaviour
{
void Start()
{
KerbalEVAUtility.AddPartModule ("AnimationPlayerModule");
}
}

[KSPAddon(KSPAddon.Startup.Flight, false)]
public class AnimationPlayerWindowHost : MonoBehaviour
{
public static AnimationPlayerWindowHost Instance
{get; private set;}

public AnimationPlayerWindow Player;
public static bool GUIOpen = false;

//events
public EventData<List<KerbalAnimationClip>> OnReloadAnimationClips = new EventData<List<KerbalAnimationClip>>("OnReloadAnimationClips");

private void Awake()
{
Instance = this;
}
private void Start()
{
Player = new AnimationPlayerWindow ();
}
private void OnGUI()
{
//return if we are not in a valid state to draw
if (!GUIHider.ShowUI)
return;
if (!HighLogic.LoadedSceneIsFlight || !FlightGlobals.ActiveVessel.isEVA)
return;
if (KerbalAnimationSuite.Instance.IsAnimating)
return;

if (GUIOpen)
{
Player.Draw ();
}
}
private void Update()
{
//return if we are not in a valid state to update
if (!HighLogic.LoadedSceneIsFlight || !FlightGlobals.ActiveVessel.isEVA)
return;
if (KerbalAnimationSuite.Instance.IsAnimating)
return;

Player.Update ();
}
}

public class AnimationPlayerModule : PartModule
{
public string OpenGUIName = "Open Animation Player";
public string CloseGUIName = "Close Animation Player";

private Animation _animation;
public Animation animation
{
get
{
if (_animation == null)
{
_animation = GetComponent<Animation> ();
}
return _animation;
}
}

//lifetime
public override void OnStart (StartState state)
{
AnimationPlayerWindowHost.Instance.OnReloadAnimationClips.Add (OnReloadAnimationClips);
}
public override void OnUpdate ()
{
Events ["ToggleGUI"].guiName = AnimationPlayerWindowHost.GUIOpen ? CloseGUIName : OpenGUIName;

for(int i = 0; i < 10; i++)
{
string buttonName = (i + 1).ToString ();
if (i >= 9)
buttonName = "0";
if (Input.GetKey (buttonName))
{
bool shift = Input.GetKey (KeyCode.LeftShift);

if(!shift && FlightGlobals.ActiveVessel != vessel)
{
continue;
}
var clip = AnimationPlayerWindowHost.Instance.Player.GetNumberKeyClip (i);
if(clip != null && !animation.IsPlaying(clip.Name))
{
if (AnimationPlayerWindow.Loop)
PlayAnimation (clip.Name, WrapMode.Loop);
else
PlayAnimation (clip.Name, WrapMode.Once);
}
}
}
}

public void PlayAnimation(string name, WrapMode wrapMode)
{
var state = animation [name];
if (state == null || animation.GetClip(name) == null)
return;
state.wrapMode = wrapMode;
animation.CrossFade (name, 0.2f * state.length, PlayMode.StopSameLayer);
}

//events
private void OnReloadAnimationClips (List<KerbalAnimationClip> clips)
{
//initialize all of the clips with this kerbal
foreach (var clip in clips)
{
clip.Initialize (animation, transform);
}
}

//KSPEvents
[KSPEvent(guiName = "Open GUI", guiActiveUnfocused = false, guiActive = true)]
public void ToggleGUI()
{
AnimationPlayerWindowHost.GUIOpen = !AnimationPlayerWindowHost.GUIOpen;
}
}
}

141 changes: 141 additions & 0 deletions KerbalAnimationSuite/GUI/AnimationPlayerWindow.cs
@@ -0,0 +1,141 @@
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;

using UnityEngine;

namespace KerbalAnimation
{
public class AnimationPlayerWindow : Window
{
//constructor
public AnimationPlayerWindow ()
{
WindowTitle = "Animation Player";
WindowRect = new Rect (Screen.width - 325f, 25f, 280f, 0f);
ExpandHeight = true;
Loop = false;
}

//animations
private List<KerbalAnimationClip> Clips = null;
public KerbalAnimationClip GetNumberKeyClip(int index)
{
if (index >= Clips.Count)
return null;
else
return Clips [NumberKeyClips [index]];
}

//gui values
private Dictionary<string, string> textBoxValues = new Dictionary<string, string>();
private Vector2 scroll;
public static bool Loop
{
get;
private set;
}

public int[] NumberKeyClips = new int[10];

protected override void DrawWindow ()
{
if (Clips.Count > 0)
{
scroll = GUILayout.BeginScrollView (scroll, GUILayout.Height (320f), GUILayout.ExpandWidth(true));
for (int i = 0; i < Clips.Count; i++)
{
int nameValue = i + 1;
if (nameValue > 9)
nameValue = 0;
NumberKeyClips [i] = DrawClipSelector ("NumberKey" + nameValue.ToString(), nameValue.ToString(), NumberKeyClips [i]);
}

GUILayout.Label ("<color=" + Colors.Information + ">Press the numbers 0-9 (not on the numpad) to play the selected animations. Hold left shift to play the animation on all kerbals instead of just the active one</color>");

GUILayout.EndScrollView ();
}
Loop = GUILayout.Toggle (Loop, "Loop?");
if (GUILayout.Button ("Reload Animations"))
{
ReloadAnimations ();
}
}
public override void Update ()
{
if(Clips == null)
ReloadAnimations ();
}

//gui methods
private int DrawClipSelector(string uniqueName, string name, int index)
{
if (!textBoxValues.ContainsKey (uniqueName))
textBoxValues.Add (uniqueName, Clips[index].Name);

string textBoxControlName = "ClipSelector_" + uniqueName;

GUILayout.BeginHorizontal ();

GUILayout.Label ("<color=" + Colors.Information + ">" + name + ":</color>", GUILayout.Width (30f));

bool buttonPressed = false;
int buttonValue = index;
int buttonIncrement = 1;
if (GUILayout.Button ("<<", GUILayout.MaxWidth(40f), GUILayout.Height(24f)))
{
buttonValue -= buttonIncrement;
buttonPressed = true;
}

//text field
GUI.SetNextControlName (textBoxControlName);
GUILayout.TextField (textBoxValues [uniqueName], GUILayout.Width(160f));

if (GUILayout.Button (">>", GUILayout.MaxWidth(40f), GUILayout.Height(24f)))
{
buttonValue += buttonIncrement;
buttonPressed = true;
}
if (buttonPressed)
{
if (buttonValue < 0)
buttonValue = Clips.Count - 1;
else if (buttonValue >= Clips.Count)
buttonValue = 0;

textBoxValues [uniqueName] = Clips[buttonValue].Name;
GUI.FocusControl ("");
}

GUILayout.EndHorizontal ();

return buttonValue;
}

//utility methods
public void ReloadAnimations()
{
Clips = new List<KerbalAnimationClip> ();
foreach (var path in Directory.GetFiles(KSPUtil.ApplicationRootPath + "GameData/", "*.anim", SearchOption.AllDirectories))
{
KerbalAnimationClip clip = new KerbalAnimationClip ();
clip.LoadFromPath (path);
Clips.Add (clip);
Debug.Log ("KerbalAnimationClip " + clip.Name + " loaded from " + path);
}

int length = 10;
if (Clips.Count < 10)
length = Clips.Count;
for (int i = 0; i < length; i++)
{
NumberKeyClips [i] = i;
}

AnimationPlayerWindowHost.Instance.OnReloadAnimationClips.Fire (Clips);
}
}
}

1 change: 1 addition & 0 deletions KerbalAnimationSuite/GUI/AnimationWindow.cs
Expand Up @@ -130,6 +130,7 @@ private void OnNewAnimationClip (EditableAnimationClip clip)
{
//set defaults
clip.WrapMode = WrapMode.ClampForever;
clip.Duration = 1f;

UpdateAnimationClip ();
}
Expand Down

0 comments on commit 76bd953

Please sign in to comment.