MovCtrl.cs
using UnityEngine;
using System.Text;
using System.IO;
using System;
using System.Runtime.InteropServices;
using System.Collections;
using System.Collections.Specialized;
using System.Linq;
using System.Collections.Generic;
public class MovCtrl : MonoBehaviour
{
public Transform trans;
public Vector3 mov;
public Vector3 OrgPos;
public Vector3 orgPos
{
get
{
return OrgPos;
}
set
{
OrgPos = value;
}
}
public Vector3 rtAix;
public float angle;
public Quaternion orgRt;
[Tooltip("记录帧数,1秒大概50帧")]
public int ZhenNumber=50;
public int ZhenSum;
public float time;
public float timeLen;
public float startTime;
public enum FuncList{eFix, eUnfix};
public enum movState{eFixing = -1, eUnmov, eUnfixing};
public enum FixState{eUnfixed, eFixed};
public bool needToFixedBeforeShowParent;
public FixState fstate= FixState.eUnfixed;
public FixState fst
{
get { return fstate; }
set {
fstate = value;
//if (value == FixState.eFixed)
//{
// FuncReactor myFr = transform.GetComponent();
// if (myFr != null)
// {
// myFr.ContributeKeys();
// myFr.Hstate = FuncReactor.hangState.ePrtFixed;
// }
//}
}
}
public movState mst = movState.eUnmov;
public bool showWhenUnfix = false;
//public FuncList curFunc;
protected bool isActive = false;
[DllImport( "kernel32" )]
private static extern long WritePrivateProfileString (string section ,
string key ,
string val,
string filePath );
[DllImport("kernel32")]
private static extern int GetPrivateProfileString (string section,
string key,
string def,
StringBuilder retVal,
int size,
string filePath);
public static string movDataFile = "D:\\TieTa2\\ExternData\\mov.dat";
void Start ()
{
trans = transform;
{
orgPos = trans.localPosition;
orgRt = trans.localRotation;
}
timeLen = time;
ZhenSum=ZhenNumber;
startTime = 0;
//hideAll(true);
if(fst == FixState.eUnfixed)
{
quickUnfix();
}
else
{
quickFix();
}
fst=FixState.eFixed;
mst=movState.eFixing;
}
//按帧数累加(1秒50帧)
public void FixedUpdate()
{
if(mst == movState.eUnmov)
{
return;
}
if(ZhenNumber > 0)
{
trans.localPosition += (int)mst * mov * 1 / ZhenSum;
Transform rtAixTran = trans.FindChild("RtAix");
if(rtAixTran != null)
{
}
else
{
trans.Rotate(rtAix, (int)mst * angle * 1 / ZhenSum, Space.Self);
}
ZhenNumber--;
//ZhenSum++;
}
else
{
ZhenNumber = 0;
if(mst == movState.eUnfixing)
{
fst = FixState.eUnfixed;
}
else
{
fst = FixState.eFixed;
}
mst = movState.eUnmov;
isActive = false;
}
}
public virtual void LoadInit()
{
if(fst == FixState.eUnfixed)
{
quickUnfix();
}
else
{
quickFix();
}
}
public bool isFixed()
{
if(fst == FixState.eFixed)
{
return true;
}
return false;
}
public virtual void quickFix()
{
//Debug.Log(trans.name + "qf");
if (trans != null)
{
trans.localPosition = orgPos;
trans.localRotation = orgRt;
}
mst = movState.eUnmov;
// fstate= FixState.eFixed;
fst = FixState.eFixed;
//StartCoroutine(fr.coroutineComplete(1.0f));
}
public void quickUnfix()
{
trans.localPosition = orgPos;
trans.localRotation = orgRt;
trans.localPosition += mov;
Transform rtAixTran = trans.FindChild("RtAix");
if(rtAixTran != null)
{
Vector3 rtAix2 = Vector3.zero;
if(rtAix.x == 1)
{
rtAix2 = rtAixTran.right;
}
else if(rtAix.y == 1)
{
rtAix2 = rtAixTran.up;
}
else if(rtAix.z == 1)
{
rtAix2 = rtAixTran.forward;
}
trans.RotateAround(rtAixTran.position, rtAix2, angle);
}
else
{
trans.Rotate(rtAix, angle, Space.Self);
}
mst = movState.eUnmov;
fst = FixState.eUnfixed;
}
public virtual void overrideFix()
{
isActive = true;
trans.localPosition = orgPos;
trans.localRotation = orgRt;
trans.localPosition += mov;
//trans.Rotate(rtAix, angle, Space.Self);
Transform rtAixTran = trans.FindChild("RtAix");
if(rtAixTran != null)
{
Vector3 rtAix2 = Vector3.zero;
if(rtAix.x == 1)
{
rtAix2 = rtAixTran.right;
}
else if(rtAix.y == 1)
{
rtAix2 = rtAixTran.up;
}
else if(rtAix.z == 1)
{
rtAix2 = rtAixTran.forward;
}
trans.RotateAround(rtAixTran.position, rtAix2, angle);
Debug.Log(rtAix2);
}
else
{
trans.Rotate(rtAix, angle, Space.Self);
}
time = timeLen;
mst = movState.eFixing;
}
public virtual IEnumerator fix()
{
yield return new WaitForSeconds(startTime);
//Debug.Log(gameObject.name + " fix time " + Time.time);
overrideFix();
}
public virtual void overrideUnfix()
{
isActive = true;
trans.localPosition = orgPos;
trans.localRotation = orgRt;
time = timeLen;
Debug.Log("HERE"+gameObject.name);
mst = movState.eUnfixing;
}
public IEnumerator unfix()
{
yield return new WaitForSeconds(startTime);
Debug.Log("unfix");
//Debug.Log(gameObject.name + " fix time " + Time.time);
overrideUnfix();
}
// public void hide(bool ishide)
// {
// MeshRenderer rd = trans.GetComponent();
// if(rd != null)
// {
// rd.enabled = !ishide;
// Collider cld = transform.GetComponent();
// if(cld != null)
// {
// cld.isTrigger = ishide;
// }
// }
// }
// public void hideAll(bool ishide)
// {
// foreach (Transform t in trans.GetComponentsInChildren())
// {
// MeshRenderer rd = t.GetComponent();
// if(rd != null)
// {
// //Debug.Log("hd+ " + t.name + ishide);
// rd.enabled = !ishide;
// Collider cld = t.GetComponent();
// if(cld != null)
// {
// cld.isTrigger = ishide;
// }
// }
// }
// }
// Update is called once per frame
//按时间累加计算时间
public void Update ()
{
// if(mst == movState.eUnmov)
// {
// return;
// }
// if(time > Time.deltaTime)
// {
// trans.localPosition += (int)mst * mov * Time.deltaTime / timeLen;
// Transform rtAixTran = trans.FindChild("RtAix");
// if(rtAixTran != null)
// {
// Vector3 rtAix2 = Vector3.zero;
// if(rtAix.x == 1)
// {
// rtAix2 = rtAixTran.right;
// }
// else if(rtAix.y == 1)
// {
// rtAix2 = rtAixTran.up;
// }
// else if(rtAix.z == 1)
// {
// rtAix2 = rtAixTran.forward;
// }
// trans.RotateAround(rtAixTran.position, rtAix2, (int)mst * angle * Time.deltaTime / timeLen);
// //Debug.Log(rtAix2);
// }
// else
// {
// trans.Rotate(rtAix, (int)mst * angle * Time.deltaTime / timeLen, Space.Self);
// }
// time -= Time.deltaTime;
// }
// else
// {
// time = 0.0f;
// if(mst == movState.eUnfixing)
// {
// fst = FixState.eUnfixed;
// }
// else
// {
// //trans.localPosition = orgPos;
// //trans.localRotation = orgRt;
// fst = FixState.eFixed;
// }
// mst = movState.eUnmov;
// isActive = false;
// }
}
void save()
{
string name = trans.name;
WritePrivateProfileString(name, "movX", mov.x.ToString(), movDataFile);
WritePrivateProfileString(name, "movY", mov.y.ToString(), movDataFile);
WritePrivateProfileString(name, "movZ", mov.z.ToString(), movDataFile);
WritePrivateProfileString(name, "rtAixX", rtAix.x.ToString(), movDataFile);
WritePrivateProfileString(name, "rtAixY", rtAix.y.ToString(), movDataFile);
WritePrivateProfileString(name, "rtAixZ", rtAix.z.ToString(), movDataFile);
WritePrivateProfileString(name, "angle", angle.ToString(), movDataFile);
WritePrivateProfileString(name, "time", time.ToString(), movDataFile);
}
void load(string name)
{
{
StringBuilder info = new StringBuilder();
GetPrivateProfileString(name, "movX", "0.0", info, 100, movDataFile);
mov.x = (float)Convert.ToDouble(info.ToString());
}
{
StringBuilder info = new StringBuilder();
GetPrivateProfileString(name, "movY", "0.0", info, 100, movDataFile);
mov.y = (float)Convert.ToDouble(info.ToString());
}
{
StringBuilder info = new StringBuilder();
GetPrivateProfileString(name, "movZ", "0.0", info, 100, movDataFile);
mov.z = (float)Convert.ToDouble(info.ToString());
}
{
StringBuilder info = new StringBuilder();
GetPrivateProfileString(name, "rtAixX", "0.0", info, 100, movDataFile);
rtAix.x = (float)Convert.ToDouble(info.ToString());
}
{
StringBuilder info = new StringBuilder();
GetPrivateProfileString(name, "rtAixY", "0.0", info, 100, movDataFile);
rtAix.y = (float)Convert.ToDouble(info.ToString());
}
{
StringBuilder info = new StringBuilder();
GetPrivateProfileString(name, "rtAixZ", "0.0", info, 100, movDataFile);
rtAix.z = (float)Convert.ToDouble(info.ToString());
}
{
StringBuilder info = new StringBuilder();
GetPrivateProfileString(name, "angle", "0.0", info, 100, movDataFile);
angle = (float)Convert.ToDouble(info.ToString());
}
{
StringBuilder info = new StringBuilder();
GetPrivateProfileString(name, "time", "0.0", info, 100, movDataFile);
time = (float)Convert.ToDouble(info.ToString());
}
}
void OnGUI()
{
// if(GUI.Button(new Rect(10,10,100,20),"Save"))
// {
// save();
// }
// if(GUI.Button(new Rect(10,40,100,20),"Load"))
// {
// load(trans.name);
// }
// if(GUI.Button(new Rect(10,60,100,20),"Fix"))
// {
// fix();
// }
// if(GUI.Button(new Rect(10,90,100,20),"Unfix"))
// {
// unfix();
// }
// if(GUI.Button(new Rect(10,120,100,20),"hid"))
// {
// hideAll(true);
// }
// if(GUI.Button(new Rect(10,150,100,20),"show"))
// {
// hideAll(false);
// }
}
// public virtual void saveDoc(string docPath)
// {
// Std.WritePrivateProfileString(transform.GetHashCode().ToString(), "FixState", fst.ToString(), docPath);
// }
//
// public virtual void loadDoc(string docPath)
// {
// //Debug.Log(docPath);
// StringBuilder strBd = new StringBuilder();
// if(Std.GetPrivateProfileString(transform.GetHashCode().ToString(), "FixState", "-100", strBd, 100, docPath) == 0)
// {
// throw(new ApplicationException("Ini Reading Er"));
// }
// //Debug.Log(transform.name + " is " + strBd);
// if(strBd.ToString().CompareTo("eFixed") == 0)
// {
// fst = FixState.eFixed;
// //quickFix();
// }
// else
// {
// fst = FixState.eUnfixed;
// //quickUnfix();
// }
// }
}