2020-05-30 06:10:31 +00:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using Verse ;
using RimWorld ;
using UnityEngine ;
namespace Rimworld_Animations {
class MainTabWindow_OffsetConfigure : MainTabWindow
{
2020-05-30 21:10:22 +00:00
public override Vector2 RequestedTabSize = > new Vector2 ( 505 , 340 ) ;
2020-05-30 06:10:31 +00:00
public override void DoWindowContents ( Rect inRect ) {
Rect position = new Rect ( inRect . x , inRect . y , inRect . width , inRect . height ) ;
Listing_Standard listingStandard = new Listing_Standard ( ) ;
listingStandard . Begin ( position ) ;
2020-05-30 21:10:22 +00:00
listingStandard . Label ( "Offset Manager" ) ;
listingStandard . GapLine ( ) ;
2020-05-30 06:10:31 +00:00
if ( Find . Selector . SingleSelectedThing is Pawn ) {
Pawn curPawn = Find . Selector . SingleSelectedThing as Pawn ;
if ( curPawn . TryGetComp < CompBodyAnimator > ( ) . isAnimating ) {
2020-05-31 19:03:30 +00:00
AnimationDef def = curPawn . TryGetComp < CompBodyAnimator > ( ) . CurrentAnimation ;
int ActorIndex = curPawn . TryGetComp < CompBodyAnimator > ( ) . ActorIndex ;
2020-05-30 21:10:22 +00:00
float offsetX = 0 , offsetZ = 0 , rotation = 0 ;
2020-05-30 06:10:31 +00:00
2020-05-31 19:03:30 +00:00
if ( AnimationSettings . offsets . ContainsKey ( def . defName + curPawn . def . defName + ActorIndex ) ) {
offsetX = AnimationSettings . offsets [ def . defName + curPawn . def . defName + ActorIndex ] . x ;
offsetZ = AnimationSettings . offsets [ def . defName + curPawn . def . defName + ActorIndex ] . y ;
2020-05-30 06:10:31 +00:00
} else {
2020-05-31 19:03:30 +00:00
AnimationSettings . offsets . Add ( def . defName + curPawn . def . defName + ActorIndex , new Vector2 ( 0 , 0 ) ) ;
2020-05-30 06:10:31 +00:00
}
2020-05-31 19:03:30 +00:00
if ( AnimationSettings . rotation . ContainsKey ( def . defName + curPawn . def . defName + ActorIndex ) ) {
rotation = AnimationSettings . rotation [ def . defName + curPawn . def . defName + ActorIndex ] ;
2020-05-30 21:10:22 +00:00
}
else {
2020-05-31 19:03:30 +00:00
AnimationSettings . rotation . Add ( def . defName + curPawn . def . defName + ActorIndex , 0 ) ;
2020-05-30 21:10:22 +00:00
}
2020-05-30 06:10:31 +00:00
2020-05-30 21:10:22 +00:00
listingStandard . Label ( "Offset for race " + curPawn . def . defName + " in actor position " + curPawn . TryGetComp < CompBodyAnimator > ( ) . ActorIndex + ( curPawn . TryGetComp < CompBodyAnimator > ( ) . Mirror ? " mirrored" : "" ) ) ;
2020-05-30 06:10:31 +00:00
if ( curPawn . def . defName = = "Human" ) {
listingStandard . Label ( "Warning--You generally don't want to change human offsets, only alien offsets" ) ;
}
listingStandard . Label ( "X Offset: " + offsetX ) ;
offsetX = listingStandard . Slider ( offsetX , - 10 , 10 ) ;
listingStandard . Label ( "Z Offset: " + offsetZ ) ;
offsetZ = listingStandard . Slider ( offsetZ , - 10 , 10 ) ;
2020-05-30 21:10:22 +00:00
listingStandard . Label ( "Rotation: " + rotation ) ;
rotation = listingStandard . Slider ( rotation , - 180 , 180 ) ;
if ( listingStandard . ButtonText ( "Reset All" ) ) {
offsetX = 0 ;
offsetZ = 0 ;
rotation = 0 ;
}
2020-05-31 19:03:30 +00:00
if ( offsetX ! = AnimationSettings . offsets [ def . defName + curPawn . def . defName + ActorIndex ] . x | | offsetZ ! = AnimationSettings . offsets [ def . defName + curPawn . def . defName + ActorIndex ] . y ) {
AnimationSettings . offsets [ def . defName + curPawn . def . defName + ActorIndex ] = new Vector2 ( offsetX , offsetZ ) ;
2020-05-30 06:10:31 +00:00
}
2020-05-30 21:10:22 +00:00
2020-05-31 19:03:30 +00:00
if ( rotation ! = AnimationSettings . rotation [ def . defName + curPawn . def . defName + ActorIndex ] ) {
AnimationSettings . rotation [ def . defName + curPawn . def . defName + ActorIndex ] = rotation ;
2020-05-30 21:10:22 +00:00
}
2020-05-30 06:10:31 +00:00
}
}
2020-05-30 21:10:22 +00:00
else {
listingStandard . Label ( "Select a pawn currently in an animation to change their offsets" ) ;
}
2020-05-30 06:10:31 +00:00
listingStandard . End ( ) ;
base . DoWindowContents ( inRect ) ;
}
2020-05-31 19:03:30 +00:00
public override void PreOpen ( ) {
base . PreOpen ( ) ;
if ( AnimationSettings . offsets = = null ) {
Log . Message ( "New offsets" ) ;
AnimationSettings . offsets = new Dictionary < string , Vector2 > ( ) ;
}
if ( AnimationSettings . rotation = = null ) {
Log . Message ( "New rotation" ) ;
AnimationSettings . rotation = new Dictionary < string , float > ( ) ;
}
}
public override void PostClose ( ) {
base . PostClose ( ) ;
LoadedModManager . GetMod < RJW_Animations > ( ) . WriteSettings ( ) ;
}
2020-05-30 06:10:31 +00:00
}
}