Esempio n. 1
0
 /// <summary>
 /// 添加DataModelBehaviour
 /// </summary>
 /// <param name="dataModelBehaviour"></param>
 public static void AddDataModel(int id, DataModelBehaviour dataModelBehaviour)
 {
     if (!AllDataModel.ContainsKey(id))
     {
         AllDataModel.Add(id, dataModelBehaviour);
     }
 }
Esempio n. 2
0
        /// <summary>
        /// 场景还原前,预制体准备操作
        /// </summary>
        public override void LoadStorageData()
        {
            ReplayEntity data = (ReplayEntity)DataEntity;

            //多次点击 还原
            if (data.sceneIdNameOfPrefab.Count == _sceneIdNameOfPrefab.Count)
            {
                return;
            }
            _sceneIdNameOfPrefab.Clear();

            data.sceneIdNameOfPrefab.ForEach(p => _sceneIdNameOfPrefab.Add(p));


            string sceneName = SceneManager.GetActiveScene().name;

            //生成所有的预制体
            for (int i = 0; i < data.sceneIdNameOfPrefab.Count; i++)
            {
                //生成属于当前场景的预制体
                if (data.sceneIdNameOfPrefab[i].Split('=')[0].Equals(sceneName))
                {
                    string     name = data.sceneIdNameOfPrefab[i].Split('=')[2];
                    GameObject go   = GetInstance(name, Vector3.zero);
                    RegisterPrefab(go);

                    DataModelBehaviour dataModel = go.GetComponent <DataModelBehaviour>();
                    if (dataModel != null)
                    {
                        RestoreSystem.AddDataModel(dataModel.DataEntity.objectID, dataModel);
                    }
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 设置动态物体的唯一ID(同时设置UniqueID和objectID)
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="inStorage">是否将生成的DataModel添加到存储系统中</param>
        /// <returns></returns>
        public static int  SetId(GameObject obj, bool inStorage = true)
        {
            DataModelBehaviour data = obj.GetComponent <DataModelBehaviour>();

            if (data == null)
            {
                Debug.Log("当前gameobject未挂载DataModelBehaviour");
                return(0);
            }
            else
            {
                int id = Instance[indexOffect];
                data.DataEntity.objectID = id;
                data.GetComponent <UniqueID>().UniqueId = Instance[indexOffect];

                //下一id
                indexOffect += 1;

                if (inStorage)
                {
                    RestoreSystem.AddDataModel(id, data);
                }
                return(id);
            }
        }
Esempio n. 4
0
 /// <summary>
 /// 观察另一个对象并指明回调函数
 /// </summary>
 /// <param name="obj"></param>
 /// <param name="callback"></param>
 public virtual void Watch(DataModelBehaviour obj, DelOnValueChanged callback)
 {
     if (obj.DataEntity == null)
     {
         throw new BindingException("The DataEntity is null.");
     }
     watchTable.Watch(obj.DataEntity, "*", callback);
 }
Esempio n. 5
0
 /// <summary>
 /// 观察另外一个对象
 /// </summary>
 /// <param name="obj"></param>
 public virtual void Watch(DataModelBehaviour obj)
 {
     if (obj.DataEntity == null)
     {
         throw new BindingException("The DataEntity is null.");
     }
     watchTable.Watch(obj.DataEntity, "*", OnEvent);
 }
Esempio n. 6
0
 /// <summary>
 /// 绑定物体DataModelBehaviour的数据实体,如果不能获取,则抛出异常;
 /// </summary>
 /// <param name="observer"></param>
 /// <param name="subject"></param>
 public void Binding(DataModelBehaviour observer, BaseDataModelEntity subject)
 {
     if (observer != null && subject != null)
     {
         observer.Watch(subject);
     }
     else
     {
         throw new BindingException("observer or subject could not be found.");
     }
 }
Esempio n. 7
0
 /// <summary>
 /// 取消绑定物体,本函数中自动获取gameObject的DataModelBehaviour对象,
 /// 如果不能获取,则抛出异常;
 /// </summary>
 /// <param name="goObserver"></param>
 /// <param name="goSubject"></param>
 public void Unbinding(DataModelBehaviour observer, BaseDataModelEntity subject, string propertyPath)
 {
     if (observer != null && subject != null)
     {
         observer.Unwatch(subject, propertyPath);
     }
     else
     {
         throw new BindingException("observer or subject could not be found.");
     }
 }
Esempio n. 8
0
        /// <summary>
        /// 将动态生成的物体,注册到回放和还原系统当中
        /// </summary>
        /// <param name="obj"></param>
        public static void RegisterPrefab(GameObject obj)
        {
            number += 1;

            if (obj.GetComponent <DataModelBehaviour>() != null)
            {
                DataModelBehaviour dataModel = obj.GetComponent <DataModelBehaviour>();
                int id = DynamicIds.SetId(dataModel);
            }
            string sceneName = SceneManager.GetActiveScene().name;

            _sceneIdNameOfPrefab.Add(sceneName + "=" + number.ToString() + "=" + obj.name.Split('(')[0]);
        }
Esempio n. 9
0
        /// <summary>
        /// 获取对应ID的数据实体
        /// </summary>
        /// <param name="objectID"></param>
        /// <returns></returns>
        public static BaseDataModelEntity GetEntity(int objectID)
        {
            DataModelBehaviour dm = null;

            AllDataModel.TryGetValue(objectID, out dm);
            if (dm != null)
            {
                return(dm.DataEntity);
            }
            else
            {
                return(null);
            }
        }
Esempio n. 10
0
        /// <summary>
        /// 绑定物体,本函数中自动获取gameObject的DataModelBehaviour对象,
        /// 如果不能获取,则抛出异常;
        /// </summary>
        /// <param name="goObserver"></param>
        /// <param name="goSubject"></param>
        public void Binding(GameObject goObserver, GameObject goSubject)
        {
            DataModelBehaviour observer = null;
            DataModelBehaviour subject  = null;

            observer = goObserver.GetComponent <DataModelBehaviour>();
            subject  = goSubject.GetComponent <DataModelBehaviour>();

            if (observer != null && subject != null)
            {
                observer.Watch(subject);
            }
            else
            {
                throw new BindingException("observer or subject could not be found.");
            }
        }
Esempio n. 11
0
 /// <summary>
 /// 设置动态物体的唯一ID(同时设置UniqueID和objectID)
 /// </summary>
 /// <param name="obj"></param>
 /// <param name="inStorage">是否将生成的DataModel添加到存储系统中</param>
 /// <returns></returns>
 public static int  SetId(DataModelBehaviour obj, bool inStorage = true)
 {
     if (obj == null)
     {
         Debug.Log("当前DataModelBehaviour为空");
         return(0);
     }
     else
     {
         int id = Instance[indexOffect];
         obj.DataEntity.objectID = id;
         obj.GetComponent <UniqueID>().UniqueId = id;
         //下一id
         indexOffect += 1;
         if (inStorage)
         {
             RestoreSystem.AddDataModel(id, obj);
         }
         return(id);
     }
 }
Esempio n. 12
0
 /// <summary>
 /// 取消观察另外一个对象
 /// </summary>
 /// <param name="obj"></param>
 public virtual void Unwatch(DataModelBehaviour obj)
 {
     watchTable.Unwatch(obj.DataEntity);
 }
Esempio n. 13
0
 /// <summary>
 /// 取消观察另外一个对象
 /// </summary>
 /// <param name="obj"></param>
 public virtual void Unwatch(DataModelBehaviour obj, string propertyName)
 {
     watchTable.Unwatch(obj.DataEntity, propertyName);
 }
Esempio n. 14
0
 /// <summary>
 /// 重新watch一个数据实体对象
 /// </summary>
 /// <param name="obj"></param>
 public virtual void ReWatch(DataModelBehaviour obj)
 {
     Unwatch(obj);
     Watch(obj);
 }
Esempio n. 15
0
 /// <summary>
 /// 观察另外一个对象
 /// </summary>
 /// <param name="obj"></param>
 public override void Watch(DataModelBehaviour obj)
 {
     watchTable.Watch(obj.DataEntity, "*", OnModelValueChanged);
 }