Example #1
0
    public void initEnterData(SceneEnterData data)
    {
        if (!enabled)
        {
            return;
        }

        ScenePreInfoData preInfo = _scene.getPreInfo();

        if (preInfo != null)
        {
            RoleShowData[] signedPlayers = _scene.getPreInfo().signedPlayers;

            if (signedPlayers != null)
            {
                foreach (RoleShowData v in signedPlayers)
                {
                    _signedPlayers.put(v.playerID, v);
                }
            }
        }

        BattleSceneData bData = data.battleData;

        onRefreshBattleStateByServer(bData.state, bData.timeTick);

        if (_scene.isDriveAll())
        {
            //客户端场景,直接进入pre状态
            switchState(BattleStateType.Pre);
        }
    }
    /// <summary>
    /// 读取字节流(完整版)
    /// </summary>
    protected override void toReadBytesFull(BytesReadStream stream)
    {
        base.toReadBytesFull(stream);

        stream.startReadObj();

        BaseData preInfoT = stream.readDataFullNotNull();

        if (preInfoT != null)
        {
            if (preInfoT is ScenePreInfoData)
            {
                this.preInfo = (ScenePreInfoData)preInfoT;
            }
            else
            {
                this.preInfo = new ScenePreInfoData();
                if (!(preInfoT.GetType().IsAssignableFrom(typeof(ScenePreInfoData))))
                {
                    stream.throwTypeReadError(typeof(ScenePreInfoData), preInfoT.GetType());
                }
                this.preInfo.shadowCopy(preInfoT);
            }
        }
        else
        {
            this.preInfo = null;
        }

        stream.endReadObj();
    }
Example #3
0
    /** 指定单位组 */
    public void loadNext(ScenePreInfoData infoData)
    {
        _partTwoComplete = false;

        if (infoData == null || infoData.signedPlayers == null)
        {
            onLoadTwoOver();
        }
        else
        {
//			IntSet loadList=new IntSet();
//
//			foreach(UnitInfoData v in infoData.signedPlayers)
//			{
//				makeUnitLoadList(loadList,v);
//			}
//
//			int index=_index;
//
//			LoadControl.loadSet(loadList,()=>
//			{
//				if(_index==index)
//				{
//					onLoadTwoOver();
//				}
//			});

            //TODO:资源预加载

            onLoadTwoOver();
        }
    }
Example #4
0
    /// <summary>
    /// 复制(潜拷贝)
    /// </summary>
    protected override void toShadowCopy(BaseData data)
    {
        if (!(data is ScenePreInfoData))
        {
            return;
        }

        ScenePreInfoData mData = (ScenePreInfoData)data;

        this.signedPlayers = mData.signedPlayers;
    }
Example #5
0
    /// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        ScenePreInfoData mData = (ScenePreInfoData)data;

        if (mData.signedPlayers != null)
        {
            if (this.signedPlayers == null)
            {
                return(false);
            }
            if (this.signedPlayers.Length != mData.signedPlayers.Length)
            {
                return(false);
            }
            RoleShowData[] signedPlayersT   = this.signedPlayers;
            RoleShowData[] signedPlayersR   = mData.signedPlayers;
            int            signedPlayersLen = signedPlayersT.Length;
            for (int signedPlayersI = 0; signedPlayersI < signedPlayersLen; ++signedPlayersI)
            {
                RoleShowData signedPlayersU = signedPlayersT[signedPlayersI];
                RoleShowData signedPlayersV = signedPlayersR[signedPlayersI];
                if (signedPlayersV != null)
                {
                    if (signedPlayersU == null)
                    {
                        return(false);
                    }
                    if (!signedPlayersU.dataEquals(signedPlayersV))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (signedPlayersU != null)
                    {
                        return(false);
                    }
                }
            }
        }
        else
        {
            if (this.signedPlayers != null)
            {
                return(false);
            }
        }

        return(true);
    }
Example #6
0
        public override void makePreInfo(ScenePreInfoData infoData)
        {
            if (!_g13)
            {
                _m13 = instance.Type.GetMethod("makePreInfo", 1);
                _g13 = true;
            }

            if (_m13 != null && !_b13)
            {
                _b13   = true;
                _p1[0] = infoData;
                appdomain.Invoke(_m13, instance, _p1);
                _p1[0] = null;
                _b13   = false;
            }
            else
            {
                base.makePreInfo(infoData);
            }
        }
Example #7
0
    /** 预进入场景第二阶段 */
    public void preEnterSceneNext(ScenePreInfoData info)
    {
        if (_createdNextScene)
        {
            _scene.setPreInfo(info);

            //不是无切换过程
            if (_isSwitchCross)
            {
                loadSceneResourceOver();
            }
            else
            {
                _scene.load.loadNext(info);
            }
        }
        else
        {
            _preInfo = info;
        }
    }
