public void HandlePlayerMove(ulong playerId, Vector3 target) { BordlandsCreature bc = null; if (m_otherPlayerCreatures.TryGetValue(playerId, out bc)) { if (bc.transform) { bc.SetTargetPos(target); } } }
/// <summary> /// 延迟处理怪物,等待资源加载完毕 /// </summary> /// <param name="monster"></param> public void HandleMonster(MonsterCreature monster, PNmlMonster data) { if (!monster || !monster.gameObject || !monster.behaviour || !monster.activeRootNode) { return; } monster.behaviour.enabled = false; monster.behaviour.collider_.syncPosition = false; monster.behaviour.collider_.transform.localPosition = Vector3.zero; Util.SetLayer(monster.gameObject, Layers.MODEL); monster.gameObject.name = Util.Format("monster_{0}_{1}_{2}", data.uid, (EnumBordlandMonsterType)data.type, data.boss); monster.isPlayer = false; BordlandsCreature bc = monster.activeRootNode.GetComponentDefault <BordlandsCreature>(); bc.LoadMonsterRuntimeAnimator(BORDLAND_MONSTER_ANIMATOR_NAME, data); bc.moveSpeed = GetMonsterMoveSpeed(data.mesh); bc.creature = monster; bc.ResetToOriginal(); bc.SetMonsterRandomDir(); bc.InitPVECreatureBehaviour(); bc.CreateCollider(); Vector3 pos = data.pos.ToVector3(); Vector4 levelEdge = bordlandsEdge; if (levelEdge.z == levelEdge.w) { levelEdge = new Vector4(-22f, 22f, -1.4f, 2f); m_edge = levelEdge; } // edge check if (levelEdge.x != 0 || levelEdge.x != levelEdge.y) { pos.x = Mathf.Clamp(pos.x, levelEdge.x, levelEdge.y); } if (levelEdge.z != 0 || levelEdge.z != levelEdge.w) { pos.z = Mathf.Clamp(pos.z, levelEdge.z, levelEdge.w); } bc.creaturePos = pos; if (!m_monsterCreature.ContainsKey(data.uid)) { m_monsterCreature.Add(data.uid, bc); } else { m_monsterCreature[data.uid] = bc; } }
private void _ME(ModuleEvent <Module_Bordlands> e) { switch (e.moduleEvent) { case Module_Bordlands.EventDetectMonster: m_detectPanel.OnQuitBtnClick(null); break; case Module_Bordlands.EventFightMonster: m_sanctionPanel.OnQuitBtnClick(null); ScNmlSceneFightMonster fight = e.msg as ScNmlSceneFightMonster; if (fight.result != 0) { //todo 错误显示 Logger.LogError("fight error ,result is {0}", fight.result); return; } break; case Module_Bordlands.EventBordlandOver: CheckOpenQuitPanel(); break; case Module_Bordlands.EventRefreshSelfRank: m_scoreText.text = moduleBordlands.selfScore.ToString(); break; case Module_Bordlands.EventClickScenePlayerSuccess: if (!actived) { return; } BordlandsCreature bc = e.param1 as BordlandsCreature; if (bc && bc.monsterData != null) { if (bc.isInBattle) { string msg = ConfigText.GetDefalutString(TextForMatType.BorderlandUIText, 27); moduleGlobal.ShowMessage(msg); } else { m_sanctionPanel.SetPanelVisible(true); m_sanctionPanel.monsterData = bc.monsterData; } } break; case Module_Bordlands.EventShowRewardOver: CheckOpenQuitPanel(); break; } }
public void HandlePlayer(Creature player, PNmlPlayer info, bool isPlayer = false) { Util.SetLayer(player.gameObject, Layers.MODEL); player.isPlayer = isPlayer; player.enableUpdate = false; player.behaviour.enabled = false; player.gameObject.SetActive(m_playerVisible || isPlayer); player.gameObject.name = isPlayer ? "self" : info.roleName; CharacterEquip.ChangeCloth(player, info.fashion); BordlandsCreature bc = player.activeRootNode.GetComponentDefault <BordlandsCreature>(); PropItemInfo weaponInfo = ConfigManager.Get <PropItemInfo>(info.fashion.weapon); if (weaponInfo) { bc.LoadPlayerRuntimeAnimator(Creature.GetAnimatorName(weaponInfo.subType, info.gender), weaponInfo.subType, (byte)info.gender); } bc.playerType = isPlayer ? BordlandsCreature.BordLandCreatureType.Self : BordlandsCreature.BordLandCreatureType.Player; bc.roleInfo = info; bc.creature = player; bc.InitPVECreatureBehaviour(); bc.creaturePos = info.pos.ToVector3(); if (player.pet) { player.pet.gameObject.SetActive(m_playerVisible || isPlayer); player.pet.position_ = bc.creaturePos - new Vector3(0.45f, 0, 0); } if (!isPlayer) { if (!m_otherPlayerCreatures.ContainsKey(info.roleId)) { m_otherPlayerCreatures.Add(info.roleId, null); } m_otherPlayerCreatures[info.roleId] = bc; } }
void _Packet(ScNmlSceneObjState p) { EnumBordlandCreatureState state = (EnumBordlandCreatureState)p.state; if (m_bordlandMonster.ContainsKey(p.uid)) { Logger.LogInfo("monster.uid = {0},state change to {1}", p.uid, state); if (state == EnumBordlandCreatureState.LeaveFromScene) { m_bordlandMonster.Remove(p.uid); BordlandsCreature bc = m_monsterCreature.Get(p.uid); if (bc) { bc.gameObject.SetActive(false); bc.ResetToOriginal(); m_monsterCreature.Remove(p.uid); AddDeadMonsterCreature(bc.creature as MonsterCreature); } } else { //更新数据层 PNmlMonster pm = m_bordlandMonster.Get(p.uid); if (pm != null) { pm.state = p.state; } //更新UI层 BordlandsCreature bc = m_monsterCreature.Get(p.uid); if (bc) { bc.monsterData.state = p.state; bc.isInBattle = state == EnumBordlandCreatureState.Fighting; } } } else if (m_bordlandPlayers.ContainsKey(p.uid)) { Logger.LogInfo("player.uid = {0},state change to {1}", p.uid, state); if (state == EnumBordlandCreatureState.LeaveFromScene) { m_bordlandPlayers.Remove(p.uid); BordlandsCreature bc = m_otherPlayerCreatures.Get(p.uid); if (bc) { //离开后需要关掉宠物AI if (bc.creature.pet != null) { moduleAI.RemovePetAI(bc.creature.pet); } bc.gameObject.SetActive(false); m_otherPlayerCreatures.Remove(p.uid); bc.creature.Destroy(); } } else { PNmlPlayer pm = m_bordlandPlayers.Get(p.uid); if (pm != null) { pm.state = p.state; } BordlandsCreature bc = m_otherPlayerCreatures.Get(p.uid); if (bc) { bc.roleInfo.state = p.state; bc.isInBattle = state == EnumBordlandCreatureState.Fighting; } } } else { Logger.LogError("scene_obj_uid = {0} doesn't load,check out!", p.uid); } }