示例#1
0
    /// <summary>
    /// 读取字节流(完整版)
    /// </summary>
    protected override void toReadBytesFull(BytesReadStream stream)
    {
        base.toReadBytesFull(stream);

        stream.startReadObj();

        BaseData enterDataT = stream.readDataFullNotNull();

        if (enterDataT != null)
        {
            if (enterDataT is SceneEnterData)
            {
                this.enterData = (SceneEnterData)enterDataT;
            }
            else
            {
                this.enterData = new SceneEnterData();
                if (!(enterDataT.GetType().IsAssignableFrom(typeof(SceneEnterData))))
                {
                    stream.throwTypeReadError(typeof(SceneEnterData), enterDataT.GetType());
                }
                this.enterData.shadowCopy(enterDataT);
            }
        }
        else
        {
            this.enterData = null;
        }

        stream.endReadObj();
    }
示例#2
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);
        }
    }
示例#3
0
    /// <summary>
    /// 复制(潜拷贝)
    /// </summary>
    protected override void toShadowCopy(BaseData data)
    {
        if (!(data is SceneEnterData))
        {
            return;
        }

        SceneEnterData mData = (SceneEnterData)data;

        this.hero  = mData.hero;
        this.units = mData.units;
        this.roles = mData.roles;
        this.selfBindFieldItemBags = mData.selfBindFieldItemBags;
        this.bindVisionUnits       = mData.bindVisionUnits;
        this.battleData            = mData.battleData;
    }
示例#4
0
    /** 进入客户端场景 */
    private void toEnterClientScene()
    {
        SceneEnterData enterData = _scene.method.createSceneEnterData();

        //有进出逻辑
        if (_scene.inout != null)
        {
            UnitData heroData = _scene.inout.createCharacterDataSelf();

            enterData.hero  = heroData;
            enterData.units = new SList <UnitData>();
        }

        _scene.battle.makeSceneEnterData(enterData);
        _scene.method.makeSceneEnterData(enterData);

        enterScene(enterData);
    }
示例#5
0
    /** 服务器推送进入场景 */
    public void enterScene(SceneEnterData enterData)
    {
        Ctrl.print("进入场景");

        _enterData = enterData;

        //TODO:这里可以再补一次资源存在性校验

        //初始化
        _scene.init();
        //初始化进入数据
        _scene.initEnterData(_enterData);

        GameC.player.dispatch(GameEventType.EnterScene, _scene.getConfig().id);

        onEnterScene();

        doAddSwitch();
    }
示例#6
0
        public override SceneEnterData createSceneEnterData()
        {
            if (!_g13)
            {
                _m13 = instance.Type.GetMethod("createSceneEnterData", 0);
                _g13 = true;
            }

            if (_m13 != null && !_b13)
            {
                _b13 = true;
                SceneEnterData re = (SceneEnterData)appdomain.Invoke(_m13, instance, null);
                _b13 = false;
                return(re);
            }
            else
            {
                return(base.createSceneEnterData());
            }
        }
示例#7
0
        public override void initEnterData(SceneEnterData data)
        {
            if (!_g20)
            {
                _m20 = instance.Type.GetMethod("initEnterData", 1);
                _g20 = true;
            }

            if (_m20 != null && !_b20)
            {
                _b20   = true;
                _p1[0] = data;
                appdomain.Invoke(_m20, instance, _p1);
                _p1[0] = null;
                _b20   = false;
            }
            else
            {
                base.initEnterData(data);
            }
        }
示例#8
0
        public override void makeSceneEnterData(SceneEnterData data)
        {
            if (!_g14)
            {
                _m14 = instance.Type.GetMethod("makeSceneEnterData", 1);
                _g14 = true;
            }

            if (_m14 != null && !_b14)
            {
                _b14   = true;
                _p1[0] = data;
                appdomain.Invoke(_m14, instance, _p1);
                _p1[0] = null;
                _b14   = false;
            }
            else
            {
                base.makeSceneEnterData(data);
            }
        }
示例#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);
                    }
                }
            }
        }
    }
示例#10
0
    /** 初始化进入数据 */
    public void initEnterData(SceneEnterData enterData)
    {
        //有玩家角色
        if (enterData.roles != null)
        {
            foreach (SceneRoleData roleData in enterData.roles)
            {
                role.addRole(roleData);
            }
        }

        if (enterData.bindVisionUnits != null)
        {
            _bindVisionUnits = enterData.bindVisionUnits;
        }

        //有主角
        if (enterData.hero != null)
        {
            //主角
            addHero(enterData.hero);
        }

        SList <SceneLogicBase> logics = _logics;
        SceneLogicBase         logic;

        for (int i = 0, len = logics.Count; i < len; ++i)
        {
            if ((logic = logics[i]).enabled)
            {
                logic.afterHero();
            }
        }

        //先处理掉落包数据
        if (enterData.selfBindFieldItemBags != null)
        {
            role.initFieldItemBagBindDic(enterData.selfBindFieldItemBags);
        }

        //有单位组
        if (enterData.units != null)
        {
            foreach (UnitData v in enterData.units)
            {
                addUnit(v);
            }
        }

        if (unitFactory != null)
        {
            //初始化起始单位
            unitFactory.initFirst();
        }

        if (camera != null)
        {
            //默认镜头
            camera.cameraToDefault();
        }

        //后调用play的
        battle.initEnterData(enterData);
        method.initEnterData(enterData);

        onStart();
    }