Example #8
0
    /// <summary>
    /// 复制(深拷贝)
    /// </summary>
    protected override void toCopy(BaseData data)
    {
        if (!(data is ScenePreInfoData))
        {
            return;
        }

        ScenePreInfoData mData = (ScenePreInfoData)data;

        if (mData.signedPlayers != null)
        {
            RoleShowData[] signedPlayersR   = mData.signedPlayers;
            int            signedPlayersLen = signedPlayersR.Length;
            if (this.signedPlayers == null || this.signedPlayers.Length != signedPlayersLen)
            {
                this.signedPlayers = new RoleShowData[signedPlayersLen];
            }
            RoleShowData[] signedPlayersT = this.signedPlayers;
            for (int signedPlayersI = 0; signedPlayersI < signedPlayersLen; ++signedPlayersI)
            {
                RoleShowData signedPlayersV = signedPlayersR[signedPlayersI];
                RoleShowData signedPlayersU;
                if (signedPlayersV != null)
                {
                    signedPlayersU = (RoleShowData)signedPlayersV.clone();
                }
                else
                {
                    signedPlayersU = null;
                }

                signedPlayersT[signedPlayersI] = signedPlayersU;
            }
        }
        else
        {
            this.signedPlayers = null;
        }
    }
Example #9
0
    public virtual void makeSceneEnterData(SceneEnterData data)
    {
        if (!enabled)
        {
            return;
        }

        BattleSceneData bData = GameC.factory.createBattleSceneData();

        bData.state     = _state;
        bData.timeTick  = _timeTick;
        data.battleData = bData;

        //units

        ScenePreInfoData preInfo = _scene.getPreInfo();

        if (preInfo != null)
        {
            //指定进入角色构造
            RoleShowData[] signedPlayers = preInfo.signedPlayers;

            if (signedPlayers != null)
            {
                foreach (RoleShowData v in signedPlayers)
                {
                    //不是自己(有其他角色就自行创建)
                    if (v.playerID != data.hero.identity.playerID)
                    {
                        UnitData unitData = _scene.inout.createCharacterDataForRobot(v.playerID);

                        data.units.add(unitData);
                    }
                }
            }
        }
    }
Example #10
0
    /** 预备进入场景(来自服务器推送) */
    public void preEnterScene(int sceneID, int lineID)
    {
        _preSceneID       = sceneID;
        _preLineID        = lineID;
        _createdNextScene = false;
        _preInfo          = null;
        _isSwitching      = true;
        _isSwitchCross    = false;

        SceneConfig nextConfig = SceneConfig.get(sceneID);

        _switchType = nextConfig.switchType;

        if (_scene != null)
        {
            //是否跳过加载资源
            if (isSkipLoadSource(nextConfig))
            {
                _isSwitchCross = true;
            }
        }

        removeNowScene();
    }
Example #11
0
 /** 预备信息 */
 public void setPreInfo(ScenePreInfoData preInfo)
 {
     _preInfo = preInfo;
 }
    /// <summary>
    /// 读取字节流(简版)
    /// </summary>
    protected override void toReadBytesSimple(BytesReadStream stream)
    {
        base.toReadBytesSimple(stream);

        this.preInfo = (ScenePreInfoData)stream.readDataSimpleNotNull();
    }
    /// <summary>
    /// 回池
    /// </summary>
    protected override void toRelease(DataPool pool)
    {
        base.toRelease(pool);

        this.preInfo = null;
    }
Example #14
0
 /** 构造预备进入数据(机器人) */
 public virtual void makePreInfo(ScenePreInfoData infoData)
 {
     infoData.signedPlayers = _signedUnits;
 }
Example #15
0
    protected void removeNowSceneOver()
    {
        onRemoveNowSceneOver();

        clearNowScene(!_isSwitchCross);

        //有下个场景
        if (_preSceneID > 0)
        {
            //创建场景
            //客户端场景不做池了

            SceneConfig config = SceneConfig.get(_preSceneID);

            _scene = GameC.factory.createScene();
            _scene.setType(config.type);
            _scene.construct();

            //初始化场景ID
            _scene.initSceneID(_preSceneID);

            //设置预进入数据
            if (_preInfo != null)
            {
                _scene.setPreInfo(_preInfo);
            }

            //标记创建了下个场景
            _createdNextScene = true;

            if (_isSwitchCross)
            {
                // loadSceneResourceOver();
            }
            else
            {
                _scene.load.startLoad(loadSceneResourceOver);
            }

            //客户端单人副本
            if (config.instanceType == SceneInstanceType.ClientDriveSinglePlayerBattle)
            {
                //有进出逻辑
                if (_scene.inout != null)
                {
                    ScenePreInfoData preInfo = toCreateScenePreInfoData();
                    _scene.inout.beforePreEnter();
                    _scene.inout.makePreInfo(preInfo);
                    preEnterSceneNext(preInfo);
                }
                //没有进出逻辑
                else
                {
                    preEnterSceneNext(null);
                }
            }
        }
        else
        {
            leaveSceneOver();
        }
    }