Пример #1
0
        /// <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("/>");
        }
Пример #2
0
    /// <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;
    }
Пример #3
0
 public void StartEdit(VOBase dataEntity, string BindingPropertyName)
 {
     dataEntity.StartDirtyDetect();
     _EditingData                   = dataEntity;
     _DirtyDetectBindingPath        = String.Format("{0}.{1}", BindingPropertyName, "IsDirty");
     _IsEditingDataEnableValidation = true;
 }
Пример #4
0
    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));
    }
Пример #5
0
 private void GetValueStr(StringBuilder sb, VOBase entity)
 {
     if (!entity.IsHeadPart)
     {
         sb.Append("1".PadLeft(NUMLEN));
     }
     this.GetValueStrX(sb, entity);
 }
Пример #6
0
 /// <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);
 }
Пример #7
0
 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));
     }
 }
Пример #8
0
 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));
     }
 }
Пример #9
0
 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));
     }
 }
Пример #10
0
 /// <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)));
             }
         }
     }
 }
Пример #11
0
 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));
     }
 }
Пример #12
0
    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));
        }
    }
Пример #13
0
    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));
        }
    }
Пример #14
0
    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));
        }
    }
Пример #15
0
 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));
     }
 }
Пример #16
0
        /// <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;
                }
            }
        }
Пример #17
0
 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));
         }
     }
 }
Пример #18
0
    /// <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);
    }
Пример #19
0
        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();
        }
Пример #20
0
    /// <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);
        }
    }
Пример #21
0
    /// <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);
        }
    }
Пример #22
0
    /// <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));
        }
    }
Пример #23
0
    /// <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);
    }
Пример #24
0
    /// <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;
            }
        }
    }
Пример #25
0
 public void StartEdit(VOBase dataEntity,string BindingPropertyName)
 {
     dataEntity.StartDirtyDetect();
     _EditingData = dataEntity;
     _DirtyDetectBindingPath = String.Format("{0}.{1}", BindingPropertyName, "IsDirty");
     _IsEditingDataEnableValidation = true;
 }
Пример #26
0
 // ---------------------------设置属性-----------------------------
 /// <summary>
 /// 外部注入VO
 /// </summary>
 public void SetDataValue(VOBase data)
 {
     AllData.MemberData = data;
 }
Пример #27
0
    /// <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));
            }
        }
    }
Пример #28
0
 /// <summary>
 /// 把实体打包成Tcp字符串
 ///
 /// </summary>
 /// <param name="sb">需要拼接的输入参数</param><param name="entity">实体</param>
 private void GetValueStrX(StringBuilder sb, VOBase entity)
 {
     this.GetValueStrX(sb, entity, "`");
 }
Пример #29
0
    /// <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);
    }
Пример #30
0
    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;
    }
Пример #31
0
 /// <summary>
 /// 删除单位
 /// </summary>
 /// <param name="obj">被删除单位数据</param>
 public static void DeleteUnit(VOBase obj)
 {
     DataManager.Single.Delete(obj.ObjID);
     DisplayerManager.Single.DelDisplay(obj.ObjID);
 }