Skip to content

Commit

Permalink
Fixing another animation bug, fixing a graphical glitch when some ani…
Browse files Browse the repository at this point in the history
…mations are changed. by Animal42069
  • Loading branch information
Animal42069 authored and Mantas-2155X committed Dec 20, 2020
1 parent 277dac7 commit 9eaa1af
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 26 deletions.
62 changes: 56 additions & 6 deletions AI_BetterHScenes/AI_BetterHScenes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ private enum Effector
RightFoot = 8
}

public const string VERSION = "2.5.7";
public const string VERSION = "2.5.8";

public new static ManualLogSource Logger;

Expand Down Expand Up @@ -79,7 +79,6 @@ private enum Effector
private static bool oldMapState;
private static LightShadows oldSunShadowsState;

public static AnimationOffsets animationOffsets;
private static bool shouldApplyOffsets;
public static string currentMotion;

Expand All @@ -90,12 +89,13 @@ private enum Effector
public static bool bTwoFootException = false;
public static bool useReplacements = false;

private static readonly List<string> siriReplaceList = new List<string>() { "ais_f_02", "ais_f_13", "ais_f_31", "ais_f_43", "ait_f_00", "ait_f_07" };
private static readonly List<string> kosiReplaceList = new List<string>() { "ais_f_27", "ais_f_28", "ais_f_29", "ais_f_35", "ais_f_36", "ais_f_37", "ais_f_38"};
private static readonly List<string> siriReplaceList = new List<string>() { "ais_f_02", "ais_f_13", "ais_f_31", "ais_f_43", "ait_f_00", "ait_f_07" };
private static readonly List<string> kosiReplaceList = new List<string>() { "ais_f_27", "ais_f_28", "ais_f_29", "ais_f_35", "ais_f_36", "ais_f_37", "ais_f_38" };
private static readonly List<string> huggingReplaceList = new List<string>() { "h2s_f_12", "h2s_f_13" };
private static readonly List<string> footReplaceList = new List<string>() { "aih_f_08", "aih_f_24", "aih_f_28" };
private static readonly List<string> rightKokanReplaceList = new List<string>() { "aia_f_09", "aia_f_14", "aia_f_21" };
private static readonly List<string> rightKokanReplaceList = new List<string>() { "aia_f_14", "aia_f_21" };
private static readonly List<string> leftKokanReplaceList = new List<string>() { "aia_f_15", "aia_f_20" };
private static readonly List<string> rightKosiReplaceList = new List<string>() { "aia_f_09" };
private static readonly List<string> leftKosiReplaceList = new List<string>() { "aia_f_16" };

//-- Draggers --//
Expand Down Expand Up @@ -283,7 +283,6 @@ private void Awake()
};

shouldApplyOffsets = false;
animationOffsets = new AnimationOffsets();
HSceneOffset.LoadOffsetsFromFile();

harmony = new Harmony(nameof(AI_BetterHScenes));
Expand Down Expand Up @@ -601,6 +600,39 @@ public static void HScene_EndProc_Patch()

Console.WriteLine(ex);
}

// clear out everything that was initialized by SetStartVoice

hScene = null;
hFlagCtrl = null;
hSprite = null;
manager = null;
hCamera = null;

hSceneTrav = null;
listTrav = null;

characters = null;
maleCharacters = null;
femaleCharacters = null;
maleMotionList = null;

map = null;
sun = null;
collisionHelpers = null;

cameraShouldLock = false;
oldMapState = false;

shouldApplyOffsets = false;
currentMotion = null;

hProcMode = 0;
bBaseReplacement = false;
bIdleGlowException = false;
bFootJobException = false;
bTwoFootException = false;
useReplacements = false;
}

//-- Strip on start of H scene --//
Expand Down Expand Up @@ -720,6 +752,15 @@ private static void HScene_PreChangeAnimation()
{
if (applySavedOffsets.Value)
shouldApplyOffsets = true;

if (hScene == null)
return;

SliderUI.ClearBaseReplacements();
bBaseReplacement = false;
bIdleGlowException = false;
bFootJobException = false;
bTwoFootException = false;
}

