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