mirror of
https://gitgud.io/AbstractConcept/rimworld-animations-patch.git
synced 2024-08-15 00:43:27 +00:00
v2.0.6
- Fixed an issue where body addons with custom sizes were not scaling correctly - Added additional debugging option which disables the patching of c0ffeeee's animation system - to be used to assist in determining if bugs or other issues are related to this patching
This commit is contained in:
parent
003b67fb97
commit
e139ff14fb
14 changed files with 60 additions and 29 deletions
|
@ -85,7 +85,7 @@ namespace Rimworld_Animations_Patch
|
|||
// Replacement patch for AlienRace to draw the body addons
|
||||
public static bool Prefix_DrawAddons(PawnRenderFlags renderFlags, Vector3 vector, Vector3 headOffset, Pawn pawn, Quaternion quat, Rot4 rotation)
|
||||
{
|
||||
if (!(pawn.def is ThingDef_AlienRace alienProps) || renderFlags.FlagSet(PawnRenderFlags.Invisible)) return false;
|
||||
if (!(pawn.def is ThingDef_AlienRace alienProps) || renderFlags.FlagSet(PawnRenderFlags.Invisible)) return true;
|
||||
|
||||
// Get actor components and body addons
|
||||
List<AlienPartGenerator.BodyAddon> bodyAddons = alienProps.alienRace.generalSettings.alienPartGenerator.bodyAddons;
|
||||
|
@ -99,8 +99,7 @@ namespace Rimworld_Animations_Patch
|
|||
{ ApparelAnimationUtility.TryToDrawApparelOnFloor(pawn); }
|
||||
|
||||
// Exit clauses
|
||||
if (BasicSettings.useLegacyAnimationSystem || AnimationPatchUtility.ShouldNotAnimatePawn(pawn) || sexDataComp == null)
|
||||
{ return true; }
|
||||
if (BasicSettings.useLegacyAnimationSystem || AnimationPatchUtility.ShouldNotAnimatePawn(pawn) || sexDataComp == null) return true;
|
||||
|
||||
// Get available hands
|
||||
int handsAvailableCount = sexDataComp.GetNumberOfHands();
|
||||
|
@ -146,26 +145,13 @@ namespace Rimworld_Animations_Patch
|
|||
}
|
||||
|
||||
float combinedAngle = MathUtility.ClampAngle(bodyAngle + bodyAddonAngle);
|
||||
|
||||
Vector3 vector_ = vector;
|
||||
Vector3 headOffset_ = bodyAddonDatum.alignsWithHead ? headOffset : Vector3.zero;
|
||||
Vector3 bodyAddonOffset_ = bodyAddonDatum.GetOffset(apparentRotation).RotatedBy(angle: bodyAngle);
|
||||
|
||||
if (pawn.ageTracker.Adult == false)
|
||||
{
|
||||
float bodySize = AnimationPatchUtility.GetBodySize(pawn);
|
||||
addonGraphic.drawSize = new Vector2(1.5f * bodySize, 1.5f * bodySize); // Doesn't seem to be a need to scale by body part draw size (re: Orassians)
|
||||
|
||||
Vector2 multi = AnimationPatchUtility.GetRaceSpecificOffsetMultipliers(pawn, bodyAddon.bodyPart);
|
||||
bodyAddonOffset_.x *= bodySize * multi.x;
|
||||
bodyAddonOffset_.z *= bodySize * multi.y;
|
||||
}
|
||||
|
||||
Vector3 bodyAddonPosition = vector_ + headOffset_ + bodyAddonOffset_;
|
||||
Vector3 bodyAddonPosition = vector + (bodyAddonDatum.alignsWithHead ? headOffset : Vector3.zero) + bodyAddonDatum.GetOffset(apparentRotation).RotatedBy(angle: bodyAngle);
|
||||
|
||||
// Draw the addon if visible
|
||||
if (canDraw)
|
||||
{
|
||||
addonGraphic.drawSize = AnimationPatchUtility.DetermineDrawSize(pawn, alienComp, bodyAddon, bodyAddonDatum, renderFlags.FlagSet(PawnRenderFlags.Portrait));
|
||||
|
||||
GenDraw.DrawMeshNowOrLater(mesh: addonGraphic.MeshAt(rot: apparentRotation),
|
||||
loc: bodyAddonPosition,
|
||||
quat: Quaternion.AngleAxis(angle: combinedAngle, axis: Vector3.up),
|
||||
|
|
|
@ -81,7 +81,10 @@ namespace Rimworld_Animations_Patch
|
|||
|
||||
listingStandard.CheckboxLabeled("hide_names_for_sex".Translate(), ref BasicSettings.hideNamesForSex, "hide_names_for_sex_desc".Translate());
|
||||
listingStandard.CheckboxLabeled("debug_mode".Translate(), ref BasicSettings.debugMode, "debug_mode_desc".Translate());
|
||||
|
||||
|
||||
if (BasicSettings.debugMode)
|
||||
{ listingStandard.CheckboxLabeled("use_legacy_animation_system".Translate(), ref BasicSettings.useLegacyAnimationSystem, "use_legacy_animation_system_desc".Translate()); }
|
||||
|
||||
listingStandard.Gap(10f);
|
||||
listingStandard.Label("rimworld_animation_patch_animation".Translate());
|
||||
listingStandard.Gap(5f);
|
||||
|
|
|
@ -7,6 +7,7 @@ using HarmonyLib;
|
|||
using Verse;
|
||||
using Rimworld_Animations;
|
||||
using rjw;
|
||||
using AlienRace;
|
||||
|
||||
namespace Rimworld_Animations_Patch
|
||||
{
|
||||
|
@ -184,6 +185,34 @@ namespace Rimworld_Animations_Patch
|
|||
return 1f;
|
||||
}
|
||||
|
||||
public static Vector2 DetermineDrawSize(Pawn pawn, AlienPartGenerator.AlienComp alienComp, AlienPartGenerator.BodyAddon bodyAddon, BodyAddonData bodyAddonData, bool isPortrait)
|
||||
{
|
||||
Vector2 drawSize = isPortrait && bodyAddon.drawSizePortrait != Vector2.zero ? bodyAddon.drawSizePortrait : bodyAddon.drawSize;
|
||||
|
||||
if (bodyAddon.scaleWithPawnDrawsize)
|
||||
{
|
||||
if (isPortrait && bodyAddonData.alignsWithHead)
|
||||
{ drawSize *= alienComp.customPortraitHeadDrawSize; }
|
||||
|
||||
else if (bodyAddonData.alignsWithHead)
|
||||
{ drawSize *= alienComp.customHeadDrawSize; }
|
||||
|
||||
else if (isPortrait)
|
||||
{ drawSize *= alienComp.customPortraitDrawSize; }
|
||||
|
||||
else
|
||||
{ drawSize *= alienComp.customDrawSize; }
|
||||
}
|
||||
|
||||
if (ModsConfig.BiotechActive)
|
||||
{ drawSize *= pawn.ageTracker.CurLifeStage.bodyWidth ?? 1.5f; }
|
||||
|
||||
else
|
||||
{ drawSize *= 1.5f; }
|
||||
|
||||
return drawSize;
|
||||
}
|
||||
|
||||
private static Dictionary<string, Vector3> raceSpecificChildMultipliers = new Dictionary<string, Vector3>()
|
||||
{
|
||||
{ "Alien_Orassan", new Vector3(1.4f, 1.4f, 1.4f) },
|
||||
|
|
|
@ -70,6 +70,16 @@ namespace Rimworld_Animations_Patch
|
|||
return false;
|
||||
}
|
||||
|
||||
public static RJWPreferenceSettings.Clothing GetClothingPreference(Pawn pawn)
|
||||
{
|
||||
var clothingPreference = pawn.IsInBed(out Building bed) ? RJWPreferenceSettings.sex_wear : ApparelSettings.apparelWornForQuickies;
|
||||
|
||||
if (xxx.has_quirk(pawn, "Endytophile"))
|
||||
{ clothingPreference = RJWPreferenceSettings.Clothing.Clothed; }
|
||||
|
||||
return clothingPreference;
|
||||
}
|
||||
|
||||
public static void DetermineApparelToKeepOn(Pawn pawn)
|
||||
{
|
||||
if (pawn?.apparel?.WornApparel == null) return;
|
||||
|
@ -81,10 +91,7 @@ namespace Rimworld_Animations_Patch
|
|||
}
|
||||
|
||||
ActorAnimationData animData = pawn.GetAnimationData();
|
||||
var clothingPreference = pawn.IsInBed(out Building bed) ? RJWPreferenceSettings.sex_wear : ApparelSettings.apparelWornForQuickies;
|
||||
|
||||
if (xxx.has_quirk(pawn, "Endytophile"))
|
||||
{ clothingPreference = RJWPreferenceSettings.Clothing.Clothed; }
|
||||
var clothingPreference = GetClothingPreference(pawn);
|
||||
|
||||
// Get naked for rituals and parties
|
||||
bool undressForRitual = pawn.GetLord() != null && pawn.GetLord().LordJob is LordJob_Ritual;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue