Ejemplo n.º 1
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));
    }
Ejemplo n.º 2
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;
    }