Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/LocationMap.cs
2026-03-04 10:03:45 +08:00

236 lines
7.9 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using _Data.Variabales.DayWeather;
public class LocationMap : MonoBehaviour
{
[Serializable]
public class LocationMapData
{
public string mapName = "";
public Vector3 controllPoint;
public Vector2 mapMeterFactor = Vector2.zero;
public float mapAngle;
public float cursorPlayerAngle;
public GameObject MapContent;
public GameObject MapMarkersContent;
public Transform[] Spawners;
}
public Fading MapFading;
public RectTransform playerCursorPosition;
public LocationMapData[] mapData;
private Transform playerPosition;
public OrbitCameraByPlayer orbitCamera;
public Dropdown TimeOfDayDropDown;
public Dropdown WeatherDropDown;
public Text mapNameText;
public Text timeAndWeatherLabelText;
public Camera mCamera;
private int spawnerIndex;
private int sceneID;
public bool isSymulation;
public Transform symulatePlayer;
public int symulateSceneId;
[SerializeField]
private ScriptableTimeDayVariable timeDay;
[SerializeField]
private ScriptableEnumWeatherType weather;
private void Start()
{
if (FScriptsHandler.Instance == null)
{
return;
}
playerPosition = FScriptsHandler.Instance.m_PlayerMain.transform;
sceneID = FScriptsHandler.Instance.m_SceneSettings.sceneID;
SetupDropdownWeatherAndTimeDay();
mapNameText.text = GameManager.Instance.gameLocations[sceneID].name.ToUpper();
mCamera.transform.position = playerPosition.position;
mCamera.transform.localEulerAngles = playerPosition.localEulerAngles;
mapData[sceneID].MapMarkersContent.SetActive(value: true);
mapData[sceneID].MapContent.SetActive(value: true);
if (sceneID == 7 || sceneID == 8 || sceneID == 9)
{
TimeOfDayDropDown.gameObject.SetActive(value: false);
WeatherDropDown.gameObject.SetActive(value: false);
timeAndWeatherLabelText.enabled = false;
}
if (Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().GameMode == GameManager.PlayerData.CPlayer.GameMode.Realistic)
{
if (mapData[sceneID].MapMarkersContent.activeSelf)
{
mapData[sceneID].MapMarkersContent.SetActive(value: false);
}
TimeOfDayDropDown.gameObject.SetActive(value: false);
WeatherDropDown.gameObject.SetActive(value: false);
timeAndWeatherLabelText.enabled = false;
}
else if ((bool)FScriptsHandler.Instance.m_PlayerMain.currentRod)
{
bool flag = false;
if (FScriptsHandler.Instance.m_PlayerMain.currentRod.CheckIsInUse())
{
flag = true;
}
if (flag && mapData[sceneID].MapMarkersContent.activeSelf)
{
mapData[sceneID].MapMarkersContent.SetActive(value: false);
}
else if (!mapData[sceneID].MapMarkersContent.activeSelf)
{
mapData[sceneID].MapMarkersContent.SetActive(value: true);
}
}
else if (FScriptsHandler.Instance.m_PlayerMain.transform.parent.name != "_GAMEPLAY_V2" && mapData[sceneID].MapMarkersContent.activeSelf)
{
mapData[sceneID].MapMarkersContent.SetActive(value: false);
}
if (UnityEngine.Object.FindObjectsOfType<AudioListener>().Length > 1)
{
mCamera.GetComponent<AudioListener>().enabled = false;
}
if ((bool)UnityEngine.Object.FindObjectOfType<Boat>() && UnityEngine.Object.FindObjectOfType<Boat>().currentPlayerCharacter != null && mapData[sceneID].MapMarkersContent.activeSelf)
{
mapData[sceneID].MapMarkersContent.SetActive(value: false);
}
}
private void Update()
{
if (!isSymulation)
{
FollowMap();
}
else
{
SymulateFollowMap();
}
if (GameManager.Instance.player.GetButtonDown("mapScene") && GameManager.Instance.messageBoxStack.Count == 0)
{
StartCoroutine(CloseMapByFade());
}
}
private void SymulateFollowMap()
{
sceneID = symulateSceneId;
if (symulatePlayer == null)
{
symulatePlayer = GameObject.Find("SymulatePlayerMap").transform;
}
Vector3 vector = new Vector3((symulatePlayer.position.x - mapData[sceneID].controllPoint.x) * mapData[sceneID].mapMeterFactor.x, (symulatePlayer.position.z - mapData[sceneID].controllPoint.z) * mapData[sceneID].mapMeterFactor.y, (symulatePlayer.position.z - mapData[sceneID].controllPoint.z) * mapData[sceneID].mapMeterFactor.y);
Vector3 vector2 = Quaternion.AngleAxis(mapData[sceneID].mapAngle, Vector3.up) * vector;
playerCursorPosition.anchoredPosition = new Vector3(0f - vector2.x, 0f - vector2.z, 0f);
playerCursorPosition.localEulerAngles = new Vector3(0f, 0f, mapData[sceneID].cursorPlayerAngle - symulatePlayer.localEulerAngles.y);
}
private void FollowMap()
{
if (!(playerPosition == null))
{
Vector3 vector = new Vector3((playerPosition.position.x - mapData[sceneID].controllPoint.x) * mapData[sceneID].mapMeterFactor.x, (playerPosition.position.z - mapData[sceneID].controllPoint.z) * mapData[sceneID].mapMeterFactor.y, (playerPosition.position.z - mapData[sceneID].controllPoint.z) * mapData[sceneID].mapMeterFactor.y);
Vector3 vector2 = Quaternion.AngleAxis(mapData[sceneID].mapAngle, Vector3.up) * vector;
playerCursorPosition.anchoredPosition = new Vector3(0f - vector2.x, 0f - vector2.z, 0f);
playerCursorPosition.localEulerAngles = new Vector3(0f, 0f, mapData[sceneID].cursorPlayerAngle - playerPosition.localEulerAngles.y);
}
}
public void GoToSpawnerButton(int index)
{
FRod currentRod = FScriptsHandler.Instance.m_PlayerMain.currentRod;
if ((object)currentRod != null && currentRod.fishingLine?.currentLineHandler?.PhisicsLineOut > 0f)
{
GameManager.Instance.ShowMessagePopup(LanguageManager.Instance.GetText("ROD_BLOCK_DURING_TELEPORT"), FScriptsHandler.Instance.m_Canvas.transform);
return;
}
spawnerIndex = index;
GameManager.Instance.CreateMessageBox("DO_YOU_WANT_TO_SPAWN", GetComponent<Canvas>().transform, 4);
}
public void Spawn()
{
Debug.Log("spawn");
FScriptsHandler.Instance.m_PlayerMain.SpawnPlayer(mapData[sceneID].Spawners[spawnerIndex]);
if ((bool)TutorialManager.Instance && !TutorialManager.Instance.tutUpdateBool && TutorialManager.Instance.acctualLessonIndex == 12)
{
TutorialManager.Instance.CheckLessonPopUp(12);
}
StartCoroutine(CloseMapByFade());
}
private IEnumerator CloseMapByFade()
{
MapFading.StartFade(Fading.fade_type.Down, 0.5f);
Image[] componentsInChildren = mapData[sceneID].MapContent.GetComponentsInChildren<Image>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
componentsInChildren[i].gameObject.SetActive(value: false);
}
playerCursorPosition.gameObject.SetActive(value: false);
mCamera.transform.position = FScriptsHandler.Instance.m_PlayerMain.transform.position;
mCamera.transform.localEulerAngles = FScriptsHandler.Instance.m_PlayerMain.transform.localEulerAngles;
yield return new WaitForSecondsRealtime(0.1f);
GameManager.Instance.UnloadAddectiveScene();
}
private void SetupDropdownWeatherAndTimeDay()
{
TimeOfDayDropDown.ClearOptions();
WeatherDropDown.ClearOptions();
List<string> list = new List<string>();
List<string> list2 = new List<string>();
list.Add(LanguageManager.Instance.GetText("WEATHER_CLEAR"));
list.Add(LanguageManager.Instance.GetText("WEATHER_CLOUDY"));
list.Add(LanguageManager.Instance.GetText("WEATHER_OVERCAST"));
list.Add(LanguageManager.Instance.GetText("WEATHER_LIGHTRAIN"));
list.Add(LanguageManager.Instance.GetText("WEATHER_MEDIUMRAIN"));
list.Add(LanguageManager.Instance.GetText("WEATHER_STORM"));
list2.Add(LanguageManager.Instance.GetText("TIMEOFDAY_MORNING"));
list2.Add(LanguageManager.Instance.GetText("TIMEOFDAY_NOON"));
list2.Add(LanguageManager.Instance.GetText("TIMEOFDAY_EVENING"));
list2.Add(LanguageManager.Instance.GetText("TIMEOFDAY_NIGHT"));
WeatherDropDown.AddOptions(list);
TimeOfDayDropDown.AddOptions(list2);
WeatherDropDown.value = weather.GetWeatherId();
TimeOfDayDropDown.value = (int)timeDay.GetTimeOfDayFromHour();
}
public void WeatherDropdownChange()
{
weather.SetWeather(WeatherDropDown.value);
}
public void TimeOfDayDropdownChange()
{
timeDay.SetDayTime((TimeOfDay)TimeOfDayDropDown.value);
}
}