示例#11
0
    /// <summary>
    /// 读取字节流(简版)
    /// </summary>
    protected override void toReadBytesSimple(BytesReadStream stream)
    {
        base.toReadBytesSimple(stream);

        this.enterData = (SceneEnterData)stream.readDataSimpleNotNull();
    }
示例#12
0
    /// <summary>
    /// 回池
    /// </summary>
    protected override void toRelease(DataPool pool)
    {
        base.toRelease(pool);

        this.enterData = null;
    }
示例#13
0
    /// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        SceneEnterData mData = (SceneEnterData)data;

        if (mData.hero != null)
        {
            if (this.hero == null)
            {
                return(false);
            }
            if (!this.hero.dataEquals(mData.hero))
            {
                return(false);
            }
        }
        else
        {
            if (this.hero != null)
            {
                return(false);
            }
        }

        if (mData.units != null)
        {
            if (this.units == null)
            {
                return(false);
            }
            if (this.units.size() != mData.units.size())
            {
                return(false);
            }
            SList <UnitData> unitsT = this.units;
            SList <UnitData> unitsR = mData.units;
            int unitsLen            = unitsT.size();
            for (int unitsI = 0; unitsI < unitsLen; ++unitsI)
            {
                UnitData unitsU = unitsT.get(unitsI);
                UnitData unitsV = unitsR.get(unitsI);
                if (unitsV != null)
                {
                    if (unitsU == null)
                    {
                        return(false);
                    }
                    if (!unitsU.dataEquals(unitsV))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (unitsU != null)
                    {
                        return(false);
                    }
                }
            }
        }
        else
        {
            if (this.units != null)
            {
                return(false);
            }
        }

        if (mData.roles != null)
        {
            if (this.roles == null)
            {
                return(false);
            }
            if (this.roles.size() != mData.roles.size())
            {
                return(false);
            }
            LongObjectMap <SceneRoleData> rolesR = mData.roles;
            if (!this.roles.isEmpty())
            {
                long            rolesKFreeValue = this.roles.getFreeValue();
                long[]          rolesKKeys      = this.roles.getKeys();
                SceneRoleData[] rolesVValues    = this.roles.getValues();
                for (int rolesKI = rolesKKeys.Length - 1; rolesKI >= 0; --rolesKI)
                {
                    long rolesK = rolesKKeys[rolesKI];
                    if (rolesK != rolesKFreeValue)
                    {
                        SceneRoleData rolesV = rolesVValues[rolesKI];
                        SceneRoleData rolesU = rolesR.get(rolesK);
                        if (rolesU != null)
                        {
                            if (rolesV == null)
                            {
                                return(false);
                            }
                            if (!rolesV.dataEquals(rolesU))
                            {
                                return(false);
                            }
                        }
                        else
                        {
                            if (rolesV != null)
                            {
                                return(false);
                            }
                        }
                    }
                }
            }
        }
        else
        {
            if (this.roles != null)
            {
                return(false);
            }
        }

        if (mData.selfBindFieldItemBags != null)
        {
            if (this.selfBindFieldItemBags == null)
            {
                return(false);
            }
            if (this.selfBindFieldItemBags.size() != mData.selfBindFieldItemBags.size())
            {
                return(false);
            }
            IntObjectMap <FieldItemBagBindData> selfBindFieldItemBagsR = mData.selfBindFieldItemBags;
            if (!this.selfBindFieldItemBags.isEmpty())
            {
                int   selfBindFieldItemBagsKFreeValue = this.selfBindFieldItemBags.getFreeValue();
                int[] selfBindFieldItemBagsKKeys      = this.selfBindFieldItemBags.getKeys();
                FieldItemBagBindData[] selfBindFieldItemBagsVValues = this.selfBindFieldItemBags.getValues();
                for (int selfBindFieldItemBagsKI = selfBindFieldItemBagsKKeys.Length - 1; selfBindFieldItemBagsKI >= 0; --selfBindFieldItemBagsKI)
                {
                    int selfBindFieldItemBagsK = selfBindFieldItemBagsKKeys[selfBindFieldItemBagsKI];
                    if (selfBindFieldItemBagsK != selfBindFieldItemBagsKFreeValue)
                    {
                        FieldItemBagBindData selfBindFieldItemBagsV = selfBindFieldItemBagsVValues[selfBindFieldItemBagsKI];
                        FieldItemBagBindData selfBindFieldItemBagsU = selfBindFieldItemBagsR.get(selfBindFieldItemBagsK);
                        if (selfBindFieldItemBagsU != null)
                        {
                            if (selfBindFieldItemBagsV == null)
                            {
                                return(false);
                            }
                            if (!selfBindFieldItemBagsV.dataEquals(selfBindFieldItemBagsU))
                            {
                                return(false);
                            }
                        }
                        else
                        {
                            if (selfBindFieldItemBagsV != null)
                            {
                                return(false);
                            }
                        }
                    }
                }
            }
        }
        else
        {
            if (this.selfBindFieldItemBags != null)
            {
                return(false);
            }
        }

        if (mData.bindVisionUnits != null)
        {
            if (this.bindVisionUnits == null)
            {
                return(false);
            }
            if (this.bindVisionUnits.size() != mData.bindVisionUnits.size())
            {
                return(false);
            }
            IntObjectMap <UnitSimpleData> bindVisionUnitsR = mData.bindVisionUnits;
            if (!this.bindVisionUnits.isEmpty())
            {
                int              bindVisionUnitsKFreeValue = this.bindVisionUnits.getFreeValue();
                int[]            bindVisionUnitsKKeys      = this.bindVisionUnits.getKeys();
                UnitSimpleData[] bindVisionUnitsVValues    = this.bindVisionUnits.getValues();
                for (int bindVisionUnitsKI = bindVisionUnitsKKeys.Length - 1; bindVisionUnitsKI >= 0; --bindVisionUnitsKI)
                {
                    int bindVisionUnitsK = bindVisionUnitsKKeys[bindVisionUnitsKI];
                    if (bindVisionUnitsK != bindVisionUnitsKFreeValue)
                    {
                        UnitSimpleData bindVisionUnitsV = bindVisionUnitsVValues[bindVisionUnitsKI];
                        UnitSimpleData bindVisionUnitsU = bindVisionUnitsR.get(bindVisionUnitsK);
                        if (bindVisionUnitsU != null)
                        {
                            if (bindVisionUnitsV == null)
                            {
                                return(false);
                            }
                            if (!bindVisionUnitsV.dataEquals(bindVisionUnitsU))
                            {
                                return(false);
                            }
                        }
                        else
                        {
                            if (bindVisionUnitsV != null)
                            {
                                return(false);
                            }
                        }
                    }
                }
            }
        }
        else
        {
            if (this.bindVisionUnits != null)
            {
                return(false);
            }
        }

        if (mData.battleData != null)
        {
            if (this.battleData == null)
            {
                return(false);
            }
            if (!this.battleData.dataEquals(mData.battleData))
            {
                return(false);
            }
        }
        else
        {
            if (this.battleData != null)
            {
                return(false);
            }
        }

        return(true);
    }
