/// <summary> /// 实体对象转换成Http字符串 /// /// </summary> /// <param name="sb">需要拼接的输入参数</param><param name="entity">实体接口</param> private void GetXmlStr(StringBuilder sb, VOBase entity) { sb.Append("<" + entity.GetType().Name.Replace(ConfigHelper.ENTITY_PROFIX, "") + " "); foreach (var field in entity.VOFieldInfos) { switch (Type.GetTypeCode(field.DataType)) { case TypeCode.Decimal: if (field.Value == null) { sb.Append(field.Name + "=\"0\" "); } else { sb.Append(field.Name + "=\"" + field.Value.ToString() + "\" "); } continue; case TypeCode.String: if (field.Value == null || string.IsNullOrWhiteSpace(field.Value.ToString())) { sb.Append(field.Name + "=\"`\" "); } else { sb.Append(field.Name + "=\"" + ConvertToXMLSpecialStr(field.Value.ToString()) + "\" "); } continue; } } sb.Append("/>"); }
/// <summary> /// 创建中立障碍物 /// </summary> /// <param name="vo">数据</param> private DisplayOwner CreateNPCObstacle(VOBase vo, CreateActorParam otherParam) { _npcObstacleDict.Add(vo.ObjID.ID, vo); var fixItem = GameObject.CreatePrimitive(PrimitiveType.Cube); // 设置父级 ParentManager.Instance().SetParent(fixItem, ParentManager.ObstacleParent); fixItem.layer = LayerMask.NameToLayer("Scenery"); //fixItem.name += i; var fix = fixItem.AddComponent<FixtureData>(); var unitWidth = ClusterManager.Single.UnitWidth; var mapWidth = ClusterManager.Single.MapWidth; var mapHeight = ClusterManager.Single.MapHeight; var offsetPos = LoadMap.Single.transform.position; fix.AllData.MemberData = new VOBase() { ObjID = new ObjectID(ObjectID.ObjectType.NPCObstacle), SpaceSet = 1, }; fix.transform.localScale = new Vector3(unitWidth, unitWidth, unitWidth); fix.transform.position = Utils.NumToPosition(offsetPos, new Vector2(otherParam.X, otherParam.Y), unitWidth, mapWidth, mapHeight); fix.X = otherParam.X * unitWidth - mapWidth * unitWidth * 0.5f + offsetPos.x; fix.Y = otherParam.Y * unitWidth - mapHeight * unitWidth * 0.5f + offsetPos.z; fix.Diameter = 1; var result = new DisplayOwner(fixItem, fix); // 添加至ClusterManager中 //ClusterManager.Single.Add(fix); DisplayerManager.Single.AddElement(vo.ObjID, result); return result; }
public void StartEdit(VOBase dataEntity, string BindingPropertyName) { dataEntity.StartDirtyDetect(); _EditingData = dataEntity; _DirtyDetectBindingPath = String.Format("{0}.{1}", BindingPropertyName, "IsDirty"); _IsEditingDataEnableValidation = true; }
public static DisplayOwner CreateUnit(int unitType, CreateActorParam otherParam) { VOBase vo = new VOBase(); switch (unitType) { case (int)ObjectID.ObjectType.MyJiDi: vo = new JiDiVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.MyJiDi); break; case (int)ObjectID.ObjectType.EnemyJiDi: vo = new JiDiVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.EnemyJiDi); break; case (int)ObjectID.ObjectType.MySoldier: vo = new FightVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.MySoldier); break; case (int)ObjectID.ObjectType.EnemySoldier: vo = new FightVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.EnemySoldier); break; case (int)ObjectID.ObjectType.MyTower: vo = new TurretVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.MyTower); break; case (int)ObjectID.ObjectType.EnemyTower: vo = new TurretVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.EnemyTower); break; case (int)ObjectID.ObjectType.MyTank: vo = null; break; case (int)ObjectID.ObjectType.EnemyTank: vo = null; break; case (int)ObjectID.ObjectType.MyObstacle: vo = null; break; case (int)ObjectID.ObjectType.EnemyObstacle: vo = null; break; case (int)ObjectID.ObjectType.NPCObstacle: vo = new VOBase(); vo.ObjID = new ObjectID(ObjectID.ObjectType.NPCObstacle); break; } return(DataManager.Single.Create(vo, otherParam)); }
private void GetValueStr(StringBuilder sb, VOBase entity) { if (!entity.IsHeadPart) { sb.Append("1".PadLeft(NUMLEN)); } this.GetValueStrX(sb, entity); }
/// <summary> /// 将技能中的属性(如果有)附加到单位属性上 /// </summary> /// <param name="skillInfo">技能信息</param> /// <param name="memberData">单位属性</param> public void AttachSkillAttribute(SkillInfo skillInfo, VOBase memberData) { if (skillInfo == null || memberData == null) { return; } SkillBase.AdditionAttribute(memberData, skillInfo); }
static int DeleteUnit(IntPtr L) { try { ToLua.CheckArgsCount(L, 1); VOBase arg0 = (VOBase)ToLua.CheckObject(L, 1, typeof(VOBase)); FightUnitFactory.DeleteUnit(arg0); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int AdditionAttribute(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); VOBase arg0 = (VOBase)ToLua.CheckObject(L, 1, typeof(VOBase)); SkillBase arg1 = (SkillBase)ToLua.CheckObject(L, 2, typeof(SkillBase)); SkillBase.AdditionAttribute(arg0, arg1); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int SetDataValue(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); ClusterData obj = (ClusterData)ToLua.CheckObject(L, 1, typeof(ClusterData)); VOBase arg0 = (VOBase)ToLua.CheckObject(L, 2, typeof(VOBase)); obj.SetDataValue(arg0); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/// <summary> /// 把实体打包成Tcp字符串 /// /// </summary> /// <param name="sb">需要拼接的输入参数</param> /// <param name="entity">实体</param> /// <param name="fillEmptyStr">当值为空时填充的字符</param> private void GetValueStrX(StringBuilder sb, VOBase entity, string fillEmptyStr) { VOFieldInfo[] fields = entity.VOFieldInfos; foreach (var field in fields) { if (Type.GetTypeCode(field.DataType) == TypeCode.Decimal) { if (field.Value == null) { sb.Append("0".PadRight(field.MaxLength)); } else { sb.Append(field.ValueText.PadRight(field.MaxLength)); } } else if (field.DataType == typeof(Decimal[])) //特殊处理,将来应该避免 { if (field.Value == null) { for (int i = 0; i < field.MaxLength / 8; i++) { sb.Append("0".PadRight(8)); } } else { foreach (var element in (decimal[])field.Value) { sb.Append(element.ToString().PadRight(8)); } } } else if (Type.GetTypeCode(field.DataType) == TypeCode.String) { if (string.IsNullOrWhiteSpace(field.ValueText)) { sb.Append(fillEmptyStr.PadRight(field.MaxLength)); } else { //sb.Append(field.ValueText.PadRight(field.MaxLength)); 对特殊编码字符不能直接操作 int byteCount = GlobalHelper.DataEncoding.GetByteCount(field.ValueText); sb.Append(field.ValueText.PadRight(field.MaxLength - (byteCount - field.ValueText.Length))); } } } }
static int AttachSkillAttribute(IntPtr L) { try { ToLua.CheckArgsCount(L, 3); SkillManager obj = (SkillManager)ToLua.CheckObject(L, 1, typeof(SkillManager)); SkillInfo arg0 = (SkillInfo)ToLua.CheckObject(L, 2, typeof(SkillInfo)); VOBase arg1 = (VOBase)ToLua.CheckObject(L, 3, typeof(VOBase)); obj.AttachSkillAttribute(arg0, arg1); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int get_MemberData(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); AllData obj = (AllData)o; VOBase ret = obj.MemberData; ToLua.PushObject(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index MemberData on a nil value" : e.Message)); } }
static int set_MemberData(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); AllData obj = (AllData)o; VOBase arg0 = (VOBase)ToLua.CheckObject(L, 2, typeof(VOBase)); obj.MemberData = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index MemberData on a nil value" : e.Message)); } }
static int get_ChangedData(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); SkillBase obj = (SkillBase)o; VOBase ret = obj.ChangedData; ToLua.PushObject(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index ChangedData on a nil value" : e.Message)); } }
static int AdditionField(IntPtr L) { try { ToLua.CheckArgsCount(L, 5); System.Reflection.FieldInfo arg0 = (System.Reflection.FieldInfo)ToLua.CheckObject(L, 1, typeof(System.Reflection.FieldInfo)); VOBase arg1 = (VOBase)ToLua.CheckObject(L, 2, typeof(VOBase)); VOBase arg2 = (VOBase)ToLua.CheckObject(L, 3, typeof(VOBase)); VOBase arg3 = (VOBase)ToLua.CheckObject(L, 4, typeof(VOBase)); System.Collections.Generic.IDictionary <string, ChangeDataType> arg4 = (System.Collections.Generic.IDictionary <string, ChangeDataType>)ToLua.CheckObject(L, 5, typeof(System.Collections.Generic.IDictionary <string, ChangeDataType>)); SkillBase.AdditionField(arg0, arg1, arg2, arg3, arg4); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/// <summary> /// 解包成实体 /// /// </summary> /// <param name="textReader">xml读取器</param> /// <param name="entityInfo">实体信息</param> private void PackToVO(XmlTextReader textReader, VOBase entity) { while (textReader.MoveToNextAttribute()) { var field = entity.GetFieldInfo(textReader.LocalName); var s = ConvertXMLSpecialStr(textReader.Value); switch (Type.GetTypeCode(field.DataType)) { case TypeCode.Decimal: field.Value = Decimal.Parse(s); continue; case TypeCode.String: field.Value = "`".Equals(s) ? string.Empty : s; continue; } } }
private void GetJsonContent(JObject jobj, VOBase entity) { foreach (var field in entity.VOFieldInfos) { if (field.DataType == typeof(Decimal[])) { var valueArray = (Decimal[])field.Value; for (int i = 0; i < field.MaxLength / 8; i++) //特殊处理,将来应该避免 { jobj.Add(String.Format("{0}[{1}]", field.Name, i), ((int)valueArray[i]).ToString()); } } else { jobj.Add(field.Name, ConvertToJsonSpecialStr(field.ValueText)); } } }
/// <summary> /// 创建单位, 如果对象池内有引用直接使用 /// </summary> /// <param name="voBase"></param> /// <returns></returns> public GameObject CreateAvatar(VOBase voBase) { GameObject result = null; if (displayPool.ContainsKey(voBase.Name) && displayPool[voBase.Name].Count > 0) { result = displayPool[voBase.Name].Pop(); // 清空父级引用 result.transform.parent = null; result.SetActive(true); } else { result = GameObjectExtension.InstantiateModelFromPacket(voBase.ModelPack, voBase.ModelName, null);//DP_FightPrefabManage.InstantiateAvatar(voBase); } if (result != null) { // 加载材质 var meshList = result.GetComponentsInChildren <SkinnedMeshRenderer>(); Texture texture = null; // 区分阵营加载不同皮肤 switch (voBase.Camp) { case Utils.MyCamp: // 我方阵营 // 更换皮肤 texture = PacketManage.Single.GetPacket(voBase.ModelPack).Load(voBase.ModelTexture + Utils.MyCampTextureNameTrail) as Texture; break; case Utils.EnemyCamp: // 敌方阵营 // 更换皮肤 texture = PacketManage.Single.GetPacket(voBase.ModelPack).Load(voBase.ModelTexture + Utils.EnemyCampTextureNameTrail) as Texture; break; } foreach (var mesh in meshList) { mesh.material.mainTexture = texture; } } return(result); }
private void PackToVO(JsonTextReader reader, VOBase entity) { while (reader.Read() && reader.TokenType == JsonToken.PropertyName) { var field = entity.GetFieldInfo(reader.Value.ToString()); reader.Read(); var s = ConvertJsonSpecialStr(reader.Value.ToString()); switch (Type.GetTypeCode(field.DataType)) { case TypeCode.Decimal: field.Value = Decimal.Parse(s); break; case TypeCode.String: field.Value = s; //"`".Equals(s) ? string.Empty : s break; } } reader.Read(); }
/// <summary> /// 附加时的增加属性 /// </summary> public static void AdditionAttribute(VOBase memberData, SkillBase skill) { if (memberData == null || skill == null || skill.ChangeData == null || skill.ChangeDataTypeDic == null) { return; } skill.ChangedData = new VOBase(); // 获取可被变更的数据列表 var propertyList = typeof(VOBase).GetProperties().Where((property) => { if (property.GetCustomAttributes(typeof(SkillAddition), false).Any()) { return(true); } return(false); }); foreach (var property in propertyList) { AdditionProperty(property, memberData, skill.ChangeData, skill.ChangedData, skill.ChangeDataTypeDic); } var fieldList = typeof(VOBase).GetFields().Where((property) => { if (property.GetCustomAttributes(typeof(SkillAddition), false).Any()) { return(true); } return(false); }); foreach (var field in fieldList) { AdditionField(field, memberData, skill.ChangeData, skill.ChangedData, skill.ChangeDataTypeDic); } }
/// <summary> /// 加属性值 /// </summary> /// <param name="property"></param> /// <param name="memberData"></param> public static void AdditionProperty(PropertyInfo property, VOBase memberData, VOBase changeData, VOBase changedData, IDictionary <string, ChangeDataType> changeDataTypeDic) { var propertyName = property.Name; ChangeDataType changeDataType = ChangeDataType.Absolute; // 读取赋值类型, 如果没有则默认使用绝对值 if (changeDataTypeDic.ContainsKey(propertyName)) { changeDataType = changeDataTypeDic[propertyName]; } // 修改float类型属性 if (property.PropertyType == typeof(float)) { var sourceValue = Convert.ToSingle(property.GetValue(memberData, null)); var plusValue = Convert.ToSingle(property.GetValue(changeData, null)) * (changeDataType == ChangeDataType.Absolute ? 1 : sourceValue); property.SetValue(memberData, sourceValue + plusValue, null); // 保存变更数据 property.SetValue(changedData, plusValue, null); } // 修改bool类型属性 else if (property.PropertyType == typeof(bool)) { property.SetValue(memberData, Convert.ToBoolean(property.GetValue(changeData, null)), null); // 保存变更数据 property.SetValue(changedData, property.GetValue(memberData, null), null); } // 修改int,short,long类型属性 else if (property.PropertyType == typeof(long) || property.PropertyType == typeof(short) || property.PropertyType == typeof(int)) { var sourceValue = Convert.ToInt64(property.GetValue(memberData, null)); var plusValue = Convert.ToInt64(property.GetValue(changeData, null)) * (changeDataType == ChangeDataType.Absolute ? 1 : sourceValue); property.SetValue(memberData, Convert.ChangeType((sourceValue + plusValue), property.PropertyType), null); // 保存变更数据 property.SetValue(changedData, Convert.ChangeType(plusValue, property.PropertyType), null); } }
/// <summary> /// 加字段值 /// </summary> /// <param name="field"></param> /// <param name="memberData"></param> /// <param name="skill"></param> public static void AdditionField(FieldInfo field, VOBase memberData, VOBase changeData, VOBase changedData, IDictionary <string, ChangeDataType> changeDataTypeDic) { var propertyName = field.Name; ChangeDataType changeDataType = ChangeDataType.Absolute; // 读取赋值类型, 如果没有则默认使用绝对值 if (changeDataTypeDic.ContainsKey(propertyName)) { changeDataType = changeDataTypeDic[propertyName]; } // 修改float类型属性 if (field.FieldType == typeof(float)) { var sourceValue = Convert.ToSingle(field.GetValue(memberData)); var plusValue = Convert.ToSingle(field.GetValue(changeData)) * (changeDataType == ChangeDataType.Absolute ? 1 : sourceValue); field.SetValue(memberData, sourceValue + plusValue); // 保存变更数据 field.SetValue(changedData, plusValue); } // 修改bool类型属性 else if (field.FieldType == typeof(bool)) { field.SetValue(memberData, Convert.ToBoolean(field.GetValue(changeData))); // 保存变更数据 field.SetValue(changedData, field.GetValue(memberData)); } // 修改int,short,long类型属性 else if (field.FieldType == typeof(long) || field.FieldType == typeof(short) || field.FieldType == typeof(int)) { var sourceValue = Convert.ToInt64(field.GetValue(memberData)); var plusValue = Convert.ToInt64(field.GetValue(changeData)) * (changeDataType == ChangeDataType.Absolute ? 1 : sourceValue); field.SetValue(memberData, Convert.ChangeType((sourceValue + plusValue), field.FieldType)); // 保存变更数据 field.SetValue(changedData, Convert.ChangeType(plusValue, field.FieldType)); } }
/// <summary> /// 检查是否符合技能的伤害附加/减免条件 /// </summary> /// <param name="skill">被检测技能</param> /// <param name="data">被检测单位</param> /// <returns>是否符合</returns> private static bool Check(SkillBase skill, VOBase data) { var result = false; // 计算伤害附加 switch (skill.DemageChangeTargetType) { case DemageAdditionOrReductionTargetType.All: result = true; break; case DemageAdditionOrReductionTargetType.Air: if (data.GeneralType == Utils.GeneralTypeAir) { result = true; } break; case DemageAdditionOrReductionTargetType.Surface: if (data.GeneralType == Utils.GeneralTypeSurface) { result = true; } break; case DemageAdditionOrReductionTargetType.Building: if (data.GeneralType == Utils.GeneralTypeBuilding) { result = true; } break; case DemageAdditionOrReductionTargetType.Hide: if (data.IsHide) { result = true; } break; case DemageAdditionOrReductionTargetType.RaceHuman: if (data.ArmyType == Utils.HumanArmyType) { result = true; } break; case DemageAdditionOrReductionTargetType.RaceOrc: if (data.ArmyType == Utils.OrcArmyType) { result = true; } break; case DemageAdditionOrReductionTargetType.RaceMechanics: if (data.ArmyType == Utils.MechanicArmyType) { result = true; } break; case DemageAdditionOrReductionTargetType.Mechanics: if (data.IsMechanic) { result = true; } break; case DemageAdditionOrReductionTargetType.Melee: if (data.IsMelee) { result = true; } break; case DemageAdditionOrReductionTargetType.NotMechanics: if (!data.IsMechanic) { result = true; } break; case DemageAdditionOrReductionTargetType.NotMelee: if (!data.IsMelee) { result = true; } break; case DemageAdditionOrReductionTargetType.Summoned: if (data.IsSummon) { result = true; } break; } return(result); }
/// <summary> /// 创建测试单元 /// </summary> /// <param name="count">创建单元个数</param> private void CreateAllMember(int count) { var random = new System.Random(); // 测试 四叉树遇上超大目标 for (var i = 0; i < count; i++) { // TODO 创建数据 var memberData = new VOBase { SpaceSet = 10, MoveSpeed = 10, AttackRange = 20 }; var gameObj = GameObject.CreatePrimitive(PrimitiveType.Cube); var member = gameObj.AddComponent <ClusterData>(); var x = random.Next(0, MapWidth); var y = random.Next(0, MapHeight); memberData.SpaceSet = i % 5 + 1; memberData.CurrentHP = i % 5 + 1; memberData.AttackRange = 100; memberData.TotalHp = 10; memberData.GeneralType = (short)random.Next(1, 4); //member.IsSurface = random.Next(1) > 0; //member.IsAir = !member.IsSurface; //member.IsBuild = random.Next(1) > 0; memberData.ArmyType = (short)random.Next(1, 4); memberData.IsHide = random.Next(1) > 0; member.AllData.MemberData = memberData; // new VOBase() //{ // AttackRange = 20, // SpaceSet = 3, // ObjID = new ObjectID(ObjectID.ObjectType.MySoldier), // MoveSpeed = 60 //}; // TODO 物理信息中一部分来自于数据 member.MaxSpeed = 10; member.RotateSpeed = 10; member.transform.localPosition = new Vector3((i % 3) * 2 + x, 0, i / 3 * 2 + y); member.name = "item" + i; member.Diameter = (i) % 5 + 1; //member.Name = "member" + i; member.X = x; member.Y = y; //member.IsTaunt = random.Next(1) > 0; // 随机给方向 member.Direction = new Vector3(random.Next(1, 100), 0, random.Next(1, 100)); var fightData = member.AllData.SelectWeightData; fightData = new SelectWeightData(); // 选择目标数据 fightData.AirWeight = -1; fightData.BuildWeight = 100; fightData.SurfaceWeight = 100; fightData.HumanWeight = 10; fightData.OrcWeight = 10; fightData.OmnicWeight = 10; //member.TankWeight = 10; //member.LVWeight = 10; //member.CannonWeight = 10; //member.AirCraftWeight = 10; //member.SoldierWeight = 10; fightData.HideWeight = -1; fightData.TauntWeight = 1000; fightData.HealthMaxWeight = 0; fightData.HealthMinWeight = 10; //member.AngleWeight = 10; fightData.DistanceMaxWeight = 0; fightData.DistanceMinWeight = 10; member.AllData.MemberData.Accuracy = 0.9f; member.AllData.MemberData.SpreadRange = 10; //memberData.MultiAimMax = 10; MemberList.Add(member); if (i == 0) { _leader = member; } } }
public void StartEdit(VOBase dataEntity,string BindingPropertyName) { dataEntity.StartDirtyDetect(); _EditingData = dataEntity; _DirtyDetectBindingPath = String.Format("{0}.{1}", BindingPropertyName, "IsDirty"); _IsEditingDataEnableValidation = true; }
// ---------------------------设置属性----------------------------- /// <summary> /// 外部注入VO /// </summary> public void SetDataValue(VOBase data) { AllData.MemberData = data; }
/// <summary> /// 减去增加的属性 /// </summary> public static void SubAttribute(VOBase memberData, VOBase changedData) { if (memberData == null || changedData == null) { return; } // 获取可被变更的数据列表 var propertyList = typeof(VOBase).GetProperties().Where((property) => { if (property.GetCustomAttributes(typeof(SkillAddition), false).Any()) { return(true); } return(false); }); foreach (var property in propertyList) { // 修改float类型属性 if (property.PropertyType == typeof(float)) { var sourceValue = Convert.ToSingle(property.GetValue(memberData, null)); var subValue = Convert.ToSingle(property.GetValue(changedData, null)); property.SetValue(memberData, sourceValue - subValue, null); } // 修改bool类型属性 else if (property.PropertyType == typeof(bool)) { property.SetValue(memberData, Convert.ToBoolean(property.GetValue(changedData, null)), null); } // 修改int,short,long类型属性 else if (property.PropertyType == typeof(long) || property.PropertyType == typeof(short) || property.PropertyType == typeof(int)) { var sourceValue = Convert.ToInt64(property.GetValue(memberData, null)); var plusValue = Convert.ToInt64(property.GetValue(changedData, null)); property.SetValue(memberData, Convert.ChangeType((sourceValue - plusValue), property.PropertyType), null); } } var fieldList = typeof(VOBase).GetFields().Where((property) => { if (property.GetCustomAttributes(typeof(SkillAddition), false).Any()) { return(true); } return(false); }); foreach (var field in fieldList) { // 修改float类型属性 if (field.FieldType == typeof(float)) { var sourceValue = Convert.ToSingle(field.GetValue(memberData)); var subValue = Convert.ToSingle(field.GetValue(changedData)); field.SetValue(memberData, sourceValue - subValue); } // 修改bool类型属性 else if (field.FieldType == typeof(bool)) { field.SetValue(memberData, Convert.ToBoolean(field.GetValue(changedData))); } // 修改int,short,long类型属性 else if (field.FieldType == typeof(long) || field.FieldType == typeof(short) || field.FieldType == typeof(int)) { var sourceValue = Convert.ToInt64(field.GetValue(memberData)); var plusValue = Convert.ToInt64(field.GetValue(changedData)); field.SetValue(memberData, Convert.ChangeType((sourceValue - plusValue), field.FieldType)); } } }
/// <summary> /// 把实体打包成Tcp字符串 /// /// </summary> /// <param name="sb">需要拼接的输入参数</param><param name="entity">实体</param> private void GetValueStrX(StringBuilder sb, VOBase entity) { this.GetValueStrX(sb, entity, "`"); }
/// <summary> /// 生成行为 /// </summary> /// <param name="paramsPacker"></param> /// <returns>行为节点</returns> public override IFormula GetFormula(FormulaParamsPacker paramsPacker) { IFormula result = null; string errorMsg = null; if (paramsPacker == null) { errorMsg = "调用参数 paramsPacker 为空."; } else if (string.IsNullOrEmpty(PropertyName) || property == null) { errorMsg = "属性名称为空."; } else if (string.IsNullOrEmpty(Value)) { errorMsg = "属性值为空"; } if (!string.IsNullOrEmpty(errorMsg)) { throw new Exception(errorMsg); } // 替换数据 ReplaceData(paramsPacker); // 数据本地化 var myFormulaType = FormulaType; var myPropertyName = PropertyName; var myValue = Value; var myChangeDataType = ChangeDataType; var myProperty = property; var myField = field; var target = ReceivePos == 0 ? paramsPacker.ReleaseMember.ClusterData.AllData.MemberData : paramsPacker.ReceiverMenber.ClusterData.AllData.MemberData; result = new Formula((callback, scope) => { var changeData = new VOBase(); // 给目标增加属性 if (myProperty != null) { myProperty.SetValue(changeData, Convert.ChangeType(myValue, myProperty.PropertyType), null); } else if (myField != null) { myField.SetValue(changeData, Convert.ChangeType(myValue, myField.FieldType)); } ChangeDataType tmpType = ChangeDataType.Absolute; if (paramsPacker.Skill.ChangeDataTypeDic.ContainsKey(myPropertyName)) { tmpType = paramsPacker.Skill.ChangeDataTypeDic[myPropertyName]; paramsPacker.Skill.ChangeDataTypeDic[myPropertyName] = myChangeDataType; } else { paramsPacker.Skill.ChangeDataTypeDic.Add(myPropertyName, myChangeDataType); } SkillBase.AdditionField(myField, target, changeData, paramsPacker.Skill.ChangedData, paramsPacker.Skill.ChangeDataTypeDic); paramsPacker.Skill.ChangeDataTypeDic[myPropertyName] = tmpType; }, myFormulaType); return(result); }
public DisplayOwner Create(VOBase value, CreateActorParam otherParam) { DisplayOwner result = null; switch (value.ObjID.ObjType) { case ObjectID.ObjectType.MyJiDi: var myJidi = value as JiDiVO; myJidi.Camp = Utils.MyCamp; result = CreateBase(myJidi, otherParam); break; case ObjectID.ObjectType.EnemyJiDi: var enemyjidi = value as JiDiVO; enemyjidi.Camp = Utils.EnemyCamp; result = CreateBase(enemyjidi, otherParam); break; case ObjectID.ObjectType.MySoldier: var mysoldier = value as FightVO; // 设置阵营 mysoldier.Camp = Utils.MyCamp; result = CreateSoldier(mysoldier, otherParam); break; case ObjectID.ObjectType.EnemySoldier: var enemysoldier = value as FightVO; // 设置阵营 enemysoldier.Camp = Utils.EnemyCamp; result = CreateSoldier(enemysoldier, otherParam); break; case ObjectID.ObjectType.MyTower: // 我方防御塔 var myTurret = value as TurretVO; // 设置阵营 myTurret.Camp = Utils.MyCamp; result = CreateTurret(myTurret, otherParam); break; case ObjectID.ObjectType.EnemyTower: // 敌方防御塔 var enemyTurret = value as TurretVO; // 设置阵营 enemyTurret.Camp = Utils.EnemyCamp; result = CreateTurret(enemyTurret, otherParam); break; case ObjectID.ObjectType.MyTank: var mytank = value as TankVO; CreateMyTank(mytank); break; case ObjectID.ObjectType.EnemyTank: var enemyTank = value as TankVO; CreateEnemyTank(enemyTank); break; case ObjectID.ObjectType.MyObstacle: var myobstacle = value as ObstacleVO; CreateMyObstacle(myobstacle); break; case ObjectID.ObjectType.EnemyObstacle: var enemyobstacle = value as ObstacleVO; CreateEnemyObstacle(enemyobstacle); break; case ObjectID.ObjectType.NPCObstacle: result = CreateNPCObstacle(value, otherParam); break; } return result; }
/// <summary> /// 删除单位 /// </summary> /// <param name="obj">被删除单位数据</param> public static void DeleteUnit(VOBase obj) { DataManager.Single.Delete(obj.ObjID); DisplayerManager.Single.DelDisplay(obj.ObjID); }