[HarmonyPostfix, HarmonyPatch(typeof(HScene), "ChangeAnimation")]
Expand Down Expand Up @@ -934,6 +975,15 @@ public static void FixMotionList(string fileFemale)
bBaseReplacement = true;
bIdleGlowException = true;
}
else if (rightKosiReplaceList.Contains(fileFemale))
{
Transform rightContact = femaleCharacters[0].GetComponentsInChildren<Transform>().Where(x => x.name.Contains("k_f_kosi02_00")).FirstOrDefault();
if (rightContact != null)
SliderUI.SetBaseReplacement(0, (int)BodyPart.RightHand, rightContact);

bBaseReplacement = true;
bIdleGlowException = true;
}
else if (leftKosiReplaceList.Contains(fileFemale))
{
Transform leftContact = femaleCharacters[0].GetComponentsInChildren<Transform>().Where(x => x.name.Contains("k_f_kosi02_00")).FirstOrDefault();
Expand Down
19 changes: 11 additions & 8 deletions AI_BetterHScenes/HSceneOffset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ namespace AI_BetterHScenes
{
public static class HSceneOffset
{
public static AnimationOffsets animationOffsets;

//-- Apply character offsets for current animation, if they can be found --//
public static void ApplyCharacterOffsets()
{
Expand All @@ -30,7 +32,7 @@ public static void ApplyCharacterOffsets()
characterPairName += "_" + character.fileParam.fullname;
}

var animationList = AI_BetterHScenes.animationOffsets.Animations.Find(x => x.AnimationName == currentAnimation);
var animationList = animationOffsets.Animations.Find(x => x.AnimationName == currentAnimation);
if (animationList != null && characterPairName != null)
{
MotionList motionList;
Expand Down Expand Up @@ -102,11 +104,11 @@ public static void SaveCharacterPairPosition(CharacterPairList characterPair, bo

AI_BetterHScenes.Logger.LogMessage("Saving Offsets for " + currentAnimation + " Motion " + motion + " for characters " + characterPair);

var animation = AI_BetterHScenes.animationOffsets.Animations.Find(x => x.AnimationName == currentAnimation);
var animation = animationOffsets.Animations.Find(x => x.AnimationName == currentAnimation);

if (animation != null)
{
AI_BetterHScenes.animationOffsets.Animations.Remove(animation);
animationOffsets.Animations.Remove(animation);

var motionList = animation.MotionList.Find(x => x.MotionName == motion);
if (motionList != null)
Expand All @@ -127,23 +129,23 @@ public static void SaveCharacterPairPosition(CharacterPairList characterPair, bo
animation.MotionList.Add(motionList);
}

AI_BetterHScenes.animationOffsets.AddCharacterAnimationsList(animation);
animationOffsets.AddCharacterAnimationsList(animation);
}
else
{
animation = new AnimationsList(currentAnimation);
var motionList = new MotionList(motion);
motionList.CharacterPairList.Add(characterPair);
animation.MotionList.Add(motionList);
AI_BetterHScenes.animationOffsets.AddCharacterAnimationsList(animation);
animationOffsets.AddCharacterAnimationsList(animation);
}

SaveOffsetsToFile();
}

private static void SaveOffsetsToFile()
{
if (AI_BetterHScenes.animationOffsets == null)
if (animationOffsets == null)
return;

// Create an XML serializer so we can store the offset configuration in an XML file
Expand All @@ -155,7 +157,7 @@ private static void SaveOffsetsToFile()
{
// Store the setup data
OffsetFile = new StreamWriter(AI_BetterHScenes.offsetFile.Value);
serializer.Serialize(OffsetFile, AI_BetterHScenes.animationOffsets);
serializer.Serialize(OffsetFile, animationOffsets);
// serializer.Serialize(fileStream, offsets);
}
catch
Expand All @@ -175,13 +177,14 @@ public static void LoadOffsetsFromFile()
{
// Create an XML serializer so we can read the offset configuration in an XML file
var serializer = new XmlSerializer(typeof(AnimationOffsets));
animationOffsets = new AnimationOffsets();

Stream OffsetFile;
try
{
// Read in the data
OffsetFile = new FileStream(AI_BetterHScenes.offsetFile.Value, FileMode.Open);
AI_BetterHScenes.animationOffsets = (AnimationOffsets)serializer.Deserialize(OffsetFile);
animationOffsets = (AnimationOffsets)serializer.Deserialize(OffsetFile);
}
catch
{
Expand Down
25 changes: 21 additions & 4 deletions HS2_BetterHScenes/HS2_BetterHScenes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ private enum Effector
RightFoot = 8
}

public const string VERSION = "2.5.7";
public const string VERSION = "2.5.8";

public new static ManualLogSource Logger;

Expand All @@ -74,7 +74,6 @@ private enum Effector
private static bool activeAnimationUI;
private static bool cameraShouldLock;

public static AnimationOffsets animationOffsets;
private static bool shouldApplyOffsets;
public static string currentMotion;

Expand All @@ -89,8 +88,9 @@ private enum Effector
private static readonly List<string> kosiReplaceList = new List<string>() { "ais_f_27", "ais_f_28", "ais_f_29", "ais_f_35", "ais_f_36", "ais_f_37", "ais_f_38"};
private static readonly List<string> huggingReplaceList = new List<string>() { "h2s_f_12", "h2s_f_13" };
private static readonly List<string> footReplaceList = new List<string>() { "aih_f_08", "aih_f_24", "aih_f_28" };
private static readonly List<string> rightKokanReplaceList = new List<string>() { "aia_f_09", "aia_f_14", "aia_f_21" };
private static readonly List<string> rightKokanReplaceList = new List<string>() { "aia_f_14", "aia_f_21" };
private static readonly List<string> leftKokanReplaceList = new List<string>() { "aia_f_15", "aia_f_20" };
private static readonly List<string> rightKosiReplaceList = new List<string>() { "aia_f_09" };
private static readonly List<string> leftKosiReplaceList = new List<string>() { "aia_f_16" };

//-- Draggers --//
Expand Down Expand Up @@ -238,7 +238,6 @@ private void Awake()
};

shouldApplyOffsets = false;
animationOffsets = new AnimationOffsets();
HSceneOffset.LoadOffsetsFromFile();

harmony = new Harmony(nameof(HS2_BetterHScenes));
Expand Down Expand Up @@ -559,6 +558,15 @@ private static void HScene_PreChangeAnimation()
{
if (applySavedOffsets.Value)
shouldApplyOffsets = true;

if (hScene == null)
return;

SliderUI.ClearBaseReplacements();
bBaseReplacement = false;
bIdleGlowException = false;
bFootJobException = false;
bTwoFootException = false;
}

[HarmonyPostfix, HarmonyPatch(typeof(HScene), "ChangeAnimation")]
Expand Down Expand Up @@ -819,6 +827,15 @@ public static void FixMotionList(string fileFemale)
bBaseReplacement = true;
bIdleGlowException = true;
}
else if (rightKosiReplaceList.Contains(fileFemale))
{
Transform rightContact = femaleCharacters[0].GetComponentsInChildren<Transform>().Where(x => x.name.Contains("k_f_kosi02_00")).FirstOrDefault();
if (rightContact != null)
SliderUI.SetBaseReplacement(0, (int)BodyPart.RightHand, rightContact);

bBaseReplacement = true;
bIdleGlowException = true;
}
else if (leftKosiReplaceList.Contains(fileFemale))
{
Transform leftContact = femaleCharacters[0].GetComponentsInChildren<Transform>().Where(x => x.name.Contains("k_f_kosi02_00")).FirstOrDefault();
Expand Down
19 changes: 11 additions & 8 deletions HS2_BetterHScenes/HSceneOffset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ namespace HS2_BetterHScenes
{
public static class HSceneOffset
{
private static AnimationOffsets animationOffsets;

//-- Apply character offsets for current animation, if they can be found --//
public static void ApplyCharacterOffsets()
{
Expand All @@ -30,7 +32,7 @@ public static void ApplyCharacterOffsets()
characterPairName += "_" + character.fileParam.fullname;
}

var animationList = HS2_BetterHScenes.animationOffsets.Animations.Find(x => x.AnimationName == currentAnimation);
var animationList = animationOffsets.Animations.Find(x => x.AnimationName == currentAnimation);
if (animationList != null && characterPairName != null)
{
MotionList motionList;
Expand Down Expand Up @@ -102,11 +104,11 @@ public static void SaveCharacterPairPosition(CharacterPairList characterPair, bo

HS2_BetterHScenes.Logger.LogMessage("Saving Offsets for " + currentAnimation + " Motion " + motion + " for characters " + characterPair);

var animation = HS2_BetterHScenes.animationOffsets.Animations.Find(x => x.AnimationName == currentAnimation);
var animation = animationOffsets.Animations.Find(x => x.AnimationName == currentAnimation);

if (animation != null)
{
HS2_BetterHScenes.animationOffsets.Animations.Remove(animation);
animationOffsets.Animations.Remove(animation);

var motionList = animation.MotionList.Find(x => x.MotionName == motion);
if (motionList != null)
Expand All @@ -127,23 +129,23 @@ public static void SaveCharacterPairPosition(CharacterPairList characterPair, bo
animation.MotionList.Add(motionList);
}

HS2_BetterHScenes.animationOffsets.AddCharacterAnimationsList(animation);
animationOffsets.AddCharacterAnimationsList(animation);
}
else
{
animation = new AnimationsList(currentAnimation);
var motionList = new MotionList(motion);
motionList.CharacterPairList.Add(characterPair);
animation.MotionList.Add(motionList);
HS2_BetterHScenes.animationOffsets.AddCharacterAnimationsList(animation);
animationOffsets.AddCharacterAnimationsList(animation);
}

SaveOffsetsToFile();
}

private static void SaveOffsetsToFile()
{
if (HS2_BetterHScenes.animationOffsets == null)
if (animationOffsets == null)
return;

// Create an XML serializer so we can store the offset configuration in an XML file
Expand All @@ -155,7 +157,7 @@ private static void SaveOffsetsToFile()
{
// Store the setup data
OffsetFile = new StreamWriter(HS2_BetterHScenes.offsetFile.Value);
serializer.Serialize(OffsetFile, HS2_BetterHScenes.animationOffsets);
serializer.Serialize(OffsetFile, animationOffsets);
// serializer.Serialize(fileStream, offsets);
}
catch
Expand All @@ -175,13 +177,14 @@ public static void LoadOffsetsFromFile()
{
// Create an XML serializer so we can read the offset configuration in an XML file
var serializer = new XmlSerializer(typeof(AnimationOffsets));
animationOffsets = new AnimationOffsets();

Stream OffsetFile;
try
{
// Read in the data
OffsetFile = new FileStream(HS2_BetterHScenes.offsetFile.Value, FileMode.Open);
HS2_BetterHScenes.animationOffsets = (AnimationOffsets)serializer.Deserialize(OffsetFile);
animationOffsets = (AnimationOffsets)serializer.Deserialize(OffsetFile);
}
catch
{
Expand Down

0 comments on commit 9eaa1af

Please sign in to comment.