一个通用高自由度技能系统的设计(二) Data基类设计

本文介绍了一种技能系统的数据层设计方法,通过基类派生实现了ConditionData、CommandData及TargetPickerData等具体数据类的设计。这些数据类用于存储技能的基础数据,并在技能类中进行逻辑运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任何系统设计都需要进行分层设计,首先我们先设计数据层。数据层由抽象基类派生出不同数据类。


这些基类用于存储技能的一些基础数据,后面放置到技能类当中用于逻辑运算


技能系统Data类基类设计:


public class BaseData
{
    public BaseData()
    {
    }

    public virtual BaseData Clone()
    {
        BaseData data = new BaseData();
        CopyTo(data);
        return data;
    }

    protected virtual void CopyTo(BaseData destinationData)
    {
    }
}


ConditionData数据类都是由ConditionData基类派生而出的。

ConditionData基类:


public class ConditionData : BaseData
	{
		public ConditionData()
		{
		}
		
		
		public virtual ConditionType GetDataType()
		{
			return ConditionType.DEFAULT;
		}
		
		public override BaseData Clone()
		{
			ConditionData data = SkillConditionFactory.CreateSkillConditionData(GetDataType());
			CopyTo(data);
			return data;
		}

	}


CommandData基类:

public class CommandData : BaseData
	{
		public CommandData()
		{
		}
		
		
		public virtual CommandType GetDataType()
		{
			return CommandType.COMMAND_DEFAULT;
		}
		
		public override BaseData Clone()
		{
			CommandData data = CommandFactory.CreateCommandData(GetDataType());
			CopyTo(data);
			return data;
		}

	}

TargetPickerData基类:

public class TargetPickerData : BaseData
	{
		public int TargetMaxNum = 0;
			
		public TargetPickerData()
		{
		}
		
		public virtual TargetPickerType GetDataType()
		{
			return TargetPickerType.TARGET_PICKER_DEFAULT;
		}
		
		
		public override BaseData Clone()
		{
			TargetPickerData data = TargetPickerFactory.CreateTargetPickerData(GetDataType());
			CopyTo(data);
			return data;
		}
		
		protected override void CopyTo(BaseData destinationData)
		{
			base.CopyTo(destinationData);
			
			TargetPickerData data = (TargetPickerData)destinationData;
			data.TargetMaxNum = TargetMaxNum;
		}

	}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值