Guest User

Sims 3 TendRegister

a guest
Feb 26th, 2023
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.61 KB | Source Code | 0 0
  1. using Sims3.Gameplay.Actors;
  2. using Sims3.Gameplay.Core;
  3. using Sims3.Gameplay.Interactions;
  4. using Sims3.Gameplay.Objects.Counters;
  5. using Sims3.Gameplay.Objects.Register;
  6. using Sims3.SimIFace;
  7. using System.Collections.Generic;
  8.  
  9. namespace HKnowles
  10. {
  11.     class TendRegister
  12.     {
  13.         [Tunable]
  14.         protected static bool kInstantiator;
  15.  
  16.         static TendRegister()
  17.         {
  18.             LoadSaveManager.ObjectGroupsPreLoad += new ObjectGroupsPreLoadHandler(OnPreload);
  19.         }
  20.  
  21.         private static void OnPreload()
  22.         {
  23.             ShoppingRegister.TendRegister.Singleton = new TendRegisterI.Definition();
  24.         }
  25.     }
  26.  
  27.     public class TendRegisterI : Interaction<Sim, ShoppingRegister>
  28.     {
  29.         public override bool Run()
  30.         {
  31.             StandardEntry();
  32.             EnterStateMachine("tendregister", "Enter", "x");
  33.             BeginCommodityUpdates();
  34.             AnimateSim("TendLoop");
  35.             mbInStateMachine = true;
  36.             bool flag = DoLoop(ExitReason.Default, new InsideLoopFunction(LoopCallback), null);
  37.             EndCommodityUpdates(flag);
  38.             bool flag2 = mbInStateMachine;
  39.             if (flag2)
  40.             {
  41.                 AnimateSim("Exit");
  42.             }
  43.             StandardExit();
  44.             return flag;
  45.         }
  46.  
  47.         public override void Init(ref InteractionInstanceParameters parameters)
  48.         {
  49.             parameters.Priority = new InteractionPriority(InteractionPriorityLevel.Zero);
  50.             base.Init(ref parameters);
  51.         }
  52.  
  53.         public void LoopCallback(StateMachineClient smc, LoopData ld)
  54.         {
  55.             bool flag = !Actor.SimDescription.HasActiveRole;
  56.             if (flag)
  57.             {
  58.                 Actor.AddExitReason(ExitReason.Finished);
  59.             }
  60.             else
  61.             {
  62.                 bool flag2 = mTimeToExitBehindTend < ld.mLifeTime;
  63.                 if (flag2)
  64.                 {
  65.                     bool flag3 = RandomUtil.RandomChance(ShoppingRegister.TendRegister.kChanceToStandBehindRegister);
  66.                     if (flag3)
  67.                     {
  68.                         bool flag4 = mbInStateMachine;
  69.                         if (flag4)
  70.                         {
  71.                             AnimateSim("Exit");
  72.                             mbInStateMachine = false;
  73.                         }
  74.                         bool flag5 = ((Counter)Target.Parent).RouteToObjectOnSurface(Actor, Target);
  75.                         if (flag5)
  76.                         {
  77.                             Actor.LoopIdle();
  78.                             mTimeToExitBehindTend = ld.mLifeTime + ShoppingRegister.TendRegister.kSimMinBehindRegister;
  79.                         }
  80.                     }
  81.                     else
  82.                     {
  83.                         bool flag6 = !mbInStateMachine;
  84.                         if (flag6)
  85.                         {
  86.                             Actor.Wander(ShoppingRegister.TendRegister.kMinWanderDistance, ShoppingRegister.TendRegister.kMaxWanderDistance, false, RouteDistancePreference.NoPreference, false);
  87.                             EnterStateMachine("tendregister", "Enter", "x");
  88.                             AnimateSim("TendLoop");
  89.                             mbInStateMachine = true;
  90.                         }
  91.                         else
  92.                         {
  93.                             float num = RandomUtil.GetFloat(100f);
  94.                             bool flag7 = Actor.GetDistanceToObject(Target) > ShoppingRegister.TendRegister.kMaxDistance;
  95.                             if (flag7)
  96.                             {
  97.                                 float @float = RandomUtil.GetFloat(ShoppingRegister.TendRegister.kMinRadiusDistance, ShoppingRegister.TendRegister.kMaxRadiusDistance);
  98.                                 Actor.RouteToObjectRadius(Target, @float);
  99.                             }
  100.                             else
  101.                             {
  102.                                 bool flag8 = (num -= ShoppingRegister.TendRegister.kWanderChance) < 0f;
  103.                                 if (flag8)
  104.                                 {
  105.                                     Actor.Wander(ShoppingRegister.TendRegister.kMinWanderDistance, ShoppingRegister.TendRegister.kMaxWanderDistance, false, RouteDistancePreference.NoPreference, false);
  106.                                 }
  107.                                 else
  108.                                 {
  109.                                     bool flag9 = num - ShoppingRegister.TendRegister.kLookAtSimChance < 0f;
  110.                                     if (flag9)
  111.                                     {
  112.                                         AnimateSim("HaltToTurn");
  113.                                         List<Sim> list = new List<Sim>(Sims3.Gameplay.Queries.GetObjects<Sim>(Actor.Position, ShoppingRegister.TendRegister.kMaxTurnToDistance));
  114.                                         list.Remove(Actor);
  115.                                         bool flag10 = list.Count > 0;
  116.                                         if (flag10)
  117.                                         {
  118.                                             Sim randomObjectFromList = RandomUtil.GetRandomObjectFromList(list);
  119.                                             Actor.RouteTurnToFace(randomObjectFromList.Position);
  120.                                         }
  121.                                         else
  122.                                         {
  123.                                             float num2 = 1.5707964f;
  124.                                             float float2 = RandomUtil.GetFloat(-num2, num2);
  125.                                             Vector3 vector = Quaternion.MakeFromEulerAngles(0f, float2, 0f).ToMatrix().TransformVector(Actor.ForwardVector);
  126.                                             Actor.RouteTurnToFace(vector + Actor.Position);
  127.                                         }
  128.                                     }
  129.                                 }
  130.                             }
  131.                         }
  132.                     }
  133.                 }
  134.             }
  135.         }
  136.  
  137.         public float mTimeToExitBehindTend;
  138.  
  139.         public bool mbInStateMachine;
  140.  
  141.         public static InteractionDefinition Singleton = new Definition();
  142.  
  143.         public class Definition : InteractionDefinition<Sim, ShoppingRegister, TendRegisterI>
  144.         {
  145.             public override bool Test(Sim a, ShoppingRegister target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
  146.             {
  147.                 return a.SimDescription.HasActiveRole && a.SimDescription.AssignedRole.RoleGivingObject == target;
  148.             }
  149.         }
  150.     }
  151. }
Advertisement
Add Comment
Please, Sign In to add comment