예제 #1
0
    /// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        if (!base.toDataEquals(data))
        {
            return(false);
        }

        CharacterIdentityData mData = (CharacterIdentityData)data;

        if (this.syncIndex != mData.syncIndex)
        {
            return(false);
        }

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

        return(true);
    }
예제 #2
0
    protected override MUnitIdentityData toCreateIdentityData()
    {
        CharacterIdentityData data = GameC.factory.createCharacterIdentityData();

        data.type = UnitType.Character;
        return(data);
    }
예제 #3
0
    /// <summary>
    /// 复制(潜拷贝)
    /// </summary>
    protected override void toShadowCopy(BaseData data)
    {
        base.toShadowCopy(data);

        if (!(data is CharacterIdentityData))
        {
            return;
        }

        CharacterIdentityData mData = (CharacterIdentityData)data;

        this.syncIndex    = mData.syncIndex;
        this.roleShowData = mData.roleShowData;
    }
예제 #4
0
    protected override void makeIdentityData(MUnitIdentityData data)
    {
        base.makeIdentityData(data);

        CharacterIdentityData cData = (CharacterIdentityData)data;

        if (_player != null)
        {
            cData.roleShowData = _player.role.createRoleShowData();
        }
        else
        {
            cData.roleShowData = _signedRoleShowData;
        }
    }
예제 #5
0
    /// <summary>
    /// 复制(深拷贝)
    /// </summary>
    protected override void toCopy(BaseData data)
    {
        base.toCopy(data);

        if (!(data is CharacterIdentityData))
        {
            return;
        }

        CharacterIdentityData mData = (CharacterIdentityData)data;

        this.syncIndex = mData.syncIndex;

        if (mData.roleShowData != null)
        {
            this.roleShowData = (RoleShowData)mData.roleShowData.clone();
        }
        else
        {
            this.roleShowData = null;
            nullObjError("roleShowData");
        }
    }
예제 #6
0
    private Unit toAddUnit(UnitData data)
    {
        if (data.instanceID <= 0)
        {
            Ctrl.throwError("单位流水ID未赋值", data.identity.type);
            return(null);
        }

        if (ShineSetting.openCheck)
        {
            if (_units.contains(data.instanceID))
            {
                Ctrl.throwError("单位已存在");
                return(null);
            }
        }

        bool canFight = BaseC.constlist.unit_canFight(data.identity.type) && !isSimple();

        if (canFight)
        {
            //没绑数据逻辑
            if (data.fightDataLogic == null)
            {
                UnitFightDataLogic dataLogic = GameC.pool.createUnitFightDataLogic();
                //主控标记
                dataLogic.isSelfControl = data.getFightIdentity().controlPlayerID == GameC.player.role.playerID;

                dataLogic.setData(data.fight, data.avatar);
                data.fightDataLogic = dataLogic;
            }
        }

        Unit unit = toCreateUnitByData(data);

        //双绑
        unit.setUnitData(data);
        unit.setScene(this);

        if (canFight)
        {
            data.fightDataLogic.setUnit(unit);
        }

        _units.put(data.instanceID, unit);

        //战斗单位
        if (canFight)
        {
            _fightUnits.put(data.instanceID, unit);
        }

        //是角色
        if (unit.isCharacter())
        {
            CharacterIdentityData iData = (CharacterIdentityData)data.identity;

            if (_config.instanceType == SceneInstanceType.FiniteBattleWithFrameSync)
            {
                _charactersByIndex.put(iData.syncIndex, unit);
            }

            _characters.put(iData.playerID, unit);
        }

        return(unit);
    }
예제 #7
0
    /** 删除单位 */
    public void removeUnit(int instanceID)
    {
        Unit unit = _units.get(instanceID);

        if (unit == null)
        {
            if (ShineSetting.openCheck)
            {
                Ctrl.throwError("单位不存在:" + instanceID);
            }

            return;
        }

        UnitSimpleData sData = _bindVisionUnits.get(instanceID);

        if (sData != null)
        {
            unit.makeSimpleUnitData(sData);
        }

        //场景移除单位
        onRemoveUnit(unit);
        //预移除
        unit.preRemove();
        //没有aoi

        //标记
        unit.enabled = false;
        //析构
        unit.dispose();
        //字典移除
        _units.remove(instanceID);

        bool canFight = unit.canFight() && !isSimple();

        if (canFight)
        {
            _fightUnits.remove(instanceID);
        }

        UnitData data = unit.getUnitData();

        if (unit.isCharacter())
        {
            CharacterIdentityData iData = (CharacterIdentityData)data.identity;

            if (_config.instanceType == SceneInstanceType.FiniteBattleWithFrameSync)
            {
                _charactersByIndex.remove(iData.syncIndex);
            }

            _characters.remove(iData.playerID);
        }

        unit.setScene(null);

        //双解绑
        if (canFight)
        {
            data.fightDataLogic.setUnit(null);
        }

        unit.setUnitData(null);

        if (canFight && isNeedReleaseFightDataLogic(unit))
        {
            //清空数据
            data.fightDataLogic.clear();

            //析构数据逻辑
            data.fightDataLogic.setData(null, null);
            GameC.pool.releaseUnitFightDataLogic(data.fightDataLogic);
            data.fightDataLogic = null;
        }

        if (isNeedReleaseUnit(unit))
        {
            GameC.pool.releaseUnit(unit);
        }
    }
예제 #8
0
    public override void dispose()
    {
        base.dispose();

        _data = null;
    }
예제 #9
0
 public override void init()
 {
     base.init();
     _data     = (CharacterIdentityData)_unit.getUnitData().identity;
     _unitName = _data.roleShowData.name;
 }