示例#14
0
    /// <summary>
    /// 复制(深拷贝)
    /// </summary>
    protected override void toCopy(BaseData data)
    {
        if (!(data is SceneEnterData))
        {
            return;
        }

        SceneEnterData mData = (SceneEnterData)data;

        if (mData.hero != null)
        {
            this.hero = (UnitData)mData.hero.clone();
        }
        else
        {
            this.hero = null;
        }

        if (mData.units != null)
        {
            if (this.units != null)
            {
                this.units.clear();
                this.units.ensureCapacity(mData.units.size());
            }
            else
            {
                this.units = new SList <UnitData>();
            }

            SList <UnitData> unitsT = this.units;
            if (!mData.units.isEmpty())
            {
                UnitData[] unitsVValues = mData.units.getValues();
                for (int unitsVI = 0, unitsVLen = mData.units.length(); unitsVI < unitsVLen; ++unitsVI)
                {
                    UnitData unitsV = unitsVValues[unitsVI];
                    UnitData unitsU;
                    if (unitsV != null)
                    {
                        unitsU = (UnitData)unitsV.clone();
                    }
                    else
                    {
                        unitsU = null;
                        nullObjError("unitsU");
                    }

                    unitsT.add(unitsU);
                }
            }
        }
        else
        {
            this.units = null;
            nullObjError("units");
        }

        if (mData.roles != null)
        {
            if (this.roles != null)
            {
                this.roles.clear();
                this.roles.ensureCapacity(mData.roles.size());
            }
            else
            {
                this.roles = new LongObjectMap <SceneRoleData>(mData.roles.size());
            }

            LongObjectMap <SceneRoleData> rolesT = this.roles;
            if (!mData.roles.isEmpty())
            {
                SceneRoleData[] rolesVValues = mData.roles.getValues();
                for (int rolesVI = rolesVValues.Length - 1; rolesVI >= 0; --rolesVI)
                {
                    SceneRoleData rolesV = rolesVValues[rolesVI];
                    if (rolesV != null)
                    {
                        SceneRoleData rolesU;
                        if (rolesV != null)
                        {
                            rolesU = (SceneRoleData)rolesV.clone();
                        }
                        else
                        {
                            rolesU = null;
                            nullObjError("rolesU");
                        }

                        rolesT.put(rolesU.playerID, rolesU);
                    }
                }
            }
        }
        else
        {
            this.roles = null;
            nullObjError("roles");
        }

        if (mData.selfBindFieldItemBags != null)
        {
            if (this.selfBindFieldItemBags != null)
            {
                this.selfBindFieldItemBags.clear();
                this.selfBindFieldItemBags.ensureCapacity(mData.selfBindFieldItemBags.size());
            }
            else
            {
                this.selfBindFieldItemBags = new IntObjectMap <FieldItemBagBindData>(mData.selfBindFieldItemBags.size());
            }

            IntObjectMap <FieldItemBagBindData> selfBindFieldItemBagsT = this.selfBindFieldItemBags;
            if (!mData.selfBindFieldItemBags.isEmpty())
            {
                FieldItemBagBindData[] selfBindFieldItemBagsVValues = mData.selfBindFieldItemBags.getValues();
                for (int selfBindFieldItemBagsVI = selfBindFieldItemBagsVValues.Length - 1; selfBindFieldItemBagsVI >= 0; --selfBindFieldItemBagsVI)
                {
                    FieldItemBagBindData selfBindFieldItemBagsV = selfBindFieldItemBagsVValues[selfBindFieldItemBagsVI];
                    if (selfBindFieldItemBagsV != null)
                    {
                        FieldItemBagBindData selfBindFieldItemBagsU;
                        if (selfBindFieldItemBagsV != null)
                        {
                            selfBindFieldItemBagsU = (FieldItemBagBindData)selfBindFieldItemBagsV.clone();
                        }
                        else
                        {
                            selfBindFieldItemBagsU = null;
                        }

                        selfBindFieldItemBagsT.put(selfBindFieldItemBagsU.instanceID, selfBindFieldItemBagsU);
                    }
                }
            }
        }
        else
        {
            this.selfBindFieldItemBags = null;
        }

        if (mData.bindVisionUnits != null)
        {
            if (this.bindVisionUnits != null)
            {
                this.bindVisionUnits.clear();
                this.bindVisionUnits.ensureCapacity(mData.bindVisionUnits.size());
            }
            else
            {
                this.bindVisionUnits = new IntObjectMap <UnitSimpleData>(mData.bindVisionUnits.size());
            }

            IntObjectMap <UnitSimpleData> bindVisionUnitsT = this.bindVisionUnits;
            if (!mData.bindVisionUnits.isEmpty())
            {
                int              bindVisionUnitsKFreeValue = mData.bindVisionUnits.getFreeValue();
                int[]            bindVisionUnitsKKeys      = mData.bindVisionUnits.getKeys();
                UnitSimpleData[] bindVisionUnitsVValues    = mData.bindVisionUnits.getValues();
                for (int bindVisionUnitsKI = bindVisionUnitsKKeys.Length - 1; bindVisionUnitsKI >= 0; --bindVisionUnitsKI)
                {
                    int bindVisionUnitsK = bindVisionUnitsKKeys[bindVisionUnitsKI];
                    if (bindVisionUnitsK != bindVisionUnitsKFreeValue)
                    {
                        UnitSimpleData bindVisionUnitsV = bindVisionUnitsVValues[bindVisionUnitsKI];
                        int            bindVisionUnitsW;
                        UnitSimpleData bindVisionUnitsU;
                        bindVisionUnitsW = bindVisionUnitsK;

                        if (bindVisionUnitsV != null)
                        {
                            bindVisionUnitsU = (UnitSimpleData)bindVisionUnitsV.clone();
                        }
                        else
                        {
                            bindVisionUnitsU = null;
                        }

                        bindVisionUnitsT.put(bindVisionUnitsW, bindVisionUnitsU);
                    }
                }
            }
        }
        else
        {
            this.bindVisionUnits = null;
        }

        if (mData.battleData != null)
        {
            this.battleData = (BattleSceneData)mData.battleData.clone();
        }
        else
        {
            this.battleData = null;
        }
    }
示例#15
0
 /** 初始化进入数据 */
 public virtual void initEnterData(SceneEnterData data)
 {
 }
示例#16
0
 /** 构造场景进入数据(客户端场景)(激活单位后) */
 public virtual void makeSceneEnterData(SceneEnterData data)
 {
 }