You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			205 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			205 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
 | 
						|
//
 | 
						|
// Purpose: An area that the player can teleport to
 | 
						|
//
 | 
						|
//=============================================================================
 | 
						|
 | 
						|
using UnityEngine;
 | 
						|
#if UNITY_EDITOR
 | 
						|
using UnityEditor;
 | 
						|
#endif
 | 
						|
 | 
						|
namespace Valve.VR.InteractionSystem
 | 
						|
{
 | 
						|
	//-------------------------------------------------------------------------
 | 
						|
	public class TeleportArea : TeleportMarkerBase
 | 
						|
	{
 | 
						|
		//Public properties
 | 
						|
		public Bounds meshBounds { get; private set; }
 | 
						|
 | 
						|
		//Private data
 | 
						|
		private MeshRenderer areaMesh;
 | 
						|
		private int tintColorId = 0;
 | 
						|
		private Color visibleTintColor = Color.clear;
 | 
						|
		private Color highlightedTintColor = Color.clear;
 | 
						|
		private Color lockedTintColor = Color.clear;
 | 
						|
		private bool highlighted = false;
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		public void Awake()
 | 
						|
		{
 | 
						|
			areaMesh = GetComponent<MeshRenderer>();
 | 
						|
 | 
						|
#if UNITY_URP
 | 
						|
			tintColorId = Shader.PropertyToID( "_BaseColor" );
 | 
						|
#else
 | 
						|
			tintColorId = Shader.PropertyToID("_TintColor");
 | 
						|
#endif
 | 
						|
 | 
						|
			CalculateBounds();
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		public void Start()
 | 
						|
		{
 | 
						|
			visibleTintColor = Teleport.instance.areaVisibleMaterial.GetColor( tintColorId );
 | 
						|
			highlightedTintColor = Teleport.instance.areaHighlightedMaterial.GetColor( tintColorId );
 | 
						|
			lockedTintColor = Teleport.instance.areaLockedMaterial.GetColor( tintColorId );
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		public override bool ShouldActivate( Vector3 playerPosition )
 | 
						|
		{
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		public override bool ShouldMovePlayer()
 | 
						|
		{
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		public override void Highlight( bool highlight )
 | 
						|
		{
 | 
						|
			if ( !locked )
 | 
						|
			{
 | 
						|
				highlighted = highlight;
 | 
						|
 | 
						|
				if ( highlight )
 | 
						|
				{
 | 
						|
					areaMesh.material = Teleport.instance.areaHighlightedMaterial;
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					areaMesh.material = Teleport.instance.areaVisibleMaterial;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		public override void SetAlpha( float tintAlpha, float alphaPercent )
 | 
						|
		{
 | 
						|
			Color tintedColor = GetTintColor();
 | 
						|
			tintedColor.a *= alphaPercent;
 | 
						|
			areaMesh.material.SetColor( tintColorId, tintedColor );
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		public override void UpdateVisuals()
 | 
						|
		{
 | 
						|
			if ( locked )
 | 
						|
			{
 | 
						|
				areaMesh.material = Teleport.instance.areaLockedMaterial;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				areaMesh.material = Teleport.instance.areaVisibleMaterial;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		public void UpdateVisualsInEditor()
 | 
						|
		{
 | 
						|
            if (Teleport.instance == null)
 | 
						|
                return;
 | 
						|
 | 
						|
			areaMesh = GetComponent<MeshRenderer>();
 | 
						|
 | 
						|
			if ( locked )
 | 
						|
			{
 | 
						|
				areaMesh.sharedMaterial = Teleport.instance.areaLockedMaterial;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				areaMesh.sharedMaterial = Teleport.instance.areaVisibleMaterial;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		private bool CalculateBounds()
 | 
						|
		{
 | 
						|
			MeshFilter meshFilter = GetComponent<MeshFilter>();
 | 
						|
			if ( meshFilter == null )
 | 
						|
			{
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
 | 
						|
			Mesh mesh = meshFilter.sharedMesh;
 | 
						|
			if ( mesh == null )
 | 
						|
			{
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
 | 
						|
			meshBounds = mesh.bounds;
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		private Color GetTintColor()
 | 
						|
		{
 | 
						|
			if ( locked )
 | 
						|
			{
 | 
						|
				return lockedTintColor;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if ( highlighted )
 | 
						|
				{
 | 
						|
					return highlightedTintColor;
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					return visibleTintColor;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
#if UNITY_EDITOR
 | 
						|
	//-------------------------------------------------------------------------
 | 
						|
	[CustomEditor( typeof( TeleportArea ) )]
 | 
						|
	public class TeleportAreaEditor : Editor
 | 
						|
	{
 | 
						|
		//-------------------------------------------------
 | 
						|
		void OnEnable()
 | 
						|
		{
 | 
						|
			if ( Selection.activeTransform != null )
 | 
						|
			{
 | 
						|
				TeleportArea teleportArea = Selection.activeTransform.GetComponent<TeleportArea>();
 | 
						|
				if ( teleportArea != null )
 | 
						|
				{
 | 
						|
					teleportArea.UpdateVisualsInEditor();
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//-------------------------------------------------
 | 
						|
		public override void OnInspectorGUI()
 | 
						|
		{
 | 
						|
			DrawDefaultInspector();
 | 
						|
 | 
						|
			if ( Selection.activeTransform != null )
 | 
						|
			{
 | 
						|
				TeleportArea teleportArea = Selection.activeTransform.GetComponent<TeleportArea>();
 | 
						|
				if ( GUI.changed && teleportArea != null )
 | 
						|
				{
 | 
						|
					teleportArea.UpdateVisualsInEditor();
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
#endif
 | 
						|
}
 |