summaryrefslogtreecommitdiff
path: root/libgame/game-game.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgame/game-game.c')
-rw-r--r--libgame/game-game.c52
1 files changed, 21 insertions, 31 deletions
diff --git a/libgame/game-game.c b/libgame/game-game.c
index e51b263..f0f3e75 100644
--- a/libgame/game-game.c
+++ b/libgame/game-game.c
@@ -253,17 +253,6 @@ always_relevant (GameFilter *filter, GameObject *object)
}
static void
-unref_and_unset_name (gpointer data)
-{
- GameObject *object = GAME_OBJECT (data);
-
- g_free (object->name);
- object->name = NULL;
- g_object_notify (G_OBJECT (object), "name");
- g_object_unref (object);
-}
-
-static void
game_game_init (GTypeInstance *instance, gpointer g_class)
{
GameGame *game = (GameGame *) instance;
@@ -271,8 +260,6 @@ game_game_init (GTypeInstance *instance, gpointer g_class)
game->frame_rate = 25;
game->max_players = 1;
- game->named_objects = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
- unref_and_unset_name);
game->rand = g_rand_new ();
game->flush_requests = g_queue_new ();
@@ -389,7 +376,11 @@ game_game_dispose (GObject *object)
game_game_unset_match (game);
- g_hash_table_destroy (game->named_objects);
+ if (game->default_resources)
+ {
+ g_hash_table_destroy (game->default_resources);
+ game->default_resources = NULL;
+ }
game_container_iter_init (&iter, GAME_CONTAINER (game));
while ((o = game_container_iter_next (&iter))) {
if (o->permanent) {
@@ -1092,22 +1083,12 @@ err:
return NULL;
}
-GameObject *
-game_game_get_object (GameGame *game, const char *name)
-{
- g_return_val_if_fail (GAME_IS_GAME (game), NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- return g_hash_table_lookup (game->named_objects, name);
-}
-
static void
game_game_add_resource (GameGame * game,
const char * name,
GameResource *resource)
{
- g_object_ref (resource);
- g_object_set (resource, "name", name, NULL);
+ g_hash_table_insert (game->default_resources, g_strdup (name), g_object_ref (resource));
}
static void
@@ -1121,6 +1102,12 @@ game_game_load_default_resources (GameGame *game)
GError *error = NULL;
GameResource *resource;
+ if (G_LIKELY (game->default_resources))
+ return;
+
+ game->default_resources = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, g_object_unref);
+
s = g_strconcat (game->name, ".resources", NULL);
data_resource = game_game_load_resource (game, s);
g_free (s);
@@ -1157,18 +1144,21 @@ game_game_load_default_resources (GameGame *game)
GameResource *
game_game_get_resource (GameGame *game, const char *name)
{
- gpointer p;
+ GameResource *resource;
g_return_val_if_fail (GAME_IS_GAME (game), NULL);
g_return_val_if_fail (name != NULL, NULL);
game_game_load_default_resources (game);
- p = g_hash_table_lookup (game->named_objects, name);
- if (GAME_IS_RESOURCE (p))
- return p;
- else
- return NULL;
+ resource = g_hash_table_lookup (game->default_resources, name);
+ if (resource == NULL)
+ {
+ g_critical ("No resources named `%s'", name);
+ return NULL;
+ }
+
+ return resource;
}
GameObject *