public static StaticRoomData FromObject(RoomKey roomKey, JsonData jsonData) { StaticRoomData staticRoomData = new StaticRoomData(); // Fill in the room objects JsonData roomObjectArray = jsonData["objects"]; if (roomObjectArray != null) { for (int roomObjectIndex = 0; roomObjectIndex < roomObjectArray.Count; roomObjectIndex++) { JsonData roomObject = roomObjectArray[roomObjectIndex]; RoomObject room = RoomObject.FromObject(roomObject); staticRoomData.RoomObjects.Add(room); } } // Retrieve the room template by name string templateName = (string)jsonData["room_template_name"]; staticRoomData.RoomTemplate = RoomTemplateManager.GetRoomTemplate(templateName); // Copy the nav mesh from the template staticRoomData.NavMesh = new AsyncRPGSharedLib.Navigation.NavMesh( roomKey, staticRoomData.RoomTemplate.NavMeshTemplate); return staticRoomData; }
public static StaticRoomData FromObject(RoomKey roomKey, JsonData jsonData) { StaticRoomData staticRoomData = new StaticRoomData(); // Fill in the room objects JsonData roomObjectArray = jsonData["objects"]; if (roomObjectArray != null) { for (int roomObjectIndex = 0; roomObjectIndex < roomObjectArray.Count; roomObjectIndex++) { JsonData roomObject = roomObjectArray[roomObjectIndex]; RoomObject room = RoomObject.FromObject(roomObject); staticRoomData.RoomObjects.Add(room); } } // Retrieve the room template by name string templateName = (string)jsonData["room_template_name"]; staticRoomData.RoomTemplate = RoomTemplateManager.GetRoomTemplate(templateName); // Copy the nav mesh from the template staticRoomData.NavMesh = new AsyncRPGSharedLib.Navigation.NavMesh( roomKey, staticRoomData.RoomTemplate.NavMeshTemplate); return(staticRoomData); }
// Parsing public static RoomData FromObject(JsonData jsonData) { RoomData roomData = new RoomData(); int gameID = SessionData.GetInstance().GameID; int room_x = (int)jsonData["room_x"]; int room_y = (int)jsonData["room_y"]; int room_z = (int)jsonData["room_z"]; float world_x = jsonData["world_x"].IsInt ? (float)((int)jsonData["world_x"]) : (float)((double)jsonData["world_x"]); float world_y = jsonData["world_y"].IsInt ? (float)((int)jsonData["world_y"]) : (float)((double)jsonData["world_y"]); float world_z = jsonData["world_z"].IsInt ? (float)((int)jsonData["world_z"]) : (float)((double)jsonData["world_z"]); roomData.RoomKey.Set(gameID, room_x, room_y, room_z); roomData.WorldPosition.Set(world_x, world_y, world_z); roomData.StaticRoomData = StaticRoomData.FromObject(roomData.RoomKey, jsonData["data"]); { JsonData portalList = jsonData["portals"]; for (int portalIndex = 0; portalIndex < portalList.Count; portalIndex++) { JsonData portalObject = portalList[portalIndex]; RoomPortal portal = RoomPortal.FromObject(portalObject); roomData.RoomPortals.Add(portal); } } { JsonData mobObjects = jsonData["mobs"]; roomData.m_mobs = new Dictionary <int, MobData>(); for (int mobIndex = 0; mobIndex < mobObjects.Count; mobIndex++) { JsonData mobObject = mobObjects[mobIndex]; MobData mobData = MobData.FromObject(mobObject); roomData.SetMobById(mobData.mob_id, mobData); } } { JsonData energyTankObjects = jsonData["energyTanks"]; roomData.m_energyTanks = new Dictionary <int, EnergyTankData>(); for (int energyTankIndex = 0; energyTankIndex < energyTankObjects.Count; energyTankIndex++) { JsonData energyTankObject = energyTankObjects[energyTankIndex]; EnergyTankData energyTankData = EnergyTankData.FromObject(energyTankObject); roomData.SetEnergyTankById(energyTankData.energy_tank_id, energyTankData); } } return(roomData); }
private Dictionary<int, MobData> m_mobs; // mob_id -> Mob Data #endregion Fields #region Constructors public RoomData() { RoomKey = new RoomKey(); WorldPosition = new Point3d(); RoomPortals = new List<RoomPortal>(); StaticRoomData = new StaticRoomData(); m_mobs = new Dictionary<int, MobData>(); m_energyTanks = new Dictionary<int, EnergyTankData>(); }
private Dictionary <int, EnergyTankData> m_energyTanks; // energy_tank_id -> Energy Tank Data public RoomData() { RoomKey = new RoomKey(); WorldPosition = new Point3d(); RoomPortals = new List <RoomPortal>(); StaticRoomData = new StaticRoomData(); m_mobs = new Dictionary <int, MobData>(); m_energyTanks = new Dictionary <int, EnergyTankData>(); }
public Room(RoomKey rk) { room_key = rk; random_seed = rk.GetHashCode(); world_position.Set( (float)room_key.x * WorldConstants.ROOM_X_SIZE, (float)room_key.y * WorldConstants.ROOM_Y_SIZE, (float)room_key.z * WorldConstants.ROOM_Z_SIZE); portalRoomSideBitmask = new TypedFlags <MathConstants.eSignedDirection>(); connectivity_id = -1; portals = new List <Portal>(); mobSpawners = new List <MobSpawner>(); static_room_data = new StaticRoomData(); static_room_data.room_template_name = ""; static_room_data.objects = null; runtime_nav_mesh = new NavMesh(); }
public bool GetRoom( AsyncRPGDataContext context, RoomKey roomKey, out Point3d world_position, out PortalEntry[] portals, out StaticRoomData staticRoomData, out string result) { Room cached_room = null; bool success = GetRoom( context, roomKey, out cached_room, out result); if (success && cached_room != null) { world_position = new Point3d(cached_room.world_position); portals = new PortalEntry[cached_room.portals.Count]; for (int portal_index = 0; portal_index < cached_room.portals.Count; ++portal_index) { portals[portal_index] = new PortalEntry(); portals[portal_index].id = cached_room.portals[portal_index].portal_id; portals[portal_index].target_portal_id = cached_room.portals[portal_index].target_portal_id; portals[portal_index].x0 = cached_room.portals[portal_index].bounding_box.Min.x; portals[portal_index].y0 = cached_room.portals[portal_index].bounding_box.Min.y; portals[portal_index].x1 = cached_room.portals[portal_index].bounding_box.Max.x; portals[portal_index].y1 = cached_room.portals[portal_index].bounding_box.Max.y; } staticRoomData = cached_room.static_room_data; } else { world_position = new Point3d(); portals = null; staticRoomData = null; } return(success); }
//TODO: LoadRoom - Convert this over to a request processor public static bool LoadRoom( AsyncRPGDataContext context, World world, RoomKey room_key, out Room room, out string result) { bool success; string json_static_data = WorldQueries.GetRoomStaticData(context, room_key); room = null; success = false; // Load static room data for this room if (json_static_data.Length > 0) { StaticRoomData static_room_data = null; try { if (json_static_data.Length == 0) { throw new ArgumentException(); } static_room_data = JsonMapper.ToObject <StaticRoomData>(json_static_data); } catch (System.Exception) { static_room_data = null; } if (static_room_data != null) { room = new Room(room_key); room.static_room_data = static_room_data; success = true; result = SuccessMessages.GENERAL_SUCCESS; } else { result = ErrorMessages.DB_ERROR + "(Failed to parse room static data)"; } } else { result = ErrorMessages.DB_ERROR + "(Failed to get room static data)"; } // If the static room data parsed, load everything else if (success) { RoomTemplate roomTemplate = world.RoomTemplates.GetTemplateByName(room.static_room_data.room_template_name); // Load the random seed for the room room.random_seed = WorldQueries.GetRoomRandomSeed(context, room_key); // Setup the runtime nav mesh room.runtime_nav_mesh = new NavMesh(room.room_key, roomTemplate.NavMeshTemplate); // Load all of the portals for this room room.portals = WorldQueries.GetRoomPortals(context, room_key); // Flag all of the room sides that have portals foreach (Portal p in room.portals) { room.portalRoomSideBitmask.Set(p.room_side, true); } // Load mob spawners for this room room.mobSpawners = MobQueries.GetMobSpawners(context, world.MobSpawnTables, room_key); } return(success); }