Example #1
0
		public void Start ()
		{	
			// initialize tables
			EventReader.GetInstance();
			ReactionReader.GetInstance();
			SequenceReader.GetInstance();
			AffectedActionReader.GetInstance();
			MoodPointsReader.GetInstance();
			ReactionTrackingReader.GetInstance();
			TutorialReader.GetInstance();
			
			ResponseManager.Instance.HideIcon();
			InstructionsManager.Instance.HideInstruction();
			
			// hold instance
			m_instance = this;
			
			//Load intro rocks
			m_introRock = Instantiate( Resources.Load( "AnimationTool/INTRO_ROCK" ) ) as GameObject;
			m_introRock.SetActive( false );
			
			// init anim controller utility
			GameObject cfController = GameObject.Find("CAREPLAY_NF_Controller") as GameObject;
			cfController.AddComponent<CarePlayNFController>();
			cfController.AddComponent<BiteItemController>();
			
			// init cam controller utility
			m_cameraController = GameObject.Find ("CAREPLAY_Cam_Controller").GetComponent<CameraRigController>();
			
			// init dragon
			m_petDragon = GameObject.FindGameObjectWithTag("PetDragon") as GameObject;
			m_petDragon.gameObject.AddComponent<DragonScript>();
			m_petDragon.gameObject.AddComponent<DragonAnimation>();
			m_petDragon.gameObject.AddComponent<Dragon>();
			m_petDragon.gameObject.AddComponent<JawCruncherStateController>();

			m_jcController = m_petDragon.gameObject.GetComponent<JawCruncherStateController>();
			
			// init gestures
			m_mainCamera = GameObject.FindGameObjectWithTag("MainCamera").gameObject;
			m_mainCamera.AddComponent<GestureManager>();
			m_gestureManager = Camera.mainCamera.gameObject.GetComponent<GestureManager>();
			m_gestureManager.g_pettingListener = this.GestureListener;
			m_gestureManager.SetPettingDelegate(this);
			CameraController.Instance.SetPettingDelegate(this);
			//m_gestureManager.DisableGestures();
			
			// init bridge items
			m_sheepManager 			= GameObject.Find("SheepManager").GetComponent<SheepManager>();
			m_sheepManager.InitializeSheep();
			
			// init dragon collider
			GameObject HeadCollider = (GameObject)Resources.Load("Prefabs/Petting/DragonColliders/HeadCollider");
			GameObject BodyCollider = (GameObject)Resources.Load("Prefabs/Petting/DragonColliders/BodyCollider");
			m_dragonHeadCollider 	= GameObject.Instantiate(HeadCollider) as GameObject;
			m_dragonBodyCollider 	= GameObject.Instantiate(BodyCollider) as GameObject;
			
			m_dragonHeadCollider.transform.parent = m_petDragon.transform.Find("joint_Spine/joint_Neck/joint_Head").transform;
			m_dragonHeadCollider.name = "HeadCollider";
			m_dragonHeadCollider.transform.localPosition 	= new Vector3(-0.00785967f, -0.03883493f, 0.2275544f);
			m_dragonHeadCollider.transform.localRotation 	= Quaternion.Euler(new Vector3(335.4119f, 184.195f, 1.887401f));
			m_dragonHeadCollider.transform.localScale 		= new Vector3(0.6969064f, 0.4911779f, 1.063113f);
			m_dragonBodyCollider.transform.parent = m_petDragon.transform.Find("joint_Spine").transform;
			m_dragonBodyCollider.name = "BodyCollider";
			m_dragonBodyCollider.transform.localPosition 	= new Vector3(0.0176101f, -0.2866409f, -0.8635432f);
			m_dragonBodyCollider.transform.localRotation 	= Quaternion.Euler(new Vector3(270.0f, 180.0f, 0.0f));
			//m_dragonBodyCollider.transform.localScale 		= new Vector3(1.043613f, 1.421112f, 1.043613f);
			
			//init camera focus point
			m_cameraFocusPoint = new GameObject ( "FocusPoint" );
			m_cameraFocusPoint.tag = "ToothlessFocusPoint";
			GameObject toothlessAxis = GameObject.Find("joint_Spine");
			m_cameraFocusPoint.transform.parent = toothlessAxis.transform;
			m_cameraFocusPoint.transform.position = toothlessAxis.transform.position;
			m_cameraFocusPoint.transform.rotation = Quaternion.identity;
			
			//Sound audio source container
			m_headSoundContainer = new GameObject( "SoundContainer_Head" );
			m_headSoundContainer.transform.parent = toothlessAxis.transform;
			m_headSoundContainer.transform.position = toothlessAxis.transform.position;
			m_headSoundContainer.transform.rotation = Quaternion.identity;
			
			m_bodySoundContainer = new GameObject( "SoundContainer_Body" );
			m_bodySoundContainer.transform.parent = toothlessAxis.transform;
			m_bodySoundContainer.transform.position = toothlessAxis.transform.position;
			m_bodySoundContainer.transform.rotation = Quaternion.identity;
			
			m_headAndBodySoundContainer = new GameObject( "SoundContainer_HeadAndBody" );
			m_headAndBodySoundContainer.transform.parent = toothlessAxis.transform;
			m_headAndBodySoundContainer.transform.position = toothlessAxis.transform.position;
			m_headAndBodySoundContainer.transform.rotation = Quaternion.identity;
			
			// Camera Look Points
			GameObject cHead		  		= new GameObject( "CamPlayerHead" );
			GameObject cBody		  		= new GameObject( "CamPlayerBody" );
			GameObject cLeft		  		= new GameObject( "CamPlayerLeft" );
			GameObject cRight				= new GameObject( "CamPlayerRight" );
			
			cHead.tag 				  		= "CamPlayerHead";
			cBody.tag 				  		= "CamPlayerBody";
			cLeft.tag 				  		= "CamPlayerLeft";
			cRight.tag 				  		= "CamPlayerRight";
			
			cHead.transform.parent 			= m_mainCamera.gameObject.transform;
			cBody.transform.parent 			= m_mainCamera.gameObject.transform;
			cLeft.transform.parent 			= m_mainCamera.gameObject.transform;
			cRight.transform.parent 		= m_mainCamera.gameObject.transform;
			
			cHead.transform.localPosition 	= new Vector3( 0.0f, 0.30f, 0.0f );
			cBody.transform.localPosition 	= new Vector3( 0.0f, -0.30f, 0.0f );
			cLeft.transform.localPosition 	= new Vector3( -1.2f, 0.0f, 0.0f );
			cRight.transform.localPosition 	= new Vector3( 1.2f, 0.0f, 0.0f );
			
			cHead.transform.localScale 		= new Vector3( 0.001f, 0.001f, 0.001f );
			cBody.transform.localScale 		= new Vector3( 0.001f, 0.001f, 0.001f );
			cLeft.transform.localScale 		= new Vector3( 0.001f, 0.001f, 0.001f );
			cRight.transform.localScale 	= new Vector3( 0.001f, 0.001f, 0.001f );
			
			
			// Dragon Look Points
			GameObject lookL 				= new GameObject( "DLookL" );
			GameObject lookR 				= new GameObject( "DLookR" );
			
			lookL.tag						= "DLookL";
			lookR.tag						= "DLookR";
			
			lookL.transform.parent 			= m_petDragon.transform;
			lookL.transform.position 		= new Vector3( 3.50f, 2.00f, -1.00f );
			
			lookR.transform.parent 			= m_petDragon.transform;
			lookR.transform.position 		= new Vector3( -3.50f, 2.00f, -1.00f );
			
			// init ui
			m_uiRefs						= new Hashtable();
			m_carePlayUI 					= GameObject.Find("CareAndPlayHUD") as GameObject;
			m_carePlayUI.GetComponent<CareAndPlayHUD>();
			m_carePlayUI.GetComponent<GamePauseManager>().PauseCallBack = this.PauseGame;
			
			m_carePlayTab					= GameObject.Find("MainTab") as GameObject;
			
			m_uiManager						= m_carePlayUI.AddComponent<CarePlayUIManager>();
			m_uiManager.Initialize();
			m_uiManager.SetCB_Call(this.OnDragonCall);
			m_uiManager.SetCB_Book(this.OnBookOfDragon);
			m_uiManager.SetCB_Inventory(this.OnInventory);
			m_uiManager.SetCB_Inventory_Close(this.OnInventoryClose);
			m_uiManager.SetCB_Map(this.OnMap);
			m_uiManager.SetCB_Profile(this.OnProfile);
			m_uiManager.SetCB_Profile_Close(this.OnProfileClose);
			
			m_tabManager					= m_carePlayTab.GetComponent<CarePlayTabManager>();
			
			m_energyGauge 					= GameObject.Find("EnergyProgress") as GameObject;
			m_bondGauge						= GameObject.Find("BondProgress") as GameObject;
			m_energyBondUI					= GameObject.Find("EnergyBond") as GameObject;
			m_pauseUI						= GameObject.Find("PauseBTN") as GameObject;
			
			StatsManager.Instance.EnergyGauge	= m_energyGauge.GetComponent<EnergyProgress>();
			StatsManager.Instance.BondGauge		= m_bondGauge.GetComponent<BondProgress>();
			
			// UI finger tap
			m_uiFingerSingleTap				= GameObject.Find("SingleTapFinger") as GameObject;
			m_uiFingerDoubleTap 			= GameObject.Find("DoubleTapFinger") as GameObject;
			m_uiFingerHold					= GameObject.Find("HoldFinger") as GameObject;
			
			m_uiFingerSingleTap.transform.parent.localPosition = new Vector3( -6.043911e-05f, 319.0215f, 0f );
			
			m_uiFingerSingleTap.SetActive(false);
			m_uiFingerDoubleTap.SetActive(false);
			m_uiFingerHold.SetActive(false);
			
			// set inventory callbacks
			InventoryUIHandler.OnFeedingItemCallback 	= this.OnFeedingItem;
  			InventoryUIHandler.OnFetchingItemCallback 	= this.OnFetchingItem;
			InventoryUIHandler.OnCarePlayItemCallback 	= this.OnCarePlayItem;
			
			// set Hud Callback to enable gestures
			//m_carePlayUI.GetComponent<CareAndPlayHUD>().SetDialogCloseCB(m_gestureManager.EnableGestures);
			
			// init dragon animation controller
			m_dragonAnimScript = m_petDragon.gameObject.GetComponent<DragonScript>();
			m_dragonAnimScript.SetPettingDelegate(this);
			
			// init dragon animation
			m_dragonAnimation = m_petDragon.gameObject.GetComponent<DragonAnimation>();
			m_dragonAnimation.SetPettingDelegate(this);
			
			m_petDragon.GetComponent<JawCruncherStateController>().SetPettingDelegate( this );
			
			// init dragon animation tool
			DragonAnimationQueue.getInstance().SetDAnim(m_petDragon.gameObject.GetComponent<DragonAnimation>());
			DragonAnimationQueue.getInstance().SetPettingDelegate(this);
			
			// initialize DragonStateMachine
			m_dragonStateMachine = m_petDragon.gameObject.GetComponent<Dragon>();
			m_dragonStateMachine.SetPettingDelegate(this);
			m_dragonStateMachine.Initialize();
			
			// initialize DragonScript
			m_dragonAnimScript.Initialize();
			
			// Setup Pausables
			m_petDragon.AddComponent<Pausable>();
			m_mainCamera.AddComponent<Pausable>();
			
			// reset values
			StatsManager.Instance.DragonMode = StatsManager.MODE_NORMAL; // - LA
			//StatsManager.Instance.DragonMode = StatsManager.MODE_ACT1; // - LA
			
			// on start of touchplay, always set interactive to true
			m_dragonStateMachine.SetIsInteractible(true);
			
			// Swipe UI
			m_swipeUI				= GameObject.Find("SwipeUI");
			m_swipeHolder			= GameObject.Find("SwipeHolder");
			m_swipeFingerGO			= GameObject.Find("SwipeFinger");
			m_swipeFinger			= m_swipeFingerGO.GetComponent<TweenPosition>();
		    m_swipeUITexture		= m_swipeUI.GetComponent<UITexture>();
			m_swipeUITexture.alpha	= 0.3f;
			m_swipeHolder.SetActive(false);
			
			m_swipeUI.GetComponent<UITexture>().alpha 		= 0.5f;
			m_swipeFingerGO.GetComponent<UITexture>().alpha = 0.75f;
		
			
			//Double Tap UI
			m_doubleTapTweenPos 	= GameObject.Find("DoubleTapUI").GetComponent<TweenPosition>();
			
			GameObject successIcon	= GameObject.Find("SuccesIcon");
			UISprite spriteSucccessIcon = successIcon.GetComponent<UISprite>();
			spriteSucccessIcon.alpha = 0.0f;
			m_successIconTweenAlpha = successIcon.GetComponent<TweenAlpha>();
			m_successIconTweenAlpha.onFinished=ResetSuccesAnimation;
			
			// hide UIs
			this.HideUI("DCall");
			
			// Handle Timer for Usage Tracker
			m_usageTrackerScheduler = S6Scheduler.ScheduleAction( this, StatsManager.Instance.UpdateTrackers, 0.5f, S6Scheduler.INFINITE, false);
			
			// update dragon mood for Animation Controllers
			StatsManager.Instance.UpdateMood();
			
			// load objects
			// fish
			m_fishItems.Add(this.CreateObject( "Fish", 							"Prefabs/Feeding/FeedingFish", 1.0f));
			
			// chicken
			m_chickenItems.Add(this.CreateObject( "ChickenLeg", 				"Prefabs/Feeding/FeedingChickenLeg", 1.0f));
			m_chickenItems.Add(this.CreateObject( "ChickenThigh", 				"Prefabs/Feeding/FeedingChickenThigh", 1.0f));
			m_chickenItems.Add(this.CreateObject( "ChickenWing", 				"Prefabs/Feeding/FeedingChickenWing", 1.0f));
			
			// seafood
			m_seafoodItems.Add(this.CreateObject( "Crab", 						"Prefabs/Feeding/FeedingCrab", 1.0f));
			m_seafoodItems.Add(this.CreateObject( "Lobster", 					"Prefabs/Feeding/FeedingLobster", 1.0f));
			m_seafoodItems.Add(this.CreateObject( "Shrimp", 					"Prefabs/Feeding/FeedingShrimp", 1.0f));
			
			// fruits & veggies
			m_fruitsAndVeggiesItems.Add(this.CreateObject( "FruitsAndVeggies", 	"Prefabs/Feeding/FeedingOrange", 1.0f));
			m_fruitsAndVeggiesItems.Add(this.CreateObject( "FruitsAndVeggies", 	"Prefabs/Feeding/FeedingPeach", 1.0f));
			m_fruitsAndVeggiesItems.Add(this.CreateObject( "FruitsAndVeggies", 	"Prefabs/Feeding/FeedingTurnip", 1.0f));
			
			// fetching items
			m_fetchingItems.Add(this.CreateObject( "Boomerang", 				"Prefabs/Fetching/Boomerang", 1.0f));
			
			// adjust boomerang transform
			m_fetchingItems[0].transform.parent			= Camera.main.transform;
			m_fetchingItems[0].transform.localPosition 	= new Vector3( -0.05178565f, -0.51644f, 1.536007f );
			m_fetchingItems[0].transform.localRotation 	= Quaternion.Euler(new Vector3( 0.0f, 283.0f, 69.99999f ));
			
			// Handle disable/enable of gestures during hide/show of overlays
			// These methods are called during the initial add & remove of overlays.
			ScreenManager.Instance.OnDisplayOverlay = () => 
			{
				switch( TutorialController.GTutState )
				{
					case TutorialController.ETutorialState.BondMeterIntro:
					case TutorialController.ETutorialState.PlayerProfileIntro:
						// don't update gestures during this state of tutorial
					break;
					default:
						m_gestureManager.DisableGestures();
					break;
				}
			};
			
			ScreenManager.Instance.OnHideOverlay = () => 
			{
				switch( TutorialController.GTutState )
				{
					case TutorialController.ETutorialState.BondMeterIntro:
					case TutorialController.ETutorialState.PlayerProfileIntro:
						// don't update gestures during this state of tutorial
					break;
					default:
						m_gestureManager.EnableGestures();
					break;
				}
			};
			
			// Check Scenes
			this.HandleScenes();
		}
