using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class FunctionSync_Parent : OneValueSyncObject
{
    /// <summary>
    /// 是否为父物体
    /// </summary>
    public bool isParent;

    private OneValueSyncObject localposSync;
    private OneValueSyncObject localangSync;

    private void Start()
    {
        Init();
    }

    public void Init()
    {
        if(!hasInit)
        {
            InitDynamic("parent_" + gameObject.name, CallBackParent, ValueType.String);
            if (!isParent)
            {
                localposSync = gameObject.AddComponent<OneValueSyncObject>();
                localposSync.InitDynamic(Id + "pos", CallBackPos, ValueType.Vector3);
                localangSync = gameObject.AddComponent<OneValueSyncObject>();
                localangSync.InitDynamic(Id + "ang", CallBackAng, ValueType.Vector3);
            }
        }    
    }
    /// <summary>
    /// 设置父物体
    /// </summary>
    /// <param name="parent"></param>
    /// <param name="Localpos"></param>
    /// <param name="LocalEulerAngles"></param>
    public void SetParent(FunctionSync_Parent parent, Vector3 Localpos,Vector3 LocalEulerAngles)
    {
        if(!isParent)
        {
            transform.parent = parent.transform;
            transform.localPosition = Localpos;
            transform.localEulerAngles = LocalEulerAngles;

            mystring = parent.Id;
            SendSync();
            SetLocalPos(Localpos);
            SetLocalAng(LocalEulerAngles);
        }
        else
        {
            Debug.LogError("父物体不能再设置父物体");
        }
    }
    /// <summary>
    /// 设置局部坐标
    /// </summary>
    public void SetLocalPos(Vector3 localpos)
    {
        localposSync.myvector3 = localpos;
        localposSync.SendSync();
    }
    /// <summary>
    /// 设置局部旋转
    /// </summary>
    public void SetLocalAng(Vector3 localang)
    {
        localangSync.myvector3 = localang;
        localangSync.SendSync();
    }

    private void CallBackParent(string id, bool isEnterRoom)
    {
        if (!isParent)
        {
            transform.parent = OneValueSyncObject.OneAxisSyncObjectList[mystring].transform;
        }
    }
    private void CallBackPos(string id, bool isEnterRoom)
    {
        if (!isParent)
        {
            transform.localPosition = localposSync.myvector3;
        }
    }
    private void CallBackAng(string id, bool isEnterRoom)
    {
        if (!isParent)
        {
            transform.localEulerAngles = localangSync.myvector3;
        }
    }
}