using UnityEngine;
using System.Collections;
public class DataSaveController : MonoBehaviour {
public int m_InstanceID;
// Use this for initialization
void Reset () {
m_InstanceID = gameObject.GetInstanceID();
}
void OnValidate() {
m_InstanceID = gameObject.GetInstanceID();
}
///
/// 取得目前的物件資料
///
/// The current object data.
public GameData.ObjectSaveData GetCurrentObjectData ()
{
GameData.ObjectSaveData currentObjectData = new GameData.ObjectSaveData();
currentObjectData = GetTransformInfo(currentObjectData);
currentObjectData = GetColliderInfo(currentObjectData);
return currentObjectData;
}
GameData.ObjectSaveData GetTransformInfo(GameData.ObjectSaveData currentObjectData)
{
if (gameObject.GetComponent() != null)
{
currentObjectData.objectInstanceID = this.gameObject.GetInstanceID();
currentObjectData.objectName = this.gameObject.name;
currentObjectData.transformPosition = this.transform.localPosition;
currentObjectData.transformRotation = this.transform.localEulerAngles;
currentObjectData.transformScale = this.transform.localScale;
}
return currentObjectData;
}
GameData.ObjectSaveData GetColliderInfo(GameData.ObjectSaveData currentObjectData)
{
if (gameObject.GetComponent() != null)
{
Collider currentCollider = gameObject.GetComponent();
currentObjectData.colliderIsTrigger = currentCollider.isTrigger;
if (gameObject.GetComponent() != null)
{
BoxCollider currentBoxCollider = gameObject.GetComponent();
currentObjectData.colliderCenter = currentBoxCollider.center;
currentObjectData.colliderSize = currentBoxCollider.size;
}
if (gameObject.GetComponent() != null)
{
SphereCollider currentSphereCollider = gameObject.GetComponent();
currentObjectData.colliderCenter = currentSphereCollider.center;
currentObjectData.colliderRadius = currentSphereCollider.radius;
}
}
return currentObjectData;
}
///
/// 設定目前的物件資料
///
/// The object data.
public void SetCurrentObjectData (GameData.ObjectSaveData theObjectData) {
SetObjectTransform(theObjectData);
SetPhysical(theObjectData);
}
///
/// 將讀取資料設定回物件上
///
/// The object data.
private void SetObjectTransform(GameData.ObjectSaveData theObjectData){
this.transform.localPosition = theObjectData.transformPosition;
this.transform.localEulerAngles = theObjectData.transformRotation;
this.transform.localScale = theObjectData.transformScale;
}
private void SetObjectAnimator(){
if (gameObject.GetComponent() != null){
}
}
private void SetNPCDialogueData(){
}
private void SetPhysical(GameData.ObjectSaveData theObjectData){
// 設置 RigidBody
// 設置 Collider
if (gameObject.GetComponent() != null)
{
Collider currentCollider = gameObject.GetComponent();
currentCollider.isTrigger = theObjectData.colliderIsTrigger;
if (gameObject.GetComponent() != null)
{
BoxCollider currentBoxCollider = gameObject.GetComponent();
currentBoxCollider.center = theObjectData.colliderCenter;
currentBoxCollider.size = theObjectData.colliderSize;
}
if (gameObject.GetComponent() != null)
{
SphereCollider currentSphereCollider = gameObject.GetComponent();
currentSphereCollider.center = theObjectData.colliderCenter;
currentSphereCollider.radius = theObjectData.colliderRadius;
}
}
}
}