コード例 #1
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;
    }
コード例 #2
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));
    }
コード例 #3
0
 static int CreateUnit(IntPtr L)
 {
     try
     {
         ToLua.CheckArgsCount(L, 2);
         int arg0 = (int)LuaDLL.luaL_checknumber(L, 1);
         CreateActorParam arg1 = (CreateActorParam)ToLua.CheckObject(L, 2, typeof(CreateActorParam));
         DisplayOwner     o    = FightUnitFactory.CreateUnit(arg0, arg1);
         ToLua.PushObject(L, o);
         return(1);
     }
     catch (Exception e)
     {
         return(LuaDLL.toluaL_exception(L, e));
     }
 }
コード例 #4
0
    static int get_ColorMat(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            CreateActorParam obj = (CreateActorParam)o;
            bool             ret = obj.ColorMat;
            LuaDLL.lua_pushboolean(L, ret);
            return(1);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index ColorMat on a nil value" : e.Message));
        }
    }
コード例 #5
0
    static int get_CmType(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            CreateActorParam obj = (CreateActorParam)o;
            int ret = obj.CmType;
            LuaDLL.lua_pushinteger(L, ret);
            return(1);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index CmType on a nil value" : e.Message));
        }
    }
コード例 #6
0
    static int set_Y(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            CreateActorParam obj  = (CreateActorParam)o;
            float            arg0 = (float)LuaDLL.luaL_checknumber(L, 2);
            obj.Y = arg0;
            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index Y on a nil value" : e.Message));
        }
    }
コード例 #7
0
    static int set_IsHero(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            CreateActorParam obj  = (CreateActorParam)o;
            bool             arg0 = LuaDLL.luaL_checkboolean(L, 2);
            obj.IsHero = arg0;
            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index IsHero on a nil value" : e.Message));
        }
    }
コード例 #8
0
    static int set_TexturePackName(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            CreateActorParam obj  = (CreateActorParam)o;
            string           arg0 = ToLua.CheckString(L, 2);
            obj.TexturePackName = arg0;
            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TexturePackName on a nil value" : e.Message));
        }
    }
コード例 #9
0
    static int get_TexturePackName(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            CreateActorParam obj = (CreateActorParam)o;
            string           ret = obj.TexturePackName;
            LuaDLL.lua_pushstring(L, ret);
            return(1);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TexturePackName on a nil value" : e.Message));
        }
    }
コード例 #10
0
    static int _CreateCreateActorParam(IntPtr L)
    {
        try
        {
            int count = LuaDLL.lua_gettop(L);

            if (count == 1)
            {
                int arg0             = (int)LuaDLL.luaL_checknumber(L, 1);
                CreateActorParam obj = new CreateActorParam(arg0);
                ToLua.PushObject(L, obj);
                return(1);
            }
            else if (count == 2 && TypeChecker.CheckTypes(L, 1, typeof(float), typeof(float)))
            {
                float            arg0 = (float)LuaDLL.luaL_checknumber(L, 1);
                float            arg1 = (float)LuaDLL.luaL_checknumber(L, 2);
                CreateActorParam obj  = new CreateActorParam(arg0, arg1);
                ToLua.PushObject(L, obj);
                return(1);
            }
            else if (count == 3 && TypeChecker.CheckTypes(L, 1, typeof(float), typeof(float), typeof(int)))
            {
                float            arg0 = (float)LuaDLL.luaL_checknumber(L, 1);
                float            arg1 = (float)LuaDLL.luaL_checknumber(L, 2);
                int              arg2 = (int)LuaDLL.luaL_checknumber(L, 3);
                CreateActorParam obj  = new CreateActorParam(arg0, arg1, arg2);
                ToLua.PushObject(L, obj);
                return(1);
            }
            else
            {
                return(LuaDLL.luaL_throw(L, "invalid arguments to ctor method: CreateActorParam.New"));
            }
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e));
        }
    }
コード例 #11
0
    /// <summary>
    /// 解析建筑地图
    /// </summary>
    /// <param name="mapData">地图数据</param>
    /// <param name="packer">数据包装</param>
    public void AnalysisMap(int[][] mapData, MapDataParamsPacker packer = null)
    {
        // 获取基地位置
        for (var row = 0; row < mapData.Length; row++)
        {
            var line = mapData[row];
            for (var col = 0; col < line.Length; col++)
            {
                var cell = line[col];
                switch (cell)
                {
                case Utils.Accessibility:
                    // 无障碍
                    break;

                case Utils.Obstacle:
                {
                    // 障碍物
                    var paramObj = new CreateActorParam(col, row);
                    FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.NPCObstacle, paramObj).ClusterData.Begin();
                }
                break;

                case Utils.MyBaseId:
                {
                    // 我方基地
                    var pos = Utils.NumToPosition(LoadMap.Single.transform.position, new Vector2(col, row),
                                                  ClusterManager.Single.UnitWidth, ClusterManager.Single.MapWidth,
                                                  ClusterManager.Single.MapHeight);
                    var paramObj = new CreateActorParam(pos.x, pos.z, packer.BaseLevel);
                    FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.MyJiDi, paramObj).ClusterData.Begin();
                }
                break;

                case Utils.MyTurretId:
                {
                    // 我方防御塔
                    var pos = Utils.NumToPosition(LoadMap.Single.transform.position, new Vector2(col, row),
                                                  ClusterManager.Single.UnitWidth, ClusterManager.Single.MapWidth,
                                                  ClusterManager.Single.MapHeight);
                    var paramObj = new CreateActorParam(pos.x, pos.z, packer.TurretLevel);
                    FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.MyTower, paramObj).ClusterData.Begin();
                }
                break;

                case Utils.EnemyBaseId:
                {
                    // 敌方基地
                    var pos = Utils.NumToPosition(LoadMap.Single.transform.position, new Vector2(col, row),
                                                  ClusterManager.Single.UnitWidth, ClusterManager.Single.MapWidth,
                                                  ClusterManager.Single.MapHeight);
                    var paramObj = new CreateActorParam(pos.x, pos.z, packer.EnemyBaseLevel);
                    FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.EnemyJiDi, paramObj).ClusterData.Begin();
                }
                break;

                case Utils.EnemyTurretId:
                {
                    // 敌方防御塔
                    var pos = Utils.NumToPosition(LoadMap.Single.transform.position, new Vector2(col, row),
                                                  ClusterManager.Single.UnitWidth, ClusterManager.Single.MapWidth,
                                                  ClusterManager.Single.MapHeight);
                    var paramObj = new CreateActorParam(pos.x, pos.z, packer.TurretLevel);
                    var turret   = FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.EnemyTower, paramObj);
                    turret.ClusterData.Begin();
                }
                break;
                }
            }
        }
    }
コード例 #12
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;
    }
