EDIT: Sometimes it just pays to know your limits. I had hoped to use the following code via my main menu, but that’s not working out, so I’m hoping that someone might point me in the right direction for a much simpler question. The following js contains options to both save and load. Works great. Right now, I have it attached to my main camera. (Also had it attached directly to my player) Obviously, with it attached to the camera it is on the screen constantly, which I don’t necessarily want. Am thinking of either attaching it to a pause menu, such as the one found here, or making the gui included my pause menu, but don’t quite know how to do that. (strange, making a pause menu from scratch seems easy enough from the tutorial, but I don’t know enough yet to incorporate what I’ve already found into a menu. Any help, as always, is appreciated. God bless.
import System;
import System.Collections;
import System.Xml;
import System.Xml.Serialization;
import System.IO;
import System.Text;
class DemoData
{
var x : float;
var y : float;
var z : float;
var name : String;
var experience : float;
}
class UserData
{
public var _iUser : DemoData = new DemoData();
function UserData() { }
}
//var target: Transform;
//var generalWidth = 50;
//var userHeight = 50;
//var playerHealth = 1000;
//var MaxPlayerHealth = 1000;
//var playerMana = 1000;
//var playerEnergy = 100;
//public var playerDamage = 10;
//var playerCurrency = 5000;
var playerPositionX = 0;
var playerPositionY = 0;
var playerPositionZ = 0;
//var damageNpc = 1;
//Variable For Experience *******************************************************
public static var curExperience = 1;
var ExpBarEmtey = 0;
var ExpBarCur : float;
var screenHeight : float;
static var ExpPart = 25;
var curLevel = 1;
var LvMax = 0;
var Lv0 = 12;
var Lv1 = 18;
var Lv2 = 28;
var Lv3 = 42;
var Lv4 = 78;
var Lv5 = 156;
var Lv6 = 330;
var Lv7 = 800;
var Lv8 = 1760;
var Lv9 = 4110;
var Lv10 = 8670;
//EndofExpVariables *************************************************************
//Saving Variables **************************************************************
private var _Save : Rect;
private var _Load : Rect;
private var _SaveMSG : Rect;
private var _LoadMSG : Rect;
//var _ShouldSave : boolean;
//var _ShouldLoad : boolean;
//var _SwitchSave : boolean;
//var _SwitchLoad : boolean;
private var _FileLocation : String;
private var _FileName : String = "SaveData.xml";
//public GameObject player;
var player : GameObject;
var playerName : String = "Default";
var MyStyle : GUIStyle;
private var myData : UserData;
private var _data : String;
private var VPosition : Vector3;
//EndOfSaving Variables *********************************************************
function Awake () {
// GUI for the Save/Load
_Save=new Rect(50,180,100,20);
_Load=new Rect(50,210,100,20);
_Name=new Rect(50,240,200,20);
_SaveMSG=new Rect(50,120,200,40);
_LoadMSG=new Rect(50,140,200,40);
_NameMSG=new Rect(50,180,200,40);
// XML Save/Load path
_FileLocation=Application.dataPath;
// Creating something to store information into.
myData=new UserData();
}
function OnGUI ()
{
// playerName = GUI.TextArea (Rect(generalWidth,userHeight,100,25),playerName);
//Health ********************************************************************
// GUI.Box (Rect (50,75,150,25), "Health:" + playerHealth);
//EndOfHealth ***************************************************************
//Mana **********************************************************************
// GUI.Box (Rect (50,100,150,25), "Mana:" + playerMana);
//EndOfMana *****************************************************************
//Energy ********************************************************************
// GUI.Box (Rect (50,125,150,25), "Energy:" + playerEnergy);
//EndOfEnergy ***************************************************************
//Currency ******************************************************************
// GUI.Box (Rect (50,150,150,25), "Gold:" + playerCurrency);
//EndOfCurrency *************************************************************
//Experience ****************************************************************
GUI.Box (Rect (10,10,60,20),"Level:" + curLevel);
//EndOfExperience ***********************************************************
//LoadingPlayers ************************************************************
if (GUI.Button(_Load,"Load")) {
GUI.Label(_LoadMSG,"Loading from: "+_FileLocation);
// Load our UserData into myData
LoadXML();
if(_data.ToString() != "")
{
myData = DeserializeObject(_data);
VPosition=new Vector3(myData._iUser.x,myData._iUser.y,myData._iUser.z);
player.transform.position=VPosition;
curExperience = myData._iUser.experience;
Debug.Log("Load Successful");
}
}
//EndOfLoadingPlayers *******************************************************
//SavingPlayers *************************************************************
if (GUI.Button(_Save,"Save")) {
GUI.Label(_SaveMSG,"Saving to: "+_FileLocation);
//Debug.Log("SaveLoadXML: sanity check:"+ player.transform.position.x);
myData._iUser.x = player.transform.position.x;
myData._iUser.y = player.transform.position.y;
myData._iUser.z = player.transform.position.z;
myData._iUser.name = playerName;
myData._iUser.experience = curExperience;
// Time to creat our XML!
_data = SerializeObject(myData);
// This is the final resulting XML from the serialization process
CreateXML();
Debug.Log(_data);
}
//EndOfSavingPlayers *********************************************************
}
function Update ()
{
// if(playerHealth <= 0) {
// print(playerName + " has died...");
// die();
// }
// if(playerHealth > MaxPlayerHealth)
// {
// playerHealth = MaxPlayerHealth;
// }
// Here is the level decider. If the current exp is higher then the number there then you +1 level.
switch(curLevel){
case 0:
if(curExperience <= Lv0){
curLevel += 0;
}
case 1:
if(curExperience >= Lv1){
curLevel += 1;
LvMax = Lv1;
}
break;
case 2:
if(curExperience >= Lv2){
curLevel += 1;
LvMax = Lv2;
}
break;
case 3:
if(curExperience >= Lv3){
curLevel += 1;
LvMax = Lv3;
}
break;
case 4:
if(curExperience >= Lv4){
curLevel += 1;
LvMax = Lv4;
}
break;
case 5:
if(curExperience >= Lv5){
curLevel += 1;
LvMax = Lv5;
}
break;
case 6:
if(curExperience >= Lv6){
curLevel += 1;
LvMax = Lv6;
}
break;
case 7:
if(curExperience >= Lv7){
curLevel += 1;
LvMax = Lv7;
}
break;
case 8:
if(curExperience >= Lv8){
curLevel += 1;
LvMax = Lv8;
}
break;
case 9:
if(curExperience >= Lv9){
curLevel += 1;
LvMax = Lv9;
}
break;
case 10:
if(curExperience >= Lv10){
curLevel += 1;
LvMax = Lv10;
}
break;
}
}
//function die()
//{
// player.transform.position = Vector3(5,0,5); // A vector 3 teleport
// playerHealth = 1000;
// playerMana = 1000; // Reseting the vitals or else it will loop the death(HP = 0)
// playerEnergy = 100;
//}
//function OnCollisionEnter( collision : Collision ) {
// if(target == null && GameObject.FindGameObjectsWithTag("Enemy")){
// target = GameObject.FindWithTag("Enemy").transform;
//}
//}
//function OnTriggerEnter()
//{
// if(target.gameObject.tag == "Enemy")
// {
// collider.isTrigger = true;
// playerHealth -= damageNpc; // Comment this out if you dont wanna take damage.
// curExperience += 5; //Exp per interaction with the enemy.
// }
//}
//XML Code *****************************************************************
function UTF8ByteArrayToString(characters : byte[] )
{
var encoding : UTF8Encoding = new UTF8Encoding();
var constructedString : String = encoding.GetString(characters);
return (constructedString);
}
function StringToUTF8ByteArray(pXmlString : String)
{
var encoding : UTF8Encoding = new UTF8Encoding();
var byteArray : byte[] = encoding.GetBytes(pXmlString);
return byteArray;
}
function SerializeObject(pObject : Object)
{
var XmlizedString : String = null;
var memoryStream : MemoryStream = new MemoryStream();
var xs : XmlSerializer = new XmlSerializer(typeof(UserData));
var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = xmlTextWriter.BaseStream; // (MemoryStream)
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return XmlizedString;
}
function DeserializeObject(pXmlizedString : String)
{
var xs : XmlSerializer = new XmlSerializer(typeof(UserData));
var memoryStream : MemoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
return xs.Deserialize(memoryStream);
}
function CreateXML()
{
var writer : StreamWriter;
var t : FileInfo = new FileInfo(_FileLocation+"/"+ _FileName);
if(!t.Exists)
{
writer = t.CreateText();
}
else
{
t.Delete();
writer = t.CreateText();
}
writer.Write(_data);
writer.Close();
Debug.Log("File written");
}
function LoadXML()
{
//StreamReader r = File.OpenText(_FileLocation+"\\"+ _FileName);
var r : StreamReader = File.OpenText(_FileLocation+"/"+ _FileName);
var _info : String = r.ReadToEnd();
r.Close();
_data=_info;
Debug.Log("File Read");
}
//EndOfXML Code **************************************************************