AI

来源:互联网 发布:sg是什么软件 编辑:程序博客网 时间:2024/03/29 10:08
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;using CommonEnum;public enum FeastUIChangedType{    FeastUIChangedType_Congratulated = 1,    FeastUIChangedType_InvitePlayerSuc = 2,    FeastUIChangedType_GetInfo = 3,    FeastUIChangedType_GetInvitePlayer = 4,    FeastUIChangedType_Owner_Operation_Money = 5,    FeastUIChangedType_Owner_Operation_Food = 6,    FeastUIChangedType_Owner_Operation_Wine = 7,    FeastUIChangedType_Owner_Operation_Dance = 8,    FeastUIChangedType_Guest_Operation_Money = 9,    FeastUIChangedType_Guest_Operation_Food = 10,    FeastUIChangedType_Guest_Operation_Wine = 11,    FeastUIChangedType_Guest_Operation_Dance = 12,    FeastUIChangedType_GetMoneyRecord = 13,    FeastUIChangedType_Time_Up = 14,    FeastUIChangedType_EnterGuest = 15,    FeastUIChangedType_OwnerTalk = 16,    FeastUIChangedType_GuestTalk = 17,}public class FeastCtrl : NTFrame.SingletonMono<FeastCtrl>{    public static Vector3 gFoodOffest = new Vector3(0, -1.5f, 0.65f);    public static Vector3 gWineOffest = new Vector3(0, -1.5f, 0.66f);    public static Vector3 gFoodAndWineOffestRot = new Vector3(90, 0, 0);    public delegate void FestChangeFunc(FeastUIChangedType type);    public FestChangeFunc mChangeFunc;    private GameObject mSceneRootObj;    private Animator mOwner;    private Dictionary<int, Animator> mGuests = new Dictionary<int, Animator>();    private Dictionary<int, bool> mGuestIsInit = new Dictionary<int, bool>();    private Dictionary<int, GameObject> mDesks = new Dictionary<int, GameObject>();    private Dictionary<int, Animator> mDancers = new Dictionary<int, Animator>();    private bool mbLoadDancer = false;    private bool mNeedInitGuest = true;    private bool mInitComponent = false;    private bool mCurIsFeast = false;    private int mFinishedTime = 0;    private bool mSelfIsGuest = false;    private void InitComponent()    {        mInitComponent = true;        mSceneRootObj = GameObject.Find("Main_building_neizheng");        mGuests.Clear();        mOwner = null;        mNeedInitGuest = true;        mDesks.Clear();        for(int i = 1; i <= 10; i++)        {            GameObject obj = ObjectCommon.GetChild(mSceneRootObj, "Model/Main_building_neizheng_kezuo/Main_building_neizheng_kezuo" + i.ToString("00"));            mDesks[i] = obj;        }        mDancers.Clear();        mbLoadDancer = false;    }    private void ClearComponent()    {        mSceneRootObj = null;        mGuests.Clear();        mOwner = null;        mDesks.Clear();        mInitComponent = false;        mGuestIsInit.Clear();        mDancers.Clear();        mbLoadDancer = false;    }    public void AddChangeFunc(FestChangeFunc func)    {        mChangeFunc += func;    }    public void RemoveChangeFunc(FestChangeFunc func)    {        mChangeFunc -= func;    }    public void FeastChange(FeastUIChangedType type)    {        if (mChangeFunc != null)        {            mChangeFunc(type);        }    }    public void EnterScene()    {        InitComponent();        UIManager.OpenUIFeast();        FeastStatu curState = FeastManager.GetInstance().GetCurStatu();        switch(curState)        {            case FeastStatu.FeastStatu_Owner:                break;            case FeastStatu.FeastStatu_Guest:                break;            case FeastStatu.FeastStatu_NoFeast:                break;            default :                break;        }        if(mSelfIsGuest)        {            mSelfIsGuest = false;            GuestInterScene(PlayerManager.GetInstance().GetPlayerId());        }    }    public void CloseScene()    {        ClearComponent();        StopAllCoroutines();        NetWorkManager.GetInstance().SendWatchLeave();    }    public void GuestJoin()    {        FeastInfo info = FeastManager.GetInstance().GetFeastInfo();        if(info != null             && info.GetGuestIsIn10(PlayerManager.GetInstance().GetPlayerId()))            mSelfIsGuest = true;        UIManager.OpenFeastScene();    }    public void OwnerOperate(FeastOperation opType)    {        switch(opType)        {            case FeastOperation.FeastOperation_Money:                break;            case FeastOperation.FeastOperation_Food:                break;            case FeastOperation.FeastOperation_Wine:                break;            case FeastOperation.FeastOperation_Dance:                break;            default:                break;        }    }    public void GuestOperate(FeastOperation opType)    {        switch (opType)        {            case FeastOperation.FeastOperation_Money:                break;            case FeastOperation.FeastOperation_Food:                break;            case FeastOperation.FeastOperation_Wine:                break;            case FeastOperation.FeastOperation_Dance:                break;            default:                break;        }    }    //没有宴会的显示    public void InitMyKing()    {        string ownerModle = PlayerManager.GetInstance().GetPlayerModel();        List<string> heroActions = new List<string>();        heroActions.Add(StringDefine.Idle);        heroActions.Add(StringDefine.Sit);        ResourceManager.GetInstance().LoadHero(ownerModle, heroActions, delegate (GameObject obj)        {            if (obj != null)            {                mOwner = obj.GetComponent<Animator>();                mOwner.transform.localScale = new Vector3(1.8f, 1.8f, 1.8f);                mOwner.transform.localRotation = Quaternion.Euler(new Vector3(0, 90f, 0));                mOwner.transform.localPosition = UINeiZheng.gmainHeroPos;                if (mSceneRootObj != null)                    mOwner.transform.SetParent(mSceneRootObj.transform);                mOwner.Play(StringDefine.Sit);                mOwner.name = "king";            }        });    }    //客人进场    public void GuestInterScene(long guid)    {        FeastInfo info = FeastManager.GetInstance().GetFeastInfo();        if (info == null)            return;        int index = info.GetGuestIndex(guid);        FeastGuest guest = info.GetGuest(guid);        if (guest == null)            return;        if(index >= 1 && index <= 10)        {            if(mGuests.Count < index)            {                LoadAGuest(guest.GetModel(), index,delegate(GameObject obj)                {                    GuestMoveToSeat(obj, index);                });            }            else            {                GuestMoveToSeat(mGuests[index].gameObject, index);            }        }    }    //客人移动到座位    private void GuestMoveToSeat(GameObject obj , int index)    {        if (index < 1 || index > 10)            return;        bool isLeft = (index % 2 == 1);        GameObject seat = mDesks[index];        if (seat == null)            return;        Vector3 endPosition = seat.transform.position;        obj.transform.position = endPosition;        Vector3 localP = obj.transform.localPosition;        //localP.y += 0.2f;        obj.transform.localPosition = localP;        endPosition = obj.transform.position;        if (isLeft)            localP.z -= 3;        else            localP.z += 3;        obj.transform.localPosition = localP;        Vector3 middlePosition = obj.transform.position;        localP = obj.transform.localPosition;        localP.x = 25;        obj.transform.localPosition = localP;        Vector3 startPosition = obj.transform.position;        obj.transform.position = startPosition;        float distance = Vector3.Distance(startPosition,middlePosition);        float time = 0.0f;        time = distance / 8f;        iTween.MoveTo(obj, iTween.Hash("position", middlePosition, "speed", 8f, "easeType", iTween.EaseType.linear, "looktarget", middlePosition));        Animator ani = obj.GetComponent<Animator>();        if (ani != null)            ani.Play(StringDefine.Run);        StartCoroutine(GuestSeatFinish(time,ani, endPosition));    }    //客人移动到座位结束    IEnumerator GuestSeatFinish(float time, Animator ani,Vector3 endPosition)    {        yield return new WaitForSeconds(time);        if (ani != null)        {            Hashtable tabel = new Hashtable();            iTween.MoveTo(ani.gameObject, iTween.Hash("position", endPosition, "time", 0.5f, "easeType", iTween.EaseType.linear, "looktarget", endPosition));            yield return new WaitForSeconds(0.5f);            ani.Play(StringDefine.Sit);        }    }    //加载一个客人    private void LoadAGuest(string modle, int index,CommonDelegate.ObjDelegate func = null)    {        if (mGuestIsInit.ContainsKey(index))            return;        mGuestIsInit[index] = true;        List<string> heroActions = new List<string>();        heroActions.Add(StringDefine.Idle);        heroActions.Add(StringDefine.Sit);        heroActions.Add(StringDefine.Run);        ResourceManager.GetInstance().LoadHero(modle, heroActions, delegate (GameObject obj)        {            if (obj != null)            {                Animator ani = obj.GetComponent<Animator>();                ani.transform.localScale = new Vector3(1.8f, 1.8f, 1.8f);                if (mDesks[index] != null)                {                    ani.transform.position = mDesks[index].transform.position;                    Vector3 localpos = ani.transform.localPosition;                    //localpos.y += 0.2f;                    ani.transform.localPosition = localpos;                    ani.transform.eulerAngles = mDesks[index].transform.eulerAngles;                    Vector3 localeule = ani.transform.localEulerAngles;                    localeule.x = 0;                    ani.transform.localEulerAngles = localeule;                }                if (mSceneRootObj != null)                    ani.transform.SetParent(mSceneRootObj.transform);                ani.Play(StringDefine.Sit);                ani.name = "guest" + index.ToString();                mGuests[index] = ani;                if (func != null)                    func(obj);            }        });    }    //初始化客人    public void InitGuest()    {        if (!mInitComponent)            return;        if (!mNeedInitGuest)            return;        mNeedInitGuest = false;        FeastInfo info = FeastManager.GetInstance().GetFeastInfo();        if (info == null)            return;        string ownerModle = info.GetOwnerModle();        List<string> heroActions = new List<string>();        heroActions.Add(StringDefine.Idle);        heroActions.Add(StringDefine.Sit);        if(mOwner == null)        {            ResourceManager.GetInstance().LoadHero(ownerModle, heroActions, delegate (GameObject obj)            {                if (obj != null)                {                    mOwner = obj.GetComponent<Animator>();                    mOwner.transform.localScale = new Vector3(1.8f, 1.8f, 1.8f);                    mOwner.transform.localRotation = Quaternion.Euler(new Vector3(0, 90f, 0));                    mOwner.transform.localPosition = UINeiZheng.gmainHeroPos;                    if (mSceneRootObj != null)                        mOwner.transform.SetParent(mSceneRootObj.transform);                    mOwner.Play(StringDefine.Sit);                    mOwner.name = "owner";                }            });        }        //load guest        List<FeastGuest> guests = info.GetGuests();        if(guests != null)        {            for(int i = 0; i < guests.Count; i++)            {                int index = i + 1;                string modle = guests[i].GetModel();                LoadAGuest(modle, index);            }        }        //load dancer        if(mDancers.Count == 0 && mbLoadDancer == false)        {            mbLoadDancer = true;            LoadADancer(StringDefine.LingWu,JudgeNeedDance);            LoadADancer(StringDefine.BanWu, JudgeNeedDance);        }    }    //开场时是否已经有舞女跳舞了    private void JudgeNeedDance()    {        if (mDancers.Count != 5)            return;        FeastInfo info = FeastManager.GetInstance().GetFeastInfo();        if (info == null)            return;        if (info.mbDance)        {            for(int i = 0; i < mDancers.Count; i++)            {                if(mDancers[i] != null)                {                    UITools.setActive(mDancers[i].gameObject, true);                }            }            PlayerDance(StringDefine.Show);        }    }    //舞女跳舞    private void PlayerDance(string action)    {        float random = NGUITools.RandomRange(0, 7);        random = random / 10.0f;        for (int i = 0; i < mDancers.Count; i++)        {            FeastDancerData data = FeastManager.GetInstance().GetDancerData(i + 1);                     if (mDancers[i] != null)            {                mDancers[i].Play(action, 0, random);                mDancers[i].SetBool("Show", true);                if (data != null)                {                    mDancers[i].transform.eulerAngles = data.mRot;                    mDancers[i].transform.position = data.mPos;                }            }        }    }    //舞女进场    public void DancerEnterScene()    {        for(int i = 0; i < mDancers.Count; i++)        {            if (mDancers[i] == null)                continue;            UITools.setActive(mDancers[i].gameObject, true);            FeastDancerData configData = FeastManager.GetInstance().GetDancerData(i + 1);            if(configData != null)            {                mDancers[i].Play(StringDefine.Run,-1,0);                iTween.MoveTo(mDancers[i].gameObject, iTween.Hash("position", configData.mPos, "time", 6f, "easeType", iTween.EaseType.easeOutSine, "looktarget", configData.mPos));                StartCoroutine(DancerInRightPos(configData, mDancers[i]));            }        }    }    //舞女就位    private IEnumerator DancerInRightPos(FeastDancerData data,Animator ani)    {        yield return new WaitForSeconds(6f);        if(data != null && ani != null)        {            ani.transform.eulerAngles = data.mRot;            ani.Play(StringDefine.Show, -1, 0);            ani.SetBool("Show", true);        }    }    //加载一个舞女    private void LoadADancer(string modle,CommonDelegate.VoidDelegate func)    {        List<string> heroActions = new List<string>();        heroActions.Add(StringDefine.Idle);        heroActions.Add(StringDefine.Show);        heroActions.Add(StringDefine.Run);        ResourceManager.GetInstance().LoadHero(modle, heroActions, delegate (GameObject obj)        {            if (obj != null)            {                Animator ani = obj.GetComponent<Animator>();                ani.transform.localScale = new Vector3(1.8f, 1.8f, 1.8f);                if (mSceneRootObj != null)                    ani.transform.SetParent(mSceneRootObj.transform);                ani.Play(StringDefine.Show);                if(modle == StringDefine.LingWu)                {                    mDancers[0] = obj.GetComponent<Animator>();                    mDancers[0].name = "lingwu";                    InitDancePos(0, mDancers[0].gameObject);                }                else if(modle == StringDefine.BanWu)                {                    mDancers[1] = obj.GetComponent<Animator>();                    mDancers[1].name = "banwu1";                    InitDancePos(1, mDancers[1].gameObject);                    for (int i = 2; i < 5; i++)                    {                        GameObject tempObj = NGUITools.AddChild(mSceneRootObj, obj);                        tempObj.name = "banwu" + i.ToString();                        mDancers[i] = tempObj.GetComponent<Animator>();                        InitDancePos(i, mDancers[i].gameObject);                    }                }                if (func != null)                    func();            }        });    }    //舞女初始化位置    private void InitDancePos(int index,GameObject obj)    {        FeastDancerData data = FeastManager.GetInstance().GetDancerData(index + 1);        if (data == null || obj == null)            return;        obj.transform.position = data.mPos;        obj.transform.localScale = data.mScale;        Vector3 pos = obj.transform.localPosition;        pos.x = 25;        obj.transform.localPosition = pos;        UITools.setActive(obj, false);    }    //获取主人在屏幕中的位置    public Vector3 GetOwnerPositionInScreeen()    {        if(mOwner != null)        {            Camera camera = Camera.main;            if(camera != null)            {                return camera.WorldToScreenPoint(mOwner.transform.position);            }        }        return Vector3.zero;    }    //获取客人在屏幕中的位置    public Vector3 GetGuestPositionInScreen(long guid)    {        FeastInfo info = FeastManager.GetInstance().GetFeastInfo();        if(info != null)        {            int index = info.GetGuestIndex(guid);            if(index >= 1 && index <= 10 && mDesks.ContainsKey(index))            {                Camera camera = Camera.main;                if (camera != null)                {                    return camera.WorldToScreenPoint(mDesks[index].transform.position);                }            }        }        return Vector3.zero;    }    //获取客人课桌    public GameObject GetGuestDest(int index)    {        if(mDesks.ContainsKey(index))            return mDesks[index];        return null;    }    private void Update()    {        if (!mCurIsFeast)            return;        if(mFinishedTime <= TimerManager.GetInstance().CurrentServerTime)        {            mCurIsFeast = false;            FeastChange(FeastUIChangedType.FeastUIChangedType_Time_Up);            mFinishedTime = 0;            FeastManager.GetInstance().SetFeastInfo(new FeastInfo());            FeastInfo info = FeastManager.GetInstance().GetFeastInfo();            if (info != null)                info.mFeastStatu = FeastStatu.FeastStatu_NoFeast;        }    }    public void SetFeastFinishTime(int time)    {        mFinishedTime = time;        if (mFinishedTime > TimerManager.GetInstance().CurrentServerTime)            mCurIsFeast = true;    }}

0 0
原创粉丝点击