Example #2
0
 public bool IsUserControlAllowed(CameraRigController cameraRigController)
 {
     return(this.allowUserControl);
 }
Example #3
0
 public bool IsHudAllowed(CameraRigController cameraRigController)
 {
     return(this.allowUserHud);
 }
Example #4
0
        private static void SetCameraStateOverride(On.RoR2.CameraRigController.orig_SetCameraState orig, CameraRigController self, CameraState cameraState)
        {
            if (Run.instance)
            {
                if (self.cameraMode is RoR2.CameraModes.CameraModePlayerBasic)
                {
                    if (ModConfig.InitialFirstPersonValue)
                    {
                        if (!VRCameraWrapper.instance)
                        {
                            GameObject wrapperObject = new GameObject("VR Camera Rig");
                            VRCameraWrapper.instance = wrapperObject.AddComponent <VRCameraWrapper>();
                            VRCameraWrapper.instance.Init(self);
                        }

                        if (!self.cameraMode.IsSpectating(self) && self.cameraModeContext.targetInfo.isViewerControlled && self.targetBody)
                        {
                            VRCameraWrapper.instance.UpdateRotation(cameraState);
                            cameraState.rotation = self.sceneCam.transform.rotation;
                        }

                        if (self.targetBody.IsLocalBody())
                        {
                            if (!cachedCameraTargetTransform)
                            {
                                if (!ModConfig.InitialRoomscaleValue)
                                {
                                    ChildLocator childLocator = self.targetBody.modelLocator.modelTransform.GetComponent <ChildLocator>();
                                    if (childLocator)
                                    {
                                        cachedCameraTargetTransform = childLocator.FindChild("VRCamera");
                                    }
                                }

                                if (!cachedCameraTargetTransform)
                                {
                                    cachedCameraTargetTransform = new GameObject("VRCamera").transform;
                                    cachedCameraTargetTransform.SetParent(self.targetBody.transform);
                                    cachedCameraTargetTransform.localPosition = Vector3.zero;
                                    cachedCameraTargetTransform.localRotation = Quaternion.identity;

                                    CapsuleCollider collider = self.targetBody.GetComponent <CapsuleCollider>();

                                    if (collider)
                                    {
                                        if (ModConfig.InitialRoomscaleValue)
                                        {
                                            cachedCameraTargetTransform.Translate(collider.center + new Vector3(0, -collider.height / 2, 0), Space.Self);
                                        }
                                        else
                                        {
                                            cachedCameraTargetTransform.Translate(collider.center + new Vector3(0, collider.height / 2, 0), Space.Self);
                                        }
                                        VRCameraWrapper.instance.transform.localScale = Vector3.one * (collider.height / ModConfig.PlayerHeight.Value);
                                    }
                                }
                            }

                            VRCameraWrapper.instance.transform.position = self.hasOverride ? cameraState.position : cachedCameraTargetTransform.position;
                        }
                    }
                }

                if (!self.targetBody.IsLocalBody() && (SceneCatalog.mostRecentSceneDef.sceneType == SceneType.Stage || SceneCatalog.mostRecentSceneDef.sceneType == SceneType.Intermission) && Run.instance.livingPlayerCount > 0)
                {
                    if (!spectatorCamera)
                    {
                        Camera cameraReference = Camera.main;

                        bool cameraReferenceEnabled = cameraReference.enabled;
                        if (cameraReferenceEnabled)
                        {
                            cameraReference.enabled = false;
                        }
                        bool cameraReferenceActive = cameraReference.gameObject.activeSelf;
                        if (cameraReferenceActive)
                        {
                            cameraReference.gameObject.SetActive(false);
                        }

                        spectatorCamera = GameObject.Instantiate(cameraReference.gameObject, null);

                        Component[] components = spectatorCamera.GetComponents <Component>();

                        foreach (Component component in components)
                        {
                            if (!(component is Transform) && !(component is Camera) && !(component is PostProcessLayer) && !(component is RoR2.PostProcess.SobelCommandBuffer && !(component is ThreeEyedGames.DecaliciousRenderer)))
                            {
                                Component.Destroy(component);
                            }
                        }

                        spectatorCameraComponent = spectatorCamera.GetComponent <Camera>();
                        spectatorCameraComponent.stereoTargetEye = StereoTargetEyeMask.None;
                        spectatorCameraComponent.targetTexture   = spectatorCameraPrefab.GetComponent <Camera>().targetTexture;

                        if (cameraReferenceActive != cameraReference.gameObject.activeSelf)
                        {
                            cameraReference.gameObject.SetActive(cameraReferenceActive);
                        }
                        if (cameraReferenceEnabled != cameraReference.enabled)
                        {
                            cameraReference.enabled = cameraReferenceEnabled;
                        }

                        spectatorCamera.SetActive(true);
                        spectatorCameraComponent.enabled = true;
                        UnityEngine.XR.XRDevice.DisableAutoXRCameraTracking(spectatorCameraComponent, true);
                    }

                    if (!spectatorScreen)
                    {
                        spectatorScreen = GameObject.Instantiate(spectatorScreenPrefab, null);
                        Utils.SetLayerRecursive(spectatorScreen, LayerIndex.ui.intVal);
                        spectatorScreen.transform.rotation = Quaternion.Euler(new Vector3(0, self.uiCam.transform.eulerAngles.y, 0));
                        spectatorScreen.transform.position = self.uiCam.transform.position + spectatorScreen.transform.forward * 2;
                    }

                    spectatorCamera.transform.position   = cameraState.position;
                    spectatorCamera.transform.rotation   = cameraState.rotation;
                    spectatorCameraComponent.fieldOfView = cameraState.fov;
                }
                else
                {
                    if (spectatorCamera)
                    {
                        GameObject.Destroy(spectatorCamera);
                    }

                    if (spectatorScreen)
                    {
                        GameObject.Destroy(spectatorScreen);
                    }
                }
            }

            orig(self, cameraState);
        }
