using UnityEngine; using System.Collections; using GameKitController.Audio; using UnityEngine.Events; public class quickTravelStationSystem : MonoBehaviour { [Header ("Main Settings")] [Space] public Transform quickTravelTransform; public LayerMask layer; public float maxDistanceToCheck = 4; public string animationName; public AudioClip enterAudioSound; public AudioElement enterAudioElement; public bool activateAtStart; public bool setGravityDirection; [Space] [Header ("Other Settings")] [Space] public string mainMapCreatorManagerName = "Map Creator"; [Space] [Header ("Events Settings")] [Space] public bool callEventOnTeleport; public UnityEvent eventOnTeleport; public bool callEventOnEveryTeleport; [Space] [Header ("Debug")] [Space] public bool stationActivated; [Space] [Header ("Components")] [Space] public setGravity setGravityManager; public AudioSource audioSource; public Animation stationAnimation; public mapObjectInformation mapObjectInformationManager; public mapCreator mapCreatorManager; bool eventCalled; RaycastHit hit; private void InitializeAudioElements () { if (audioSource == null) { audioSource = GetComponent (); } if (audioSource != null) { enterAudioElement.audioSource = audioSource; } if (enterAudioSound != null) { enterAudioElement.clip = enterAudioSound; } } void Start () { if (stationAnimation == null) { stationAnimation = GetComponent (); } InitializeAudioElements (); if (mapObjectInformationManager == null) { mapObjectInformationManager = GetComponent (); } if (activateAtStart) { activateStation (); } bool mapCreatorManagerAssigned = (mapCreatorManager != null); if (!mapCreatorManagerAssigned) { mapCreatorManager = mapCreator.Instance; mapCreatorManagerAssigned = mapCreatorManager != null; } if (!mapCreatorManagerAssigned) { GKC_Utils.instantiateMainManagerOnSceneWithTypeOnApplicationPlaying (mapCreator.getMainManagerName (), typeof(mapCreator), true); mapCreatorManager = mapCreator.Instance; mapCreatorManagerAssigned = (mapCreatorManager != null); } if (!mapCreatorManagerAssigned) { mapCreatorManager = FindObjectOfType (); mapCreatorManagerAssigned = mapCreatorManager != null; } } public void travelToThisStation (Transform currentPlayer) { Vector3 positionToTravel = quickTravelTransform.position; if (Physics.Raycast (quickTravelTransform.position, -transform.up, out hit, maxDistanceToCheck, layer)) { positionToTravel = hit.point + transform.up * 0.3f; } currentPlayer.position = positionToTravel; currentPlayer.rotation = quickTravelTransform.rotation; if (mapCreatorManager != null) { mapCreatorManager.changeCurrentBuilding (mapObjectInformationManager.getBuildingIndex (), currentPlayer.gameObject); } if (setGravityDirection && setGravityManager != null) { Collider currentCollider = currentPlayer.GetComponent (); if (currentCollider != null) { setGravityManager.checkTriggerType (currentCollider, true); } } if (callEventOnTeleport) { if (!eventCalled || callEventOnEveryTeleport) { eventOnTeleport.Invoke (); eventCalled = true; } } } public void OnTriggerEnter (Collider col) { if (!stationActivated && col.CompareTag ("Player")) { AudioPlayer.PlayOneShot (enterAudioElement, gameObject); activateStation (); } } public void activateStation () { if (stationAnimation != null && animationName != "") { stationAnimation [animationName].speed = 1; stationAnimation.Play (animationName); } mapObjectInformationManager.createMapIconInfo (); stationActivated = true; } }