コード例 #13
0
    /// <summary>
    /// 创建单位
    /// </summary>
    /// <param name="soldier">单位数据</param>
    /// <param name="param">数据参数</param>
    /// <returns></returns>
    private DisplayOwner CreateSoldier(FightVO soldier, CreateActorParam param)
    {
        if (soldier.ObjID.ObjType == ObjectID.ObjectType.MySoldier)
        {
            _mySoldiersDict.Add(soldier.ObjID.ID, soldier);
        }
        if (soldier.ObjID.ObjType == ObjectID.ObjectType.EnemySoldier)
        {
            _enemySoldiersDict.Add(soldier.ObjID.ID, soldier);
        }
        // 设置数据
        var soldierId = param.SoldierID;
        var config = SData_armybase_c.Single.GetDataOfID(soldierId);
        soldier.SetSoldierData(config);

        //var display = DP_FightPrefabManage.InstantiateAvatar(param);
        //通过对象池创建角色
        var display = DisplayerManager.Single.CreateAvatar(soldier);
        display.transform.position = new Vector3(param.X, 0, param.Y);
        // 设置父级
        ParentManager.Instance().SetParent(display, ParentManager.ClusterParent);

        // 创建渲染器
//        var mfa = display.GetComponent<MFAModelRender>();
//        mfa.ObjId = soldier.ObjID;

        // 创建集群数据
        var cluster = display.AddComponent<ClusterData>();
        cluster.SetDataValue(soldier);
//        mfa.Cluster = cluster;

        // 设置空地高度
        switch (soldier.GeneralType)
        {
            // 空中单位高度
            case Utils.GeneralTypeAir:
                cluster.Height = SData_Constant.Single.GetDataOfID(Utils.AirTypeConstantId).Value;
                cluster.CollisionGroup = Utils.AirCollisionGroup;
                break;
            // 地面单位高度
            case Utils.GeneralTypeBuilding:
            case Utils.GeneralTypeSurface:
                cluster.Height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value;
                cluster.CollisionGroup = Utils.SurfaceCollisionGroup;
                break;
        }
        //Debug.Log("类型: " + soldier.GeneralType + "高度: " + mfa.Cluster.Height);
        // 添加至ClusterManager中
        //cluster.Diameter *= ClusterManager.Single.UnitWidth;
        cluster.StopMove();
        // ClusterManager.Single.Add(mfa.Cluster);


        // 创建外层持有类
        var displayOwner = new DisplayOwner(display, cluster);
        DisplayerManager.Single.AddElement(soldier.ObjID, displayOwner);

        // 创建RanderControl
        var randerControl = display.AddComponent<RanderControl>();
        randerControl.PosObj = cluster;
        displayOwner.RanderControl = randerControl;

        // 挂载事件处理器
        var triggerRunner = display.AddComponent<TriggerRunner>();
        // 设置数据
        triggerRunner.Display = displayOwner;

        // 设置目标选择权重数据
        var aimData = SData_armyaim_c.Single.GetDataOfID(soldier.ArmyID);
        cluster.AllData.SelectWeightData = new SelectWeightData(aimData);

        if (soldier.AttackType == Utils.BulletTypeScope)
        {
            // 加载单位的AOE数据
            var aoeData = SData_armyaoe_c.Single.GetDataOfID(soldier.ArmyID);
            cluster.AllData.AOEData = new ArmyAOEData(aoeData);
        }
        // 加载单位Effect数据
        var effectData = SData_effect_c.Single.GetDataOfID(soldier.ArmyID);
        cluster.AllData.EffectData = new EffectData(effectData);

        // 加载单位
        var armyTypeData = SData_UnitFightData_c.Single.GetDataOfID(soldier.ArmyID);
        cluster.AllData.ArmyTypeData = new ArmyTypeData(armyTypeData);
        cluster.AllData.ArmyTypeData.Camp = (short) soldier.Camp;

        // 加载并设置技能
        displayOwner.ClusterData.AllData.SkillInfoList = SkillManager.Single.CreateSkillInfoList(new List<int>()
                {
                    soldier.Skill1,
                    soldier.Skill2,
                    soldier.Skill3,
                    soldier.Skill4,
                    soldier.Skill5,
                },
                displayOwner);
        // 创建单位是将技能属性(如果有)附加到单位上
        foreach (var skill in displayOwner.ClusterData.AllData.SkillInfoList)
        {
            SkillManager.Single.AttachSkillAttribute(skill, displayOwner.ClusterData.AllData.MemberData);
        }

        return displayOwner;
    }
