<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://www.simswiki.info/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://simswiki.info/index.php?action=history&amp;feed=atom&amp;title=TS3PR%2FSimIFace%2FSims3.SimIFace%2FCameraController</id>
		<title>TS3PR/SimIFace/Sims3.SimIFace/CameraController - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://simswiki.info/index.php?action=history&amp;feed=atom&amp;title=TS3PR%2FSimIFace%2FSims3.SimIFace%2FCameraController"/>
		<link rel="alternate" type="text/html" href="http://simswiki.info/index.php?title=TS3PR/SimIFace/Sims3.SimIFace/CameraController&amp;action=history"/>
		<updated>2026-09-06T16:12:10Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.20.2</generator>

	<entry>
		<id>http://simswiki.info/index.php?title=TS3PR/SimIFace/Sims3.SimIFace/CameraController&amp;diff=72852&amp;oldid=prev</id>
		<title>Lyralei: Gave CameraController it's own page.</title>
		<link rel="alternate" type="text/html" href="http://simswiki.info/index.php?title=TS3PR/SimIFace/Sims3.SimIFace/CameraController&amp;diff=72852&amp;oldid=prev"/>
				<updated>2021-02-01T16:15:07Z</updated>
		
		<summary type="html">&lt;p&gt;Gave CameraController it&amp;#039;s own page.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The main class that does all the camera-related stuff! Think, cameraman mode (tab), camera following a sim and all the basic camera things like rotating and zooming in/out.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class CameraController&lt;br /&gt;
{&lt;br /&gt;
	public delegate void CameraFollowEnabledHandler(object sender, CameraFollowEnabledEventArgs eventArgs);&lt;br /&gt;
&lt;br /&gt;
	public class CameraFollowEnabledEventArgs : EventArgs&lt;br /&gt;
	{&lt;br /&gt;
		public ObjectGuid mObjectId;&lt;br /&gt;
&lt;br /&gt;
		public bool mbEnabled;&lt;br /&gt;
&lt;br /&gt;
		public ObjectGuid ObjectId&lt;br /&gt;
		{&lt;br /&gt;
			get&lt;br /&gt;
			{&lt;br /&gt;
				return mObjectId;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		public bool Enabled&lt;br /&gt;
		{&lt;br /&gt;
			get&lt;br /&gt;
			{&lt;br /&gt;
				return mbEnabled;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		public CameraFollowEnabledEventArgs(ulong objectId, bool enabled)&lt;br /&gt;
		{&lt;br /&gt;
			mObjectId = new ObjectGuid(objectId);&lt;br /&gt;
			mbEnabled = enabled;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public delegate void CameraFlyThroughFinishedHandler(uint pathIndex);&lt;br /&gt;
&lt;br /&gt;
	public delegate void CameraControllerSwitchHandler(CameraControllerType mode);&lt;br /&gt;
&lt;br /&gt;
	public delegate void CameraMapViewEnabledHandler(bool enabled);&lt;br /&gt;
&lt;br /&gt;
	public delegate void CameraAtMaxZoomHandler(bool atMaxZoom);&lt;br /&gt;
&lt;br /&gt;
	public const string kTypeName = &amp;quot;Sims3.SimIFace.CameraController, SimIFace&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	public const float kUseCurrentCameraValue = -100f;&lt;br /&gt;
&lt;br /&gt;
	public const float kToggleMapViewTime = 1f;&lt;br /&gt;
&lt;br /&gt;
	public static ICameraController Instance;&lt;br /&gt;
&lt;br /&gt;
	public static CameraFollowEnabledHandler OnCameraFollowEnabledCallback;&lt;br /&gt;
&lt;br /&gt;
	public static CameraFlyThroughFinishedHandler OnCameraFlyThroughFinishedCallback;&lt;br /&gt;
&lt;br /&gt;
	private static event CameraControllerSwitchHandler OnCameraControllerSwitchCallback;&lt;br /&gt;
&lt;br /&gt;
	private static event CameraMapViewEnabledHandler OnCameraMapViewEnabledCallback;&lt;br /&gt;
&lt;br /&gt;
	private static event CameraAtMaxZoomHandler OnCameraAtMaxZoomCallback;&lt;br /&gt;
&lt;br /&gt;
	static CameraController()&lt;br /&gt;
	{&lt;br /&gt;
		Instance = (AppDomain.CurrentDomain.GetData(&amp;quot;CameraController&amp;quot;) as ICameraController);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void RegisterCallbackMethod(CameraEvent cameraEvent)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.RegisterCallbackMethod(cameraEvent, &amp;quot;Sims3.SimIFace.CameraController, SimIFace&amp;quot;, cameraEvent.ToString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void RegisterAllCallbacks()&lt;br /&gt;
	{&lt;br /&gt;
		RegisterCallbackMethod(CameraEvent.OnCameraFollowEnabled);&lt;br /&gt;
		RegisterCallbackMethod(CameraEvent.OnCameraFlyThroughFinished);&lt;br /&gt;
		RegisterCallbackMethod(CameraEvent.OnCameraControllerSwitch);&lt;br /&gt;
		RegisterCallbackMethod(CameraEvent.OnCameraMapViewEnabled);&lt;br /&gt;
		RegisterCallbackMethod(CameraEvent.OnCameraAtMaxZoom);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void EnableCameraMapView(bool enabled)&lt;br /&gt;
	{&lt;br /&gt;
		if (CameraController.OnCameraMapViewEnabledCallback != null)&lt;br /&gt;
		{&lt;br /&gt;
			CameraController.OnCameraMapViewEnabledCallback(enabled);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void OnCameraFollowEnabled(ulong objectId, bool enabled)&lt;br /&gt;
	{&lt;br /&gt;
		if (OnCameraFollowEnabledCallback != null)&lt;br /&gt;
		{&lt;br /&gt;
			OnCameraFollowEnabledCallback(null, new CameraFollowEnabledEventArgs(objectId, enabled));&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void OnCameraFlyThroughFinished(uint pathIndex)&lt;br /&gt;
	{&lt;br /&gt;
		if (OnCameraFlyThroughFinishedCallback != null)&lt;br /&gt;
		{&lt;br /&gt;
			OnCameraFlyThroughFinishedCallback(pathIndex);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void OnCameraControllerSwitch(uint type)&lt;br /&gt;
	{&lt;br /&gt;
		if (CameraController.OnCameraControllerSwitchCallback != null)&lt;br /&gt;
		{&lt;br /&gt;
			CameraController.OnCameraControllerSwitchCallback((CameraControllerType)type);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void OnCameraMapViewEnabled(bool enabled)&lt;br /&gt;
	{&lt;br /&gt;
		if (CameraController.OnCameraMapViewEnabledCallback != null)&lt;br /&gt;
		{&lt;br /&gt;
			CameraController.OnCameraMapViewEnabledCallback(enabled);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void OnCameraAtMaxZoom(bool atMaxZoom)&lt;br /&gt;
	{&lt;br /&gt;
		if (CameraController.OnCameraAtMaxZoomCallback != null)&lt;br /&gt;
		{&lt;br /&gt;
			CameraController.OnCameraAtMaxZoomCallback(atMaxZoom);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static CameraControllerType GetControllerType()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetControllerType();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static bool SetControllerType(CameraControllerType type)&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.SetControllerType(type);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static Vector3 GetPosition()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetPosition();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static Vector3 GetTarget()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetTarget();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static Vector3 GetLODInterestPosition()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetLODInterestPosition();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void SetPositionAndTarget(Vector3 pos, Vector3 target)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.SetPositionAndTarget(pos, target);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static float GetZoom()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetZoom();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void GetRegularZoomLimits(out float minZoom, out float maxZoom)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.GetRegularZoomLimits(out minZoom, out maxZoom);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static float GetPitchDegrees()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetPitchDegrees();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static float GetYawDegrees()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetYawDegrees();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void LoadTuning(uint type, float[] vars, bool b)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.LoadTuning(type, vars, b);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Shake()&lt;br /&gt;
	{&lt;br /&gt;
		Shake(1f, 4f);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Shake(float intensity)&lt;br /&gt;
	{&lt;br /&gt;
		Shake(intensity, 4f);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Shake(float intensity, float duration)&lt;br /&gt;
	{&lt;br /&gt;
		float[] array = new float[5]&lt;br /&gt;
		{&lt;br /&gt;
			40f,&lt;br /&gt;
			40f,&lt;br /&gt;
			60f,&lt;br /&gt;
			40f,&lt;br /&gt;
			40f&lt;br /&gt;
		};&lt;br /&gt;
		float[] array2 = new float[5]&lt;br /&gt;
		{&lt;br /&gt;
			25f,&lt;br /&gt;
			25f,&lt;br /&gt;
			50f,&lt;br /&gt;
			25f,&lt;br /&gt;
			25f&lt;br /&gt;
		};&lt;br /&gt;
		float[] array3 = new float[5]&lt;br /&gt;
		{&lt;br /&gt;
			0.01f,&lt;br /&gt;
			0.01f,&lt;br /&gt;
			0.05f,&lt;br /&gt;
			0.01f,&lt;br /&gt;
			0.01f&lt;br /&gt;
		};&lt;br /&gt;
		float[] array4 = new float[5]&lt;br /&gt;
		{&lt;br /&gt;
			0.005f,&lt;br /&gt;
			0.01f,&lt;br /&gt;
			0.01f,&lt;br /&gt;
			0.01f,&lt;br /&gt;
			0.005f&lt;br /&gt;
		};&lt;br /&gt;
		for (int i = 0; i &amp;lt; 5; i++)&lt;br /&gt;
		{&lt;br /&gt;
			array[i] *= intensity;&lt;br /&gt;
			array2[i] *= intensity;&lt;br /&gt;
			array3[i] *= intensity;&lt;br /&gt;
			array4[i] *= intensity;&lt;br /&gt;
		}&lt;br /&gt;
		Instance.Shake(duration, array, array2, array3, array4);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void RequestLerpToTarget(Vector3 target, float timeDuration, bool swingToTarget)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.RequestLerpToTarget(target, timeDuration, swingToTarget);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void RequestLerpToPositionAndTarget(Vector3 position, Vector3 target, float timeDuration, bool swingToTarget)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.RequestLerpToPositionAndTarget(position, target, timeDuration, swingToTarget);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void RequestLerpToZoomAndRotation(float zoom, float pitchDegrees, float yawDegrees, float timeDuration)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.RequestLerpToZoomAndRotation(zoom, pitchDegrees, yawDegrees, timeDuration);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void FocusOnLot(ulong lotId, float zoom, float pitchDegrees, float lerpDuration)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.FocusOnLot(lotId, zoom, pitchDegrees, lerpDuration);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void FocusOnLotForBuildBuy(ulong lotId, float zoom, float pitchDegrees, float lerpDuration, float boundaryTolerance)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.FocusOnLotForBuildBuy(lotId, zoom, pitchDegrees, lerpDuration, boundaryTolerance);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void SetOnStairs(bool onStairs)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.SetOnStairs(onStairs);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void EnableObjectFollow(ulong objId, Vector3 targetOffset)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.EnableObjectFollow(objId, targetOffset);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void DisableObjectFollow()&lt;br /&gt;
	{&lt;br /&gt;
		Instance.DisableObjectFollow();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static ulong GetObjectFollowId()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetObjectFollowId();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static float GetDistanceFromTargetToObject(ObjectGuid scriptHandle)&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetDistanceFromTargetToObject(scriptHandle);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void TetherToLot(ulong lotId)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.TetherToLot(lotId, false);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void TetherToLot(ulong lotId, bool forceImmediate)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.TetherToLot(lotId, forceImmediate);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void TetherToObject(ObjectGuid objId)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.TetherToObject(objId);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Untether()&lt;br /&gt;
	{&lt;br /&gt;
		Instance.Untether();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void FinishTimeLerp()&lt;br /&gt;
	{&lt;br /&gt;
		Instance.FinishTimeLerp();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Lock(ObjectGuid objectId, Vector3 targetOffset, float defaultZoom, float defaultPitchDegrees, float defaultYawDegrees, float lerpToTargetDuration)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.Lock(objectId, targetOffset, defaultZoom, defaultPitchDegrees, defaultYawDegrees, lerpToTargetDuration);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Unlock()&lt;br /&gt;
	{&lt;br /&gt;
		Instance.Unlock();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void SetMotion(uint flags, bool bSet)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.SetMotion(flags, bSet);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void SetRotating(bool bSet)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.SetCameraRotating(bSet);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void EnableMapViewMode()&lt;br /&gt;
	{&lt;br /&gt;
		Instance.EnableMapViewMode(1f);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void DisableMapViewMode(float desiredZoom, float desiredPitchDegrees)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.DisableMapViewMode(desiredZoom, desiredPitchDegrees, 1f);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void DisableMapViewMode()&lt;br /&gt;
	{&lt;br /&gt;
		Instance.DisableMapViewMode(-100f, -100f, 1f);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static bool IsMapViewModeEnabled()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.IsMapViewModeEnabled();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void EnableNHoodPlopMode()&lt;br /&gt;
	{&lt;br /&gt;
		Instance.EnableNHoodPlopMode();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void DisableNHoodPlopMode()&lt;br /&gt;
	{&lt;br /&gt;
		Instance.DisableNHoodPlopMode();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static bool IsHorizontalRotationInverted()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.IsHorizontalRotationInverted();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static bool IsVerticalRotationInverted()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.IsVerticalRotationInverted();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void SetGameEntryMode(bool enable)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.SetGameEntryMode(enable);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void SetTutorialMode(bool enable)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.SetTutorialMode(enable);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void ActivatePhotographMode(ObjectGuid photographerId, bool activate)&lt;br /&gt;
	{&lt;br /&gt;
		ActivatePhotographMode(photographerId, activate, -1f, -1f, uint.MaxValue);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void ActivatePhotographMode(ObjectGuid photographerId, bool activate, float minZoom, float maxZoom, uint cameraQuality)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.ActivatePhotographMode(photographerId, activate, minZoom, maxZoom, cameraQuality);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void StartFlyThrough(uint pathIndex, bool startFromCameraPosition)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.StartFlyThrough(pathIndex, startFromCameraPosition);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static uint GetCustomFlyThroughIndex()&lt;br /&gt;
	{&lt;br /&gt;
		return Instance.GetCustomFlyThroughIndex();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void EnableHouseboatFollow(ulong lotId)&lt;br /&gt;
	{&lt;br /&gt;
		Instance.EnableHouseboatFollow(lotId);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lyralei</name></author>	</entry>

	</feed>