Example #5
0
        private static void InitCamera(On.RoR2.CameraRigController.orig_Start orig, CameraRigController self)
        {
            orig(self);

            if (self.sceneCam.cullingMask == (self.sceneCam.cullingMask | (1 << LayerIndex.triggerZone.intVal)))
            {
                self.sceneCam.cullingMask &= ~(1 << LayerIndex.triggerZone.intVal);
            }

            if (self.sceneCam.cullingMask == (self.sceneCam.cullingMask | (1 << LayerIndex.noDraw.intVal)))
            {
                self.sceneCam.cullingMask &= ~(1 << LayerIndex.noDraw.intVal);
            }

            if (self.gameObject.scene.name == "intro" && self.sceneCam.cullingMask == (self.sceneCam.cullingMask | (1 << LayerIndex.ui.intVal)))
            {
                self.sceneCam.cullingMask &= ~(1 << LayerIndex.ui.intVal);
            }

            if (Run.instance && ModConfig.UseConfortVignette.Value)
            {
                self.uiCam.gameObject.AddComponent <ConfortVignette>();
            }

            GameObject cameraOffsetObject = new GameObject("Camera Offset");

            cameraOffset = cameraOffsetObject.transform;
            cameraOffset.transform.SetParent(self.transform);
            cameraOffset.transform.localPosition = Vector3.zero;
            cameraOffset.transform.localRotation = Quaternion.identity;
            cameraOffset.transform.localScale    = Vector3.one;

            self.sceneCam.transform.SetParent(cameraOffset.transform);

            if (ModConfig.InitialRoomscaleValue && !Run.instance)
            {
                self.currentCameraState = self.desiredCameraState;
            }

            if (!ModConfig.InitialOculusModeValue && ModConfig.InitialRoomscaleValue)
            {
                if (liv)
                {
                    GameObject.Destroy(liv);
                }

                liv                   = self.gameObject.AddComponent <LIV.SDK.Unity.LIV>();
                liv.stage             = self.transform;
                liv.stageTransform    = cameraOffset.transform;
                liv.HMDCamera         = self.sceneCam;
                liv.excludeBehaviours = new string[]
                {
                    "AkAudioListener",
                    "Rigidbody",
                    "AkGameObj",
                    "CameraResolutionScaler",
                    "TranslucentImageSource"
                };
                liv.spectatorLayerMask = self.sceneCam.cullingMask;

                liv.enabled = true;
            }

            if (self.hud)
            {
                UIFixes.AdjustHUD(self.hud);
            }

            RoR2Application.instance.mainCanvas.worldCamera = self.uiCam;

            if (FocusChecker.instance)
            {
                FocusChecker.instance.UpdateCameraRig(self);
            }
        }
