Beispiel #1
0
        static bool Prefix(Character originalAvatar, string dollName, DollRoom __instance, ref Character __result, Transform ___m_CharacterPlaceholder)
        {
            try
            {
                Character character = new GameObject(string.Format("Doll [{0}]", dollName)).AddComponent <Character>();
                character.transform.localScale = originalAvatar.transform.localScale;
                character.IsInDollRoom         = true;
                character.AnimatorPrefab       = originalAvatar.AnimatorPrefab;
                character.Skeleton             = originalAvatar.Skeleton;
                character.AnimationSet         = originalAvatar.AnimationSet;
                Action <Character> callback = (Character c) => AccessTools.Method(__instance.GetType(), "OnCharacterUpdated").Invoke(__instance, new object[] { c });
                character.OnUpdated += callback;
                //Copy BakedCharacter
                character.BakedCharacter = originalAvatar.BakedCharacter;
                character.CopyEquipmentFrom(originalAvatar);

                var inventory_scale = __instance?.Unit?.Blueprint?.GetComponent <ChangeUnitScaleForInventory>();
                if (inventory_scale != null)
                {
                    character.transform.localScale = originalAvatar.transform.localScale * inventory_scale.scale_factor;
                }
                character.Start();
                character.Animator.gameObject.AddComponent <UnitAnimationCallbackReceiver>();

                character.Animator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
                if (character.AnimationManager)
                {
                    character.AnimationManager.PlayableGraph.SetTimeUpdateMode(DirectorUpdateMode.UnscaledGameTime);
                    character.AnimationManager.IsInCombat = true;
                    character.AnimationManager.Tick();
                }
                character.transform.SetParent(___m_CharacterPlaceholder, false);
                character.Mirror = originalAvatar.Mirror;
                character.transform.localRotation = Quaternion.Euler(0f, (float)((!originalAvatar.Mirror) ? -45 : 45), 0f);
                __result = character;
            }
            catch (Exception ex)
            {
                Main.logger.Log(ex.ToString());
            }
            return(false);
        }