// replace skipcinematic method to disable VR recenter after a cinematic. Only the player should initiate a recenter.
        public static bool SkipCinematic_Prefix(PlayerCinematicController __instance, Player player)
        {
            Traverse.Create(__instance).Field("player").SetValue(player); // set private player field
            if (player)
            {
                Transform playerTransform = player.GetComponent <Transform>();
                Transform MCCTransform    = MainCameraControl.main.GetComponent <Transform>();
                if (Traverse.Create(__instance).Method("UseEndTransform").GetValue <bool>()) // execute private bool method
                {
                    player.playerController.SetEnabled(false);

                    /*if (XRSettings.enabled)
                     * {
                     *  MainCameraControl.main.ResetCamera();
                     *  VRUtil.Recenter();
                     * }*/
                    playerTransform.position = __instance.endTransform.position;
                    playerTransform.rotation = __instance.endTransform.rotation;
                    MCCTransform.rotation    = playerTransform.rotation;
                }
                player.playerController.SetEnabled(true);
                player.cinematicModeActive = false;
            }
            if (__instance.informGameObject != null)
            {
                __instance.informGameObject.SendMessage("OnPlayerCinematicModeEnd", __instance, SendMessageOptions.DontRequireReceiver);
            }
            return(false); // don't execute original SkipCinematic method
        }
 void Start()
 {
     attackSource              = gameObject.AddComponent <AudioSource>();
     attackSource.minDistance  = 2f;
     attackSource.maxDistance  = 11f;
     attackSource.spatialBlend = 1f;
     attackSource.volume       = ECCHelpers.GetECCVolume();
     biteClipPool              = ECCAudio.CreateClipPool("TwisteelBite");
     cinematicClipPool         = ECCAudio.CreateClipPool("TwisteelCin");
     gameObject.SearchChild("Head").EnsureComponent <OnTouch>().onTouch = new OnTouch.OnTouchEvent();
     gameObject.SearchChild("Head").EnsureComponent <OnTouch>().onTouch.AddListener(OnTouch);
     playerDeathCinematic = gameObject.AddComponent <PlayerCinematicController>();
     playerDeathCinematic.animatedTransform  = gameObject.SearchChild("PlayerCam").transform;
     playerDeathCinematic.animator           = creature.GetAnimator();
     playerDeathCinematic.animParamReceivers = new GameObject[0];
 }
예제 #3
0
 void Start()
 {
     attackSource              = gameObject.AddComponent <AudioSource>();
     attackSource.minDistance  = 10f;
     attackSource.maxDistance  = 40f;
     attackSource.spatialBlend = 1f;
     attackSource.volume       = ECCHelpers.GetECCVolume();
     clipPool = ECCAudio.CreateClipPool("GulperAttack");
     gameObject.SearchChild("Mouth").GetComponent <OnTouch>().onTouch = new OnTouch.OnTouchEvent();
     gameObject.SearchChild("Mouth").GetComponent <OnTouch>().onTouch.AddListener(OnTouch);
     playerDeathCinematic = gameObject.AddComponent <PlayerCinematicController>();
     playerDeathCinematic.animatedTransform  = gameObject.SearchChild("PlayerCam").transform;
     playerDeathCinematic.animator           = creature.GetAnimator();
     playerDeathCinematic.animParamReceivers = new GameObject[0];
     throat = gameObject.SearchChild("Throat").transform;
 }
 // Currently we don't sync playerController.informGameObject but no problem could be found while testing.
 public CinematicControllerPrefab(PlayerCinematicController playerController)
 {
     animatedTransform       = playerController.animatedTransform;
     endTransform            = playerController.endTransform;
     onlyUseEndTransformInVr = playerController.onlyUseEndTransformInVr;
     playInVr = playerController.playInVr;
     playerViewAnimationName        = playerController.playerViewAnimationName;
     playerViewInterpolateAnimParam = playerController.playerViewInterpolateAnimParam;
     animParam                  = playerController.animParam;
     interpolateAnimParam       = playerController.interpolateAnimParam;
     interpolationTime          = playerController.interpolationTime;
     interpolationTimeOut       = playerController.interpolationTimeOut;
     receiversAnimParam         = playerController.receiversAnimParam;
     animParamReceivers         = playerController.animParamReceivers;
     interpolateDuringAnimation = playerController.interpolateDuringAnimation;
     animator = playerController.animator;
 }
    public static void Postfix(PlayerCinematicController __instance)
    {
        if (!__instance.TryGetComponent(out NitroxEntity entity))
        {
            if (!__instance.TryGetComponentInParent(out entity))
            {
                Log.Warn($"[PlayerCinematicController_Start_Patch] - No NitroxEntity for \"{__instance.GetFullHierarchyPath()}\" found!");
                return;
            }
        }

        if (!entity.gameObject.TryGetComponent(out MultiplayerCinematicReference reference))
        {
            reference = entity.gameObject.AddComponent <MultiplayerCinematicReference>();
        }

        reference.AddController(__instance);
    }
    public static void Prefix(PlayerCinematicController __instance)
    {
        if (!__instance.cinematicModeActive)
        {
            return;
        }

        if (!__instance.TryGetComponent(out NitroxEntity entity))
        {
            entity = __instance.GetComponentInParent <NitroxEntity>();
            if (!entity)
            {
                Log.Warn($"[{nameof(PlayerCinematicController_OnPlayerCinematicModeEnd_Patch)}] - No NitroxEntity for \"{__instance.GetFullHierarchyPath()}\" found!");
                return;
            }
        }

        int identifier = MultiplayerCinematicReference.GetCinematicControllerIdentifier(__instance.gameObject, entity.gameObject);

        Resolve <PlayerCinematics>().EndCinematicMode(playerId, entity.Id, identifier, __instance.playerViewAnimationName);
    }
 public static bool SkipCinematic_Prefix(PlayerCinematicController __instance, Player player)
 {
     Traverse.Create(__instance).Field("player").SetValue(player);
     if (player)
     {
         Transform component  = player.GetComponent <Transform>();
         Transform component2 = MainCameraControl.main.GetComponent <Transform>();
         if (Traverse.Create(__instance).Method("UseEndTransform", new object[0]).GetValue <bool>())
         {
             player.playerController.SetEnabled(false);
             component.position  = __instance.endTransform.position;
             component.rotation  = __instance.endTransform.rotation;
             component2.rotation = component.rotation;
         }
         player.playerController.SetEnabled(true);
         player.cinematicModeActive = false;
     }
     if (__instance.informGameObject != null)
     {
         __instance.informGameObject.SendMessage("OnPlayerCinematicModeEnd", __instance, SendMessageOptions.DontRequireReceiver);
     }
     return(false);
 }