Files
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

594 lines
15 KiB
C#

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using System.IO;
using System;
using System.Runtime.Serialization.Formatters.Binary;
public class gameManager : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public bool limitFps;
public bool updateLimitFpsIfChangeDetected;
public int targetFps = 60;
[Space]
[Header ("Chapter Info")]
[Space]
public string chapterInfo;
[Space]
[Header ("Save Info")]
[Space]
public bool loadEnabled;
public bool useRelativePath;
[Space]
[Header ("Load Screen Settings")]
[Space]
public bool useLoadScreen;
public int loadScreenScene = 1;
public bool useLastSceneIndexAsLoadScreen = true;
public string sceneToLoadAsyncPrefsName = "SceneToLoadAsync";
[Space]
[Header ("Version Number Settings")]
[Space]
public string versionNumber = "3-01";
[Space]
[Header ("Save File Names Settings")]
[Space]
public string saveGameFolderName = "Save";
public string saveFileName = "Save State";
public string saveCaptureFolder = "Captures";
public string saveCaptureFileName = "Photo";
public string touchControlsPositionFolderName = "Touch Buttons Position";
public string touchControlsPositionFileName = "Touch Positions";
public string saveInputFileFolderName = "Input";
public string saveInputFileName = "Input File";
public string defaultInputSaveFileName = "Default Input File";
public string fileExtension = ".txt";
public int slotBySaveStation;
public bool saveCameraCapture = true;
public LayerMask layer;
[Space]
[Header ("Debug Settings")]
[Space]
public int saveNumberToLoad = -1;
public string currentPersistentDataPath;
public string currentSaveDataPath;
public float playTime;
[Space]
[Header ("Current Game State")]
[Space]
public bool gamePaused;
public bool useTouchControls = false;
public bool touchPlatform;
[Space]
[Header ("Game Manager Elements")]
[Space]
public playerCharactersManager charactersManager;
public Camera mainCamera;
public GameObject mainPlayerGameObject;
public GameObject mainPlayerCameraGameObject;
public playerCamera currentPlayerCamera;
List<saveGameSystem.saveStationInfo> saveList = new List<saveGameSystem.saveStationInfo> ();
RaycastHit hit;
int lastSaveNumber = -1;
bool FPSLimitAdjusted;
void Awake ()
{
if (limitFps) {
QualitySettings.vSyncCount = 0;
Application.targetFrameRate = targetFps;
} else {
Application.targetFrameRate = -1;
}
touchPlatform = touchJoystick.checkTouchPlatform ();
if (touchPlatform) {
useRelativePath = false;
}
checkGameInfoToLoad ();
}
void checkGameInfoToLoad ()
{
if (isLoadGameEnabled () && getLastSaveNumber () > -1) {
string extraFileString = " " + getVersionNumber () + getFileExtension ();
lastSaveNumber = -1;
if (PlayerPrefs.HasKey ("saveNumber")) {
lastSaveNumber = PlayerPrefs.GetInt ("saveNumber");
} else if (saveNumberToLoad >= 0) {
lastSaveNumber = saveNumberToLoad;
}
currentSaveDataPath = getDataPath ();
if (charactersManager != null) {
charactersManager.checkGameInfoToLoad (lastSaveNumber, currentSaveDataPath, extraFileString);
}
} else {
if (charactersManager != null) {
charactersManager.checkComponentsToInitialize ();
}
}
}
public void saveGameInfoFromEditor (string infoTypeName)
{
if (isLoadGameEnabled () && saveNumberToLoad > -1) {
string extraFileString = " " + getVersionNumber () + getFileExtension ();
charactersManager.saveGameInfoFromEditor (saveNumberToLoad, infoTypeName, extraFileString);
}
}
public void saveGameWhenReturningHomeMenu ()
{
if (isLoadGameEnabled ()) {
charactersManager.saveGameWhenReturningHomeMenu ();
}
}
void Start ()
{
currentPersistentDataPath = Application.persistentDataPath;
if (loadEnabled && mainPlayerGameObject != null) {
if (PlayerPrefs.HasKey ("chapterInfo")) {
chapterInfo = PlayerPrefs.GetString ("chapterInfo");
}
if (PlayerPrefs.HasKey ("loadingGame")) {
if (PlayerPrefs.GetInt ("loadingGame") == 1) {
Vector3 newPlayerPosition = Vector3.zero;
Quaternion newPlayerRotation = Quaternion.identity;
bool savingGameToChangeScene = false;
if (PlayerPrefs.GetInt ("savingGameToChangeScene") == 1) {
int levelManagerIDToLoad = PlayerPrefs.GetInt ("levelManagerIDToLoad");
bool targetFound = false;
levelManagerIngame[] levelManagerIngameList = FindObjectsOfType<levelManagerIngame> ();
foreach (levelManagerIngame currentLevelManagerIngame in levelManagerIngameList) {
if (!targetFound && currentLevelManagerIngame.levelManagerID == levelManagerIDToLoad) {
newPlayerPosition = currentLevelManagerIngame.spawPlayerPositionTransform.position;
newPlayerRotation = currentLevelManagerIngame.spawPlayerPositionTransform.rotation;
targetFound = true;
savingGameToChangeScene = true;
}
}
} else {
newPlayerPosition =
new Vector3 (PlayerPrefs.GetFloat ("saveStationPositionX"), PlayerPrefs.GetFloat ("saveStationPositionY"), PlayerPrefs.GetFloat ("saveStationPositionZ"));
newPlayerRotation =
Quaternion.Euler (PlayerPrefs.GetFloat ("saveStationRotationX"), PlayerPrefs.GetFloat ("saveStationRotationY"), PlayerPrefs.GetFloat ("saveStationRotationZ"));
}
if (PlayerPrefs.GetInt ("useRaycastToPlacePlayer") == 1) {
if (Physics.Raycast (newPlayerPosition + Vector3.up, -Vector3.up, out hit, Mathf.Infinity, layer)) {
newPlayerPosition = hit.point;
}
}
bool isPlayerDriving = PlayerPrefs.GetInt ("isPlayerDriving") == 1;
//set player position and rotation
mainPlayerGameObject.transform.position = newPlayerPosition;
mainPlayerGameObject.transform.rotation = newPlayerRotation;
Quaternion newCameraRotation = newPlayerRotation;
if (savingGameToChangeScene) {
newCameraRotation = newPlayerRotation;
} else {
if (PlayerPrefs.GetInt ("usePlayerCameraOrientation") == 1) {
newCameraRotation =
Quaternion.Euler (PlayerPrefs.GetFloat ("playerCameraRotationX"), PlayerPrefs.GetFloat ("playerCameraRotationY"), PlayerPrefs.GetFloat ("playerCameraRotationZ"));
float playerCameraPivotRotationX = PlayerPrefs.GetFloat ("playerCameraPivotRotationX");
float newLookAngle = playerCameraPivotRotationX;
if (newLookAngle > 180) {
newLookAngle -= 360;
}
Vector2 newPivotRotation = new Vector2 (0, newLookAngle);
currentPlayerCamera.setLookAngleValue (newPivotRotation);
currentPlayerCamera.getPivotCameraTransform ().localRotation = Quaternion.Euler (playerCameraPivotRotationX, 0, 0);
}
}
mainPlayerCameraGameObject.transform.position = newPlayerPosition;
mainPlayerCameraGameObject.transform.rotation = newCameraRotation;
if (isPlayerDriving) {
string vehicleName = PlayerPrefs.GetString ("currentVehicleName");
print ("PLAYER PREVIOUSLY DRIVING " + vehicleName);
prefabsManager newPrefabsManager = FindObjectOfType<prefabsManager> ();
if (newPrefabsManager == null) {
newPrefabsManager = GKC_Utils.addPrefabsManagerToScene ();
}
if (newPrefabsManager != null) {
GameObject vehiclePrefab = newPrefabsManager.getPrefabGameObject (vehicleName);
if (vehiclePrefab != null) {
mainPlayerGameObject.transform.position = newPlayerPosition + Vector3.right * 4;
Vector3 vehiclePosition = Vector3.zero;
if (Physics.Raycast (newPlayerPosition + Vector3.up * 20, -Vector3.up, out hit, Mathf.Infinity, layer)) {
vehiclePosition = hit.point;
}
vehiclePosition += Vector3.up * newPrefabsManager.getPrefabSpawnOffset (vehicleName);
Vector3 newPlayerRotationEulerAngles = newPlayerRotation.eulerAngles;
newPlayerRotationEulerAngles = new Vector3 (0, newPlayerRotationEulerAngles.y, 0);
newPlayerRotation = Quaternion.Euler (newPlayerRotationEulerAngles);
GameObject newVehicle = (GameObject)Instantiate (vehiclePrefab, vehiclePosition, newPlayerRotation);
newVehicle.name = vehiclePrefab.name;
IKDrivingSystem currentIKDrivingSystem = newVehicle.GetComponent<IKDrivingSystem> ();
if (currentIKDrivingSystem != null) {
currentIKDrivingSystem.setPlayerToStartGameOnThisVehicle (mainPlayerGameObject);
} else {
GKCSimpleRiderSystem mainGKCSimpleRiderSystem = newVehicle.GetComponentInChildren<GKCSimpleRiderSystem> ();
if (mainGKCSimpleRiderSystem == null) {
GKCRiderSocketSystem currentGKCRiderSocketSystem = newVehicle.GetComponentInChildren<GKCRiderSocketSystem> ();
if (currentGKCRiderSocketSystem != null) {
mainRiderSystem currentmainRiderSystem = currentGKCRiderSocketSystem.getMainRiderSystem ();
mainGKCSimpleRiderSystem = currentmainRiderSystem.GetComponent<GKCSimpleRiderSystem> ();
}
}
if (mainGKCSimpleRiderSystem != null) {
mainGKCSimpleRiderSystem.setPlayerToStartGameOnThisVehicle (mainPlayerGameObject);
}
}
elementOnSceneHelper vehicleElementOnSceneHelper = newVehicle.GetComponentInChildren<elementOnSceneHelper> ();
if (vehicleElementOnSceneHelper != null) {
vehicleElementOnSceneHelper.setNewInstantiatedElementOnSceneManagerIngameWithInfo ();
int currentVehicleElementScene = PlayerPrefs.GetInt ("currentVehicleElementScene");
int currentVehicleElementID = PlayerPrefs.GetInt ("currentVehicleElementID");
vehicleElementOnSceneHelper.setStatsSearchingByInfo (currentVehicleElementScene, currentVehicleElementID);
}
} else {
print ("WARNING: No prefab of the vehicle called " + vehicleName + " was found. Make sure a prefab with that name is configured in the prefabs manager");
}
}
}
PlayerPrefs.DeleteAll ();
}
}
if (PlayerPrefs.HasKey ("Delete Player Prefs Active")) {
if (PlayerPrefs.GetInt ("Delete Player Prefs Active") == 1) {
PlayerPrefs.DeleteAll ();
}
}
} else {
PlayerPrefs.DeleteAll ();
}
}
void Update ()
{
playTime += Time.unscaledDeltaTime;
if (limitFps) {
if (updateLimitFpsIfChangeDetected || !FPSLimitAdjusted) {
if (Application.targetFrameRate != targetFps) {
Application.targetFrameRate = targetFps;
}
if (!updateLimitFpsIfChangeDetected) {
FPSLimitAdjusted = true;
}
}
}
}
public void getPlayerPrefsInfo (saveGameSystem.saveStationInfo save)
{
PlayerPrefs.SetInt ("loadingGame", 1);
PlayerPrefs.SetInt ("saveNumber", save.saveNumber);
PlayerPrefs.SetInt ("currentSaveStationId", save.id);
PlayerPrefs.SetFloat ("saveStationPositionX", save.saveStationPositionX);
PlayerPrefs.SetFloat ("saveStationPositionY", save.saveStationPositionY);
PlayerPrefs.SetFloat ("saveStationPositionZ", save.saveStationPositionZ);
PlayerPrefs.SetFloat ("saveStationRotationX", save.saveStationRotationX);
PlayerPrefs.SetFloat ("saveStationRotationY", save.saveStationRotationY);
PlayerPrefs.SetFloat ("saveStationRotationZ", save.saveStationRotationZ);
if (save.usePlayerCameraOrientation) {
PlayerPrefs.SetInt ("usePlayerCameraOrientation", 1);
} else {
PlayerPrefs.SetInt ("usePlayerCameraOrientation", 0);
}
PlayerPrefs.SetFloat ("playerCameraRotationX", save.playerCameraRotationX);
PlayerPrefs.SetFloat ("playerCameraRotationY", save.playerCameraRotationY);
PlayerPrefs.SetFloat ("playerCameraRotationZ", save.playerCameraRotationZ);
PlayerPrefs.SetFloat ("playerCameraPivotRotationX", save.playerCameraPivotRotationX);
if (save.useRaycastToPlacePlayer) {
PlayerPrefs.SetInt ("useRaycastToPlacePlayer", 1);
}
if (save.savingGameToChangeScene) {
PlayerPrefs.SetInt ("savingGameToChangeScene", 1);
} else {
PlayerPrefs.SetInt ("savingGameToChangeScene", 0);
}
PlayerPrefs.SetInt ("levelManagerIDToLoad", save.checkpointID);
if (save.isPlayerDriving) {
PlayerPrefs.SetInt ("isPlayerDriving", 1);
PlayerPrefs.SetString ("currentVehicleName", save.currentVehicleName);
PlayerPrefs.SetInt ("currentVehicleElementScene", save.currentVehicleElementScene);
PlayerPrefs.SetInt ("currentVehicleElementID", save.currentVehicleElementID);
} else {
PlayerPrefs.SetInt ("isPlayerDriving", 0);
}
print ("setting prefs to load " + save.saveStationScene + " " + loadScreenScene);
GKC_Utils.loadScene (save.saveStationScene, useLoadScreen, loadScreenScene, sceneToLoadAsyncPrefsName, useLastSceneIndexAsLoadScreen);
}
public string getDataPath ()
{
string dataPath = "";
if (useRelativePath) {
dataPath = saveGameFolderName;
} else {
dataPath = Application.persistentDataPath + "/" + saveGameFolderName;
}
if (!Directory.Exists (dataPath)) {
Directory.CreateDirectory (dataPath);
}
dataPath += "/";
return dataPath;
}
public string getDataName ()
{
return saveFileName + " " + versionNumber;
}
public string getVersionNumber ()
{
return versionNumber;
}
public string getFileExtension ()
{
return fileExtension;
}
public List<saveGameSystem.saveStationInfo> getCurrentSaveList ()
{
return saveList;
}
public void setSaveList (List<saveGameSystem.saveStationInfo> currentList)
{
saveList = currentList;
}
public int getLastSaveNumber ()
{
lastSaveNumber = -1;
if (PlayerPrefs.HasKey ("saveNumber")) {
lastSaveNumber = PlayerPrefs.GetInt ("saveNumber");
print ("save number player prefs located " + lastSaveNumber);
} else if (saveNumberToLoad >= 0) {
lastSaveNumber = saveNumberToLoad;
}
return lastSaveNumber;
}
public void setGamePauseState (bool state)
{
gamePaused = state;
}
public bool isGamePaused ()
{
return gamePaused;
}
public bool isUsingTouchControls ()
{
return useTouchControls;
}
public void setUseTouchControlsState (bool state)
{
useTouchControls = state;
}
public void setCharactersManagerPauseState (bool state)
{
charactersManager.setCharactersManagerPauseState (state);
}
public playerController getMainPlayerController ()
{
return charactersManager.getMainPlayerController ();
}
public bool anyCharacterDead ()
{
return charactersManager.anyCharacterDead ();
}
public string getSaveCaptureFolder ()
{
return saveCaptureFolder;
}
public string getSaveCaptureFileName ()
{
return saveCaptureFileName;
}
public string getTouchControlsPositionFolderName ()
{
return touchControlsPositionFolderName;
}
public string getTouchControlsPositionFileName ()
{
return touchControlsPositionFileName + " " + versionNumber;
}
public bool isLoadGameEnabled ()
{
return loadEnabled;
}
public void setNewChapterName (string newName)
{
chapterInfo = newName;
}
public string getChapterName ()
{
return chapterInfo;
}
public float getPlayTime ()
{
return playTime;
}
public void setPlayTimeValue (float newValue)
{
playTime = newValue;
}
//EDITOR FUNCTIONS
public void setUseTouchControlsStateFromEditor (bool state)
{
useTouchControls = state;
updateComponent ();
}
public void setCurrentPersistentDataPath ()
{
currentPersistentDataPath = Application.persistentDataPath;
updateComponent ();
}
public void deletePlayerPrefs ()
{
PlayerPrefs.DeleteAll ();
print ("Player Prefs Deleted");
}
public void getCurrentDataPath ()
{
setCurrentPersistentDataPath ();
currentSaveDataPath = getDataPath ();
updateComponent ();
}
public void updateComponent ()
{
GKC_Utils.updateComponent (this);
}
}