using System;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.GlobeDefine;
using Games.LogicObj;
using GCGame.Table;

public class Impact_ScreenUIEffect : ImpactEffectBase
{
    public override EffectLogic.EffectType ImpactEffectType
    {
        get { return EffectLogic.EffectType.TYPE_SCREENUIEFFECT; }
    }

    GameObject m_effectObj;
    RectTransform m_effectRect;
    public override void StartEffect()
    {
        base.StartEffect();
        int paramid = Data.GetParamValuebyIndex(0);
        Tab_EffectParam effectparam = TableManager.GetEffectParamByID(paramid, 0);
        if (effectparam == null)
            return;
        string path = effectparam.GetParamValuebyIndex(0);
        string name = effectparam.GetParamValuebyIndex(1);

        LoadAssetBundle.Instance.LoadUI(path, name, OnLoadHead, null);
    }

    public void OnLoadHead(string modelName, GameObject resObj, Hashtable hashParam)
    {
        m_effectObj = GameObject.Instantiate(resObj) as GameObject;
        if (m_effectObj == null || objCharacter==null)
        {
            StopEffect();
            return;
        }
        m_effectRect = m_effectObj.GetComponent<RectTransform>();
        if(m_effectRect==null)
        {
            StopEffect();
            return;
        }
        if (null != GameManager.gameManager.ActiveScene.NameBoardRoot)
        {
            m_effectObj.transform.parent = GameManager.gameManager.ActiveScene.NameBoardRoot.transform;
        }

        m_effectObj.transform.localPosition = Vector3.zero;
        m_effectObj.transform.localRotation = Quaternion.LookRotation(Vector3.forward);
        m_effectObj.transform.localScale = Vector3.one;
    }

    public override void StopEffect()
    {
        base.StopEffect();
        if(m_effectObj!=null)
        {
            m_effectObj.transform.parent = null;
            m_effectObj.SetActive(false);
            GameObject.Destroy(m_effectObj);
        }
    }

    protected override void UpdateInherited()
    {
        Vector3 worldPos = objCharacter.Position + new Vector3(0, objCharacter.DeltaHeight, 0); ;
        if (UIManager.Instance() != null && m_effectRect!=null)
        {
            var screenPoint = UIManager.Instance().WorldToUiPoint(worldPos);
            m_effectRect.anchoredPosition = screenPoint;
        }
    }
}