/// <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); }
protected override MUnitIdentityData toCreateIdentityData() { CharacterIdentityData data = GameC.factory.createCharacterIdentityData(); data.type = UnitType.Character; return(data); }
/// <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; }
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; } }
/// <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"); } }
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); }
/** 删除单位 */ 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); } }
public override void dispose() { base.dispose(); _data = null; }
public override void init() { base.init(); _data = (CharacterIdentityData)_unit.getUnitData().identity; _unitName = _data.roleShowData.name; }