Example #6
0
 private static void RemoveCameraLerp(On.RoR2.CameraRigController.orig_SetOverrideCam orig, CameraRigController self, ICameraStateProvider newOverrideCam, float lerpDuration)
 {
     orig(self, newOverrideCam, 0);
 }
Example #7
0
            public void FixedUpdate()
            {
                if (NetworkServer.active)
                {
                    while (enemyFollowers.Count < stack)
                    {
                        GameObject enemyFollower = Object.Instantiate(enemyFollowerPrefab, body.corePosition, Quaternion.identity);
                        enemyFollower.GetComponent <GenericOwnership>().ownerObject = gameObject;
                        NetworkServer.Spawn(enemyFollower);
                        enemyFollowers.Add(enemyFollower.GetComponent <MysticsItemsSpotterController>());
                    }
                    while (enemyFollowers.Count > stack)
                    {
                        MysticsItemsSpotterController enemyFollower = enemyFollowers.Last();
                        NetworkServer.UnSpawn(enemyFollower.gameObject);
                        Object.Destroy(enemyFollower.gameObject);
                        enemyFollowers.Remove(enemyFollower);
                    }
                }
                cooldown -= Time.fixedDeltaTime;
                if (cooldown <= 0f)
                {
                    cooldown = cooldownMax;

                    if (NetworkServer.active)
                    {
                        bullseyeSearch.teamMaskFilter = TeamMask.allButNeutral;
                        bullseyeSearch.teamMaskFilter.RemoveTeam(body.teamComponent.teamIndex);
                        Ray ray = CameraRigController.ModifyAimRayIfApplicable(new Ray
                        {
                            origin    = body.inputBank.aimOrigin,
                            direction = body.inputBank.aimDirection
                        }, body.gameObject, out _);
                        bullseyeSearch.searchOrigin      = ray.origin;
                        bullseyeSearch.searchDirection   = ray.direction;
                        bullseyeSearch.viewer            = body;
                        bullseyeSearch.maxDistanceFilter = 200f;
                        bullseyeSearch.RefreshCandidates();
                        bullseyeSearch.FilterOutGameObject(body.gameObject);
                        List <HurtBox> enemies = bullseyeSearch.GetResults().ToList();

                        foreach (MysticsItemsSpotterController enemyFollower in enemyFollowers)
                        {
                            enemyFollower.ClearTarget();
                        }

                        if (enemies.Count > 0)
                        {
                            Util.PlaySound("Play_item_proc_spotter", gameObject);
                            foreach (MysticsItemsSpotterController enemyFollower in enemyFollowers)
                            {
                                GameObject newTarget = null;
                                while (newTarget == null && enemies.Count > 0)
                                {
                                    int     index            = Mathf.FloorToInt(enemies.Count * (Random.value * 0.99f));
                                    HurtBox newTargetHurtBox = enemies.ElementAt(index);
                                    enemies.RemoveAt(index);
                                    if (newTargetHurtBox.healthComponent && newTargetHurtBox.healthComponent.body)
                                    {
                                        CharacterBody newTargetBody = newTargetHurtBox.healthComponent.body;
                                        if (!newTargetBody.HasBuff(buffDef))
                                        {
                                            newTarget = newTargetBody.gameObject;
                                        }
                                    }
                                }
                                if (newTarget)
                                {
                                    enemyFollower.SetTarget(newTarget);
                                }
                                else
                                {
                                    enemyFollower.ClearTarget();
                                }
                            }
                        }
                        else
                        {
                            cooldown = cooldownIfNoEnemiesFound;
                        }
                    }
                }
            }
Example #8
0
 void Start()
 {
     m_cameraRigController = transform.parent.GetComponent <CameraRigController>();
     m_distance            = m_targetDistance = m_initialDistance;
 }