Exemple #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));
    }
Exemple #2
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;
    }