コード例 #14
0
    /// <summary>
    /// 创建防御塔
    /// </summary>
    /// <param name="turretVo">防御塔数据</param>
    /// <param name="otherParam">其他参数</param>
    /// <returns></returns>
    private DisplayOwner CreateTurret(TurretVO turretVo, CreateActorParam otherParam)
    {
        if (turretVo == null || otherParam == null)
        {
            return null;
        }

        DisplayOwner result = null;

        // 加载数据
        var turretConfig = SData_armybase_c.Single.GetDataOfID(Utils.TurretBaseId + otherParam.Level);
        turretVo.SetSoldierData(turretConfig);

        //通过对象池创建角色
        var turretObj = DisplayerManager.Single.CreateAvatar(turretVo);
        turretObj.transform.position = new Vector3(otherParam.X, 0, otherParam.Y);

        // 设置父级
        ParentManager.Instance().SetParent(turretObj, ParentManager.BuildingParent);

        // 区分阵营加载不同皮肤
        switch (turretVo.Camp)
        {
            case Utils.MyCamp:
                // 我方阵营
                // 放入列表
                _myTurretDict.Add(turretVo.ObjID.ID, turretVo);
                // 旋转角度
                turretObj.transform.Rotate(new Vector3(0, 90, 0));
                break;
            case Utils.EnemyCamp:
                // 敌方阵营
                // 放入列表
                _enemyTurretDict.Add(turretVo.ObjID.ID, turretVo);
                // 旋转角度
                turretObj.transform.Rotate(new Vector3(0, -90, 0));
                break;
        }

        // 设置位置
        var height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value;
        turretObj.transform.position = new Vector3(otherParam.X, height, otherParam.Y);
        // 添加ClusterData
        // TODO 添加BuildingClusterData
        var cluster = turretObj.AddComponent<FixtureData>();
        // 设置在地面上
        cluster.Height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value;
        cluster.CollisionGroup = Utils.SurfaceCollisionGroup;
        cluster.AllData.MemberData = turretVo;
        cluster.X = otherParam.X;
        cluster.Y = otherParam.Y;
        cluster.StopMove();


        // 设置目标选择权重数据
        var aimData = SData_armyaim_c.Single.GetDataOfID(turretVo.ArmyID);
        cluster.AllData.SelectWeightData = new SelectWeightData(aimData);

        // 创建外层持有类
        result = new DisplayOwner(turretObj, cluster);
        DisplayerManager.Single.AddElement(turretVo.ObjID, result);

        // 加载单位Effect数据
        var effectData = SData_effect_c.Single.GetDataOfID(turretVo.ArmyID);
        cluster.AllData.EffectData = new EffectData(effectData);

        // 创建RanderControl
        var randerControl = turretObj.AddComponent<RanderControl>();
        randerControl.PosObj = cluster;
        result.RanderControl = randerControl;
        // 启动RanderControl
        randerControl.Begin();

        // 创建事件检查器
        var triggerRunner = turretObj.AddComponent<TriggerRunner>();
        triggerRunner.Display = result;
        
        return result;
    }
コード例 #15
0
    /// <summary>
    /// 创建基地
    /// </summary>
    /// <param name="jidiVo">基地数据</param>
    /// <param name="otherParam">其他参数</param>
    /// <returns></returns>
    private DisplayOwner CreateBase(JiDiVO jidiVo, CreateActorParam otherParam)
    {
        DisplayOwner result = null;
        if (jidiVo == null || otherParam == null)
        {
            return result;
        }
        // 根据等级获得对应数据
        var baseConfig = SData_armybase_c.Single.GetDataOfID(Utils.BaseBaseId + otherParam.Level);
        jidiVo.SetSoldierData(baseConfig);

        // 创建基地模型
        // 通过对象池创建角色
        var baseObj = DisplayerManager.Single.CreateAvatar(jidiVo);
        baseObj.transform.position = new Vector3(otherParam.X, 0, otherParam.Y);

        // 设置父级
        ParentManager.Instance().SetParent(baseObj, ParentManager.BuildingParent);
        switch (jidiVo.Camp)
        {
            case Utils.MyCamp:
                _myJidiDict.Add(jidiVo.ObjID.ID, jidiVo);
                // 旋转角度
                baseObj.transform.Rotate(new Vector3(0, 90, 0));
                break;
            case Utils.EnemyCamp:
                _enemyJidiDict.Add(jidiVo.ObjID.ID, jidiVo);
                // 旋转角度
                baseObj.transform.Rotate(new Vector3(0, -90, 0));
                break;
        }

        // 获取距离地面高度
        var height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value;
        baseObj.transform.position = new Vector3(otherParam.X, height, otherParam.Y);

        // TODO 添加BuildingClusterData
        var cluster = baseObj.AddComponent<FixtureData>();
        // 设置在地面上
        cluster.Height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value;
        cluster.CollisionGroup = Utils.SurfaceCollisionGroup;
        cluster.AllData.MemberData = jidiVo;
        cluster.X = otherParam.X;
        cluster.Y = otherParam.Y;
        cluster.StopMove();

        // 保存基地位置
        FightManager.Single.SetMemberPos(jidiVo.Camp, FightManager.MemberType.Base, new Vector3(cluster.X, cluster.Height, cluster.Y));

        // 创建外层持有类
        result = new DisplayOwner(baseObj, cluster);
        DisplayerManager.Single.AddElement(jidiVo.ObjID, result);

        // 创建RanderControl
        var randerControl = baseObj.AddComponent<RanderControl>();
        randerControl.PosObj = cluster;
        result.RanderControl = randerControl;
        randerControl.Begin();

        // 创建事件检查器
        var triggerRunner = baseObj.AddComponent<TriggerRunner>();
        triggerRunner.Display = result;

        return result;
    }