/// <summary> /// 场景切换 /// </summary> private void OnEnterScene(PacketBase packet) { ss2c.EnterScene msg = packet as ss2c.EnterScene; UnitManager.Instance.RemoveAll(); //玩家信息 PlayerInfoForClient char_info = PlayerDataMgr.Instance.main_player_info; PlayerAOIInfo player_info = CommonObjectPools.Spawn <PlayerAOIInfo>(); player_info.char_name = char_info.char_name; player_info.char_type = char_info.char_type; player_info.pos_x = msg.pos.x; player_info.pos_y = msg.pos.y; player_info.flags = char_info.flags; player_info.model_idx = char_info.model_idx; player_info.job = char_info.job; player_info.level = char_info.level; player_info.exp = char_info.exp; player_info.energy = char_info.energy; player_info.gold = char_info.gold; player_info.coin = char_info.coin; player_info.hp = char_info.hp; player_info.hp_max = char_info.hp_max; player_info.hurt = char_info.hurt; player_info.range = char_info.range; player_info.run_speed = char_info.run_speed; player_info.vip_grade = char_info.vip_grade; player_info.vip_flags = char_info.vip_flags; //创建玩家对象 Player player = new Player(); player.obj_idx = char_info.char_idx; player.Setup(); player.LoadData(player_info); UnitManager.Instance.AddUnit(player); EventController.TriggerEvent(ClientEventID.SHOW_STATUS, eFormStatusType.Scene, "当前场景:" + msg.scene_type); EventController.TriggerEvent(ClientEventID.SHOW_STATUS, eFormStatusType.Log, "进入场景:" + msg.scene_type); }
/// <summary> /// 进入场景 /// </summary> private void OnEnterScene(PacketBase packet) { c2ss.EnterScene msg = packet as c2ss.EnterScene; Player player = UnitManager.Instance.GetPlayerByClientUID(msg.client_uid); if (player == null) { Log.Debug("OnEnterScene 未找到unit:" + msg.client_uid.srv_uid + ", " + msg.client_uid.conn_idx); return; } uint scene_idx = 0; if (msg.scene_type == 0) { //进入游戏后的第一个消息:告诉client需要进入的场景id scene_idx = player.scene_type_idx; //上次所在场景 } else { //相同场景跳转,直接返回 if (msg.scene_type == player.scene_type_idx) { return; } scene_idx = msg.scene_type; } //判断场景是否有效 if (!SceneID.IsValidScene(scene_idx)) { return; } //加入场景 BaseScene scene = SceneManager.Instance.CreateScene(scene_idx); if (scene != null) { //先从旧的场景移除 BaseScene old_scene = SceneManager.Instance.GetScene(player.scene_obj_idx); if (old_scene != null) { old_scene.RemoveUnit(player); } //再加入新的场景 scene.AddUnit(player); player.unit_attr.SetAttribInteger(eUnitModType.UMT_scene_type, scene_idx); } else { Log.Warning("加入场景失败:" + scene_idx); return; } //告诉client ss2c.EnterScene rep_msg = PacketPools.Get(ss2c.msg.ENTER_SCENE) as ss2c.EnterScene; rep_msg.scene_type = scene_idx; rep_msg.scene_instance_id = 1; rep_msg.pos.Set(player.pos_x, player.pos_y);//TODO:获取场景出生点 rep_msg.dir = eDirection.NONE; ServerNetManager.Instance.SendProxy(msg.client_uid, rep_msg, false); }
/// <summary> /// 场景切换 /// </summary> private void OnEnterScene(PacketBase packet) { ss2c.EnterScene msg = packet as ss2c.EnterScene; m_scene_type = msg.scene_type; m_pos = msg.pos; }