Пример #1
0
    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;
    }
Пример #2
0
    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);
    }
Пример #3
0
    // 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);
    }
Пример #4
0
    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>();
    }
Пример #5
0
    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>();
    }
Пример #6
0
        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();
        }
Пример #7
0
        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);
        }
Пример #8
0
        //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);
        }