GameFrameWork框架自定义配表类型

GameFrameWork框架常用的配表类型基本都已经包含,但实际开发项目的时候,我们难免会碰到一些特殊的类型,需要自己自定义,下面记录一下GameFrameWork框架自定义配表的流程。以自定义List<int> 类型为例。

首先,我们需要自定义自己的DataTableProcessor.List_intProcessor.cs类,参照现有的提供好的自定义类型,依样画符即可。下面是详细代码.

using System.Collections.Generic;
using System.IO;

namespace FishOfHuaNong.Editor.DataTableTools
{
    public sealed partial class DataTableProcessor
    {
        private sealed class List_intProcessor : GenericDataProcessor<List<int>>
        {
            //是否是系统自带的类型
            public override bool IsSystem
            {
                get
                {
                    return false;
                }
            }

            /// <summary>
            /// 定义的类型名称
            /// </summary>
            public override string LanguageKeyword
            {
                get
                {
                    return "List<int>";
                }
            }

            /// <summary>
            /// 定义的类型名称
            /// </summary>
            public override string[] GetTypeStrings()
            {
                return new string[]
                {
                    "List<int>",
                };
            }

           /// <summary>
           /// 解析输入的值,返回定义的类型值
           /// </summary>
           /// <param name="value"></param>
           /// <returns></returns>
            public override List<int> Parse(string value)
            {
                string[] values = value.Split(',');
                List<int> temp = new List<int>();
                foreach(var VarIAble in values) 
                {
                    temp.Add(int.Parse(VarIAble));
                }
                return temp;
            }

            /// <summary>
            /// 写入二进制流
            /// </summary>
            /// <param name="dataTableProcessor"></param>
            /// <param name="binaryWriter"></param>
            /// <param name="value"></param>
            public override void WriteToStream(DataTableProcessor dataTableProcessor, BinaryWriter binaryWriter, string value)
            {
                List<int> intList = Parse(value);
                foreach(var intItem in intList) 
                {
                    binaryWriter.Write(intItem);
                }
                
            }
        }
    }
}

然后在BinaryReaderExtension和DataTableExtension分别扩展读取自定义类型的方法

 正常情况下做到这一步已经可以正常生成数据了,但因为自定义的类型比较特殊,带有< >的特殊符号,这些特殊符号无法直接作为方法名字符使用,故我们还需在代码生成类DataTableGenerator.cs中做一些特殊判断

 

 这些操作完成后,点击工具栏的Generate DataTable即可自动生成对应的配表类,最终生成的配表类如下。

//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------
// 此文件由工具自动生成,请勿直接修改。
// 生成时间:2022-01-18 00:53:04.927
//------------------------------------------------------------

using GameFramework;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
using UnityGameFramework.Runtime;

namespace FishOfHuaNong
{
    /// <summary>
    /// 实体表。
    /// </summary>
    public class DRTest : DataRowBase
    {
        private int m_Id = 0;

        /// <summary>
        /// 获取实体编号。
        /// </summary>
        public override int Id
        {
            get
            {
                return m_Id;
            }
        }

        /// <summary>
        /// 获取资源名称。
        /// </summary>
        public string AssetName
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取资源数组。
        /// </summary>
        public List<int> AssetList
        {
            get;
            private set;
        }

        public override bool ParseDataRow(string dataRowString, object userData)
        {
            string[] columnStrings = dataRowString.Split(DataTableExtension.DataSplitSeparators);
            for (int i = 0; i < columnStrings.Length; i++)
            {
                columnStrings[i] = columnStrings[i].Trim(DataTableExtension.DataTrimSeparators);
            }

            int index = 0;
            index++;
            m_Id = int.Parse(columnStrings[index++]);
            index++;
            AssetName = columnStrings[index++];
            //自定义的扩展方法
            AssetList = DataTableExtension.ParseList_int(columnStrings[index++]);

            GeneratePropertyArray();
            return true;
        }

        public override bool ParseDataRow(byte[] dataRowBytes, int startIndex, int length, object userData)
        {
            using (MemoryStream memoryStream = new MemoryStream(dataRowBytes, startIndex, length, false))
            {
                using (BinaryReader binaryReader = new BinaryReader(memoryStream, Encoding.UTF8))
                {
                    m_Id = binaryReader.Read7BitEncodedInt32();
                    AssetName = binaryReader.ReadString();
                    //自定义的扩展方法
                    AssetList = binaryReader.ReadList_int();
                }
            }

            GeneratePropertyArray();
            return true;
        }

        private void GeneratePropertyArray()
        {

        }
    }
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值