//shield /** 护盾吸收伤害 */ public void onShieldDamage(int type, int value) { SList <DIntData> list = _shieldBuffDic.get(type); if (list != null) { while (!list.isEmpty()) { DIntData v = list.get(0); if (value < v.value) { v.value -= value; break; } else { value -= v.value; v.value = 0; //盾爆了就删除buff removeBuffByInstanceID(v.key); } } } }
/// <summary> /// 移除执行目标 /// </summary> public void removeRunningTask(TaskData data) { _runningTaskDic.remove(data.instanceID); TaskTypeConfig tConfig; IntObjectMap <TaskData> dic; //双键 if ((tConfig = TaskTypeConfig.get(data.config.type)).needSecondKey) { if ((dic = _runningTaskTypeTwoDic.get((long)data.config.type << 32 | data.config.args[1])) != null) { dic.remove(data.instanceID); } if (tConfig.needSecondKey2) { if ((dic = _runningTaskTypeTwoDic2.get((long)data.config.type << 32 | data.config.args[2])) != null) { dic.remove(data.instanceID); } } } //单键 else { if ((dic = _runningTaskTypeOneDic.get(data.config.type)) != null) { dic.remove(data.instanceID); } } }
public BaseData createRequest(int type) { ObjectPool <BaseData> pool = _requestDic.get(type); if (pool == null) { return(BytesControl.getRequestByID(type)); } return(pool.getOne()); }
/** 获取物品组(id为key)(没有就创建) */ private IntObjectMap <ItemData> getItemDicByIDAbs(int id) { IntObjectMap <ItemData> tDic = _dicByID.get(id); if (tDic == null) { _dicByID.put(id, tDic = new IntObjectMap <ItemData>()); } return(tDic); }
public BaseData createData(int type) { ObjectPool <BaseData> pool = _dataDic.get(type); if (pool == null) { return(BytesControl.getDataByID(type)); } return(pool.getOne()); }
/// <summary> /// 获取一个多实例UI /// </summary> public GameUIBase getMultiUI(int id) { ObjectPool <GameUIBase> pool = _multiUIPoolDic.get(id); if (pool == null) { Ctrl.throwError("找不到该id的多实例ui", id); return(null); } return(pool.getOne()); }
/** 是否有buff(为一些绑定逻辑使用) */ public bool hasBuff(int id) { if (BuffConfig.get(id).plusType == BuffPlusType.AllExist) { IntObjectMap <BuffData> dic; return((dic = _buffDatasForAllExist.get(id)) != null && !dic.isEmpty()); } else { return(_buffDatasByID.get(id) != null); } }
/** 写回 */ public void write() { Ctrl.print("保存场景", config.id); if (_stream == null) { _stream = new BytesWriteStream(); } else { _stream.clear(); } _stream.writeLen(elements.size()); foreach (int k in elements.getSortedKeyList()) { ScenePlaceElementConfig scenePlaceElementConfig = elements.get(k).config; scenePlaceElementConfig.writeBytesSimple(_stream); } string path = SceneEditorWindow.getScenePlaceFilePath(config.id); FileUtils.writeFileForBytesWriteStream(path, _stream); }
private TriggerInstance doCreateInstance(int id) { TriggerConfigData config = _configDic.get(id); if (config == null) { warnLog("不该找不到配置", id); return(null); } TriggerInstance one = _instancePool.getOne(); one.config = config; initInstance(one); return(one); }
/** 场景进入场景 */ private void enterScene(SceneConfig config) { if (_currentSceneData != null) { exitScene(); } SceneEditorData sData = _sceneDic.get(config.id); if (sData == null) { sData = new SceneEditorData(); sData.config = config; sData.read(); _sceneDic.put(config.id, sData); } _currentSceneData = sData; _elementInstanceID = -1; SceneMapConfig mapConfig = SceneMapConfig.get(config.mapID); _originPos.setByIArr(mapConfig.origin); _sizePos.setByIArr(mapConfig.size); EditorSceneManager.sceneLoaded += onSceneLoaded; EditorSceneManager.LoadScene(ShineToolGlobal.assetSourceStr + "/" + mapConfig.source); }
public void setData(IntObjectMap <CDData> cds) { _cds = cds; if (cds != null && !cds.isEmpty()) { IntObjectMap <CDData> groupMaxCDs = _groupMaxCDs; IntIntMap groupCDCount = _groupCDCount; CDData[] values = cds.getValues(); CDData data; for (int i = values.Length - 1; i >= 0; --i) { if ((data = values[i]) != null) { int lastTime = data.getLastTime(); CDConfig config = data.config = CDConfig.get(data.id); foreach (int v in config.groups) { groupCDCount.addValue(v, 1); CDData oldMax = groupMaxCDs.get(v); if (oldMax == null || oldMax.getLastTime() < lastTime) { groupMaxCDs.put(v, data); } } } } } }
private void reCountGroupCDMax() { IntObjectMap <CDData> groupMaxCDs = _groupMaxCDs; //FIXME:SMap CDData[] values = _cds.getValues(); CDData data; CDData gData; int lastTime; for (int i = values.Length - 1; i >= 0; --i) { if ((data = values[i]) != null) { lastTime = data.getLastTime(); foreach (int gv in data.config.groups) { if ((gData = groupMaxCDs.get(gv)) == null || gData.getLastTime() < lastTime) { groupMaxCDs.put(gv, data); } } } } }
//技能CD部分 /** 获取某个技能的技能数据(最长的一个) */ public CDData getSkillCD(int id) { int maxLastTime = 0; CDData maxCDData = null; SkillConfig config = SkillConfig.get(id); CDData data; IntObjectMap <CDData> groupMaxCDs = _groupMaxCDs; foreach (int v in config.underGroupCDs) { if ((data = groupMaxCDs.get(v)) != null) { int lastTime = data.getLastTime(); if (lastTime > maxLastTime) { maxCDData = data; } } } return(maxCDData); }
/** 一秒十次 */ public void onPiece(int delay) { IntObjectMap <CDData> cds; if ((cds = _cds).isEmpty()) { return; } IntObjectMap <CDData> groupMaxCDs = _groupMaxCDs; IntIntMap groupCDCount = _groupCDCount; UnitFightDataLogic parent = _parent; foreach (CDData data in _cds) { if ((data.timePass += delay) >= data.timeMax) { cds.remove(data.id); //移除对应组CD foreach (int gv in data.config.groups) { groupCDCount.addValue(gv, -1); if (groupMaxCDs.get(gv) == data) { groupMaxCDs.remove(gv); parent.onEndGroupCD(gv); } } } } }
public override void init() { base.init(); _fightLogic = _unit.fight; _commandLogic = _unit.aiCommand; _fightUnitConfig = _fightLogic.getFightUnitConfig(); if (_unit.isSelfControl()) { // setAIMode(_fightUnitConfig.defaultAIMode); setAIMode(UnitAIModeType.Base); setWanderOnIdle(_fightUnitConfig.isWanderOnIdle); } else { setAIMode(UnitAIModeType.None); } setWanderOnIdle(_fightUnitConfig.isWanderOnIdle); _maxPursueDistanceSq = _fightUnitConfig.maxPursueRadius * _fightUnitConfig.maxPursueRadius; _unitSkills = _unit.getUnitData().fight.skills; FightUnitLevelConfig levelConfig = FightUnitLevelConfig.get(_fightUnitConfig.id, _fightLogic.getLevel()); if (levelConfig.skills.Length > 0) { _defaultSkill = _unitSkills.get(levelConfig.skills[0].key); } else { _defaultSkill = null; } }
/// <summary> /// 获取聊天频道数据 /// </summary> public ChatChannelData getChatChannelData(int channel, long key) { ChatChannelConfig config = ChatChannelConfig.get(channel); ChatChannelData re; if (config.isMulti) { LongObjectMap <ChatChannelData> dic = _multiChannels.get(channel); if (dic == null) { _multiChannels.put(channel, dic = new LongObjectMap <ChatChannelData>()); } if ((re = dic.get(key)) == null) { dic.put(key, re = new ChatChannelData()); re.initDefault(); } } else { if ((re = _singleChannels.get(channel)) == null) { _singleChannels.put(channel, re = new ChatChannelData()); re.initDefault(); } } return(re); }
/** 添加单位 */ public Unit addUnit(UnitData data) { //预处理 //服务器驱动场景启用 if (_config.instanceType != SceneInstanceType.ClientDriveSinglePlayerBattle) { //是自己的M单位 if (data.identity is MUnitIdentityData && data.identity.playerID == GameC.player.role.playerID) { MUnitUseLogic useLogic = GameC.player.character.getMUnitUseLogic(data.getMUnitIdentity().mIndex); if (useLogic == null) { Ctrl.throwError("不能找不到主单位的使用逻辑", data.getMUnitIdentity().mIndex); } //取主角的数据逻辑 UnitFightDataLogic dataLogic = useLogic.getFightLogic(); //先清空 dataLogic.clear(); //再重设数据 dataLogic.setData(data.fight, data.avatar); data.fightDataLogic = dataLogic; } } // Unit unit = toAddUnit(data); if (unit != null) { toActiveUnit(unit); UnitSimpleData sData = _bindVisionUnits.get(data.instanceID); if (sData != null) { unit.makeSimpleUnitData(sData); } } return(unit); }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { ActivityPartData mData = (ActivityPartData)data; if (mData.datas != null) { if (this.datas == null) { return(false); } if (this.datas.size() != mData.datas.size()) { return(false); } IntObjectMap <ActivityData> datasR = mData.datas; if (!this.datas.isEmpty()) { int datasKFreeValue = this.datas.getFreeValue(); int[] datasKKeys = this.datas.getKeys(); ActivityData[] datasVValues = this.datas.getValues(); for (int datasKI = datasKKeys.Length - 1; datasKI >= 0; --datasKI) { int datasK = datasKKeys[datasKI]; if (datasK != datasKFreeValue) { ActivityData datasV = datasVValues[datasKI]; ActivityData datasU = datasR.get(datasK); if (datasU != null) { if (datasV == null) { return(false); } if (!datasV.dataEquals(datasU)) { return(false); } } else { if (datasV != null) { return(false); } } } } } } else { if (this.datas != null) { return(false); } } return(true); }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { PetPartData mData = (PetPartData)data; if (mData.petDic != null) { if (this.petDic == null) { return(false); } if (this.petDic.size() != mData.petDic.size()) { return(false); } IntObjectMap <PetUseData> petDicR = mData.petDic; if (!this.petDic.isEmpty()) { int petDicKFreeValue = this.petDic.getFreeValue(); int[] petDicKKeys = this.petDic.getKeys(); PetUseData[] petDicVValues = this.petDic.getValues(); for (int petDicKI = petDicKKeys.Length - 1; petDicKI >= 0; --petDicKI) { int petDicK = petDicKKeys[petDicKI]; if (petDicK != petDicKFreeValue) { PetUseData petDicV = petDicVValues[petDicKI]; PetUseData petDicU = petDicR.get(petDicK); if (petDicU != null) { if (petDicV == null) { return(false); } if (!petDicV.dataEquals(petDicU)) { return(false); } } else { if (petDicV != null) { return(false); } } } } } } else { if (this.petDic != null) { return(false); } } return(true); }
private static LongIterator PrimitiveIdsByType(IntObjectMap <MutableLongSet> map, int type) { //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final org.eclipse.collections.api.set.primitive.LongSet relationships = map.get(type); LongSet relationships = map.get(type); return(relationships == null ? ImmutableEmptyLongIterator.INSTANCE : relationships.freeze().longIterator()); }
//方法组 /** 添加物品到指定空位置(正序)(以及空闲格子计算) */ private void addItemToPos(int index, ItemData data) { //先扩容再检测 if (ShineSetting.openCheck) { if (_dic.get(index) != null) { Ctrl.throwError("不该已有物品"); } } data.index = index; //标记index _dic.put(index, data); getItemDicByIDAbs(data.id).put(index, data); _showListDirty = true; }
/** 添加CD组 */ public void reAddCDs(IntObjectMap <CDData> dic, int dTime) { if (dic.isEmpty()) { return; } IntObjectMap <CDData> cds = _cds; if (!cds.isEmpty()) { Ctrl.throwError("这时cd组不应该有值"); } IntObjectMap <CDData> groupMaxCDs = _groupMaxCDs; IntIntMap groupCDCount = _groupCDCount; UnitFightDataLogic parent = _parent; CDData[] values = dic.getValues(); CDData v; for (int i = values.Length - 1; i >= 0; --i) { if ((v = values[i]) != null) { v.config = CDConfig.get(v.id); v.timePass += dTime; //依然有效 if (v.timePass < v.timeMax) { cds.put(v.id, v); foreach (int gv in v.config.groups) { groupCDCount.addValue(gv, 1); CDData oldMax = groupMaxCDs.get(gv); if (oldMax == null || oldMax.getLastTime() < v.getLastTime()) { groupMaxCDs.put(gv, v); } //新的 if (oldMax == null) { parent.onStartGroupCD(gv); } } } } } _parent.onCDChange(); }
internal static Value[] GetPropertyValues(PropertyReader propertyReader, IntObjectMap <PropertyBlock> propertyMap, int[] indexPropertyIds) { Value[] values = new Value[indexPropertyIds.Length]; for (int i = 0; i < indexPropertyIds.Length; i++) { PropertyBlock propertyBlock = propertyMap.get(indexPropertyIds[i]); values[i] = propertyReader.PropertyValue(propertyBlock); } return(values); }
/** 目标刷新 */ private void taskRefresh(TaskData data) { Action <TaskData> func; if ((func = _taskRefreshFuncDic.get(data.funcID)) == null) { return; } func(data); }
/** 获取Rank简版数据 */ public RankSimpleData getRankSimpleData(int funcID) { IntObjectMap <FuncToolData> dic = _d.funcTools.get(FuncToolType.Rank); if (dic == null) { return(null); } return((RankSimpleData)dic.get(funcID)); }
/** 开始服务器CD组 */ public void startCDsByServer(SList <CDData> list) { IntObjectMap <CDData> cds = _cds; IntObjectMap <CDData> groupMaxCDs = _groupMaxCDs; IntIntMap groupCDCount = _groupCDCount; UnitFightDataLogic parent = _parent; CDData oldData; CDData data; CDConfig config; foreach (CDData v in list) { config = CDConfig.get(v.id); if ((oldData = cds.get(v.id)) == null) { data = v; data.config = config; cds.put(data.id, data); } else { data = oldData; data.timePass = v.timePass; data.timeMax = v.timeMax; } foreach (int gv in config.groups) { //计数加1 if (oldData == null) { groupCDCount.addValue(gv, 1); } CDData oldMax = groupMaxCDs.get(gv); if (oldMax == null || oldMax.getLastTime() < data.timeMax) { groupMaxCDs.put(gv, data); } //新的 if (oldMax == null) { parent.onStartGroupCD(gv); } } } _parent.onCDChange(); }
/** 获取部件加载器 */ private AssetPoolLoadTool getPartLoadTool(int type) { AssetPoolLoadTool tool = _partLoadToolDic.get(type); if (tool == null) { _partLoadToolDic.put(type, tool = new AssetPoolLoadTool(AssetPoolType.UnitPart)); } return(tool); }
/** 获取可用实例 */ protected TriggerInstance getInstance(int id) { TriggerInstance instance; if ((instance = _instanceDic.get(id)) == null) { _instanceDic.put(id, instance = doCreateInstance(id)); } return(instance); }
/** 获取某组trigger */ public static IntObjectMap <TriggerConfigData> getGroupDic(int groupType, int groupID) { IntObjectMap <IntObjectMap <TriggerConfigData> > dic; if ((dic = _groupDic.get(groupType)) == null) { return(null); } return(dic.get(groupID)); }
/** 检测消息是否可以发出 */ public bool checkRequest(int requestID) { IntSet intSet = _requestSet.get(requestID); //TODO:待会继续 if (_currentRequestID == -1) { } return(true); }