Exemplo n.º 1
0
ui_elem* ui_elem_new_type_id(char* name, int type_id) {
  
  if ( dict_contains(ui_elems, name) ) {
    error("UI Manager already contains element called %s!", name);
  }
  
  debug("Creating UI Element %s (%s)", name, type_id_name(type_id));
  
  ui_elem* ui_e = NULL;
  
  for(int i = 0; i < num_ui_elem_handlers; i++) {
    ui_elem_handler ui_hand = ui_elem_handlers[i];
    if (ui_hand.type_id == type_id) {
      ui_e = ui_hand.new_func();
    }
  }
  
  if (ui_e == NULL) {
    error("Don't know how to create ui element %s. No handler for type %s!", name, type_id_name(type_id));
  }
  
  dict_set(ui_elems, name, ui_e);
  
  int* type_ptr = malloc(sizeof(int));
  *type_ptr = type_id;
  dict_set(ui_elem_types, name, type_ptr);
  
  char* name_copy = malloc(strlen(name) + 1);
  strcpy(name_copy, name);
  list_push_back(ui_elem_names, name_copy);
  
  return ui_e;
  
}
Exemplo n.º 2
0
void asset_reload_type_id(type_id type) {

  debug("Reloading Assets of type '%s'...", type_id_name(type));

  fpath ext;

  /* Find the file extension for given type */
  for(int i=0; i < num_asset_handlers; i++) {
    asset_handler handler = asset_handlers[i];
    if (handler.type == type) {
      strcpy(ext.ptr, handler.extension);
      break;
    }
  }

  list* asset_names = list_new();

  for(int i = 0; i < asset_dict->size; i++) {
    struct bucket* b = asset_dict->buckets[i];
    while(b != NULL) {
      fpath bucket_ext;
      SDL_PathFileExtension(bucket_ext.ptr, b->key);

      if (strcmp(bucket_ext.ptr, ext.ptr) == 0) {
        char* new_name = malloc(strlen(b->key)+1);
        strcpy(new_name, b->key);
        list_push_back(asset_names, new_name);
      }

      b = b->next;
    }
  }

  for(int i = 0; i < asset_names->num_items; i++) {
    file_unload(P(list_get(asset_names, i)));
  }

  for(int i = 0; i < asset_names->num_items; i++) {
    /*
    ** Assets can reload their child assets before we do
    ** So it is important we check before loading again
    */
    if (!file_isloaded(P(list_get(asset_names, i)))) {
      file_load(P(list_get(asset_names, i)));
    }
  }

  list_delete_with(asset_names, free);

  asset_cache_flush();
}
Exemplo n.º 3
0
char* ui_elem_typename(ui_elem* e) {
  
  for(int i = 0; i < ui_elem_names->num_items; i++) {
    char* name = list_get(ui_elem_names, i);
    ui_elem* elem = dict_get(ui_elems, name);
    
    if (elem == e) {
      int* type = dict_get(ui_elem_types, name);
      return type_id_name(*type);
    }
  }
  
  error("UI Object at %p not loaded into ui manager. Cannot fetch type name.", e);
  return NULL;
}
Exemplo n.º 4
0
void ui_elem_delete(char* name) {

  int* type_ptr = dict_get(ui_elem_types, name);
  int type_id = *type_ptr;

  for(int i = 0; i < num_ui_elem_handlers; i++) {
    ui_elem_handler ui_hand = ui_elem_handlers[i];
    if (ui_hand.type_id == type_id) {
      dict_remove_with(ui_elems, name, ui_hand.del_func);
      break;
    }
  }
  
  if (ui_elem_exists(name)) {
    error("Don't know how to delete UI element %s. No handler for type %s!", name, type_id_name(type_id));
  }

}
Exemplo n.º 5
0
char* asset_ptr_typename(asset* a) {
  char* path = dict_find(asset_dict, a);
  if (path == NULL) {
    error("Asset dict doesn't contain asset pointer %p", a);
    return NULL;
  }

  fpath ext;
  SDL_PathFileExtension(ext.ptr, path);

  for(int i=0; i < num_asset_handlers; i++) {
    asset_handler handler = asset_handlers[i];
    if (strcmp(ext.ptr, handler.extension) == 0) {
      return type_id_name(handler.type);
    }
  }

  return NULL;
}
Exemplo n.º 6
0
void ui_finish() {

  for(int i = 0; i < num_ui_events; i++) {
    free(ui_events[i].name);
  }

  for(int i = 0; i < ui_elem_names->num_items; i++) {
    char* name = list_get(ui_elem_names, i);
    int* type_id = dict_get(ui_elem_types, name);
    debug("Deleting UI Element %s (%s)", name, type_id_name(*type_id));
    ui_elem_delete(name);
  }
  
  list_delete_with(ui_elem_names, free);
  
  dict_delete(ui_elems);
  
  dict_map(ui_elem_types, free);
  dict_delete(ui_elem_types);

}
Exemplo n.º 7
0
void ui_handler_cast(int type_id, void* ui_elem_new_func(), void ui_elem_del_func(void* ui_elem), void ui_elem_update_func(void* ui_elem), void ui_elem_render_func(void* ui_elem)) {
  
  if (num_ui_elem_handlers >= MAX_UI_ELEM_HANDLERS) {
    warning("Max number of ui element handlers reached. Handler for type %s not added.", type_id_name(type_id));
    return;
  }
  
  ui_elem_handler ui_hand;
  ui_hand.type_id = type_id;
  ui_hand.new_func = ui_elem_new_func;
  ui_hand.del_func = ui_elem_del_func;
  ui_hand.update_func = ui_elem_update_func;
  ui_hand.render_func = ui_elem_render_func;
  
  ui_elem_handlers[num_ui_elem_handlers] = ui_hand;
  num_ui_elem_handlers++; 
  
}
Exemplo n.º 8
0
ui_elem* ui_elem_get_as_type_id(char* name, int type_id) {

  if ( !ui_elem_exists(name) ) {
    error("UI element %s does not exist!", name);
  }
  
  int* ui_elem_type = dict_get(ui_elem_types, name);
  
  if (*ui_elem_type != type_id) {
    error("UI element %s was created/added as a %s, but you requested it as a %s!", name, type_id_name(*ui_elem_type), type_id_name(type_id));
  }
  
  return dict_get(ui_elems, name);

}