/// <summary> /// Calculates body scale factors based on body type /// </summary> /// <param name="pawn">Which pawn to measure for</param> /// <returns>Width factor as First, height factor as second</returns> public static Vector2 GetCollisionBodyFactors(Pawn pawn) { if (pawn == null) { Log.Error("CE calling GetCollisionBodyHeightFactor with nullPawn"); return(new Vector2(1, 1)); } var factors = BoundsInjector.ForPawn(pawn); if (pawn.GetPosture() != PawnPosture.Standing) { RacePropertiesExtensionCE props = pawn.def.GetModExtension <RacePropertiesExtensionCE>() ?? new RacePropertiesExtensionCE(); var shape = props.bodyShape; if (shape == CE_BodyShapeDefOf.Invalid) { Log.ErrorOnce("CE returning BodyType Undefined for pawn " + pawn.ToString(), 35000198 + pawn.GetHashCode()); } factors.x *= shape.widthLaying / shape.width; factors.y *= shape.heightLaying / shape.height; } return(factors); }
/// <summary> /// Calculates body scale factors based on body type /// </summary> /// <param name="pawn">Which pawn to measure for</param> /// <returns>Width factor as First, height factor as second</returns> public static Pair <float, float> GetCollisionBodyFactors(Pawn pawn) { if (pawn == null) { Log.Error("CE calling GetCollisionBodyHeightFactor with nullPawn"); return(new Pair <float, float>(1, 1)); } RacePropertiesExtensionCE props = pawn.def.GetModExtension <RacePropertiesExtensionCE>() ?? new RacePropertiesExtensionCE(); var shape = props.bodyShape; if (shape == CE_BodyShapeDefOf.Invalid) { Log.ErrorOnce("CE returning BodyType Undefined for pawn " + pawn.ToString(), 35000198 + pawn.GetHashCode()); } if (pawn.GetPosture() != PawnPosture.Standing) { return(new Pair <float, float>(shape.widthLaying, shape.heightLaying)); } return(new Pair <float, float>(shape.width, shape.height)); }