コード例 #1
0
session_state session_service_destroy_session(session_service *service,\
        jnx_guid *g) {
    JNXCHECK(service);
    session_state e = SESSION_STATE_NOT_FOUND;
    jnx_node *h = service->session_list->head,
              *r = service->session_list->head;
    jnx_list *cl = jnx_list_create();
    session *retrieved_session = NULL;
    while(h) {
        session *s = h->_data;
        if(jnx_guid_compare(g,&s->session_guid) == JNX_GUID_STATE_SUCCESS) {
            retrieved_session = s;
            e = SESSION_STATE_OKAY;
        } else {
            jnx_list_add_ts(cl,s);
        }
        h = h->next_node;
    }
    service->session_list->head = r;
    jnx_list_destroy(&service->session_list);
    if(cl) {
        destroy_session(retrieved_session);
    }
    service->session_list = cl;
    return e;
}
コード例 #2
0
void session_service_destroy(session_service **service) {
    if((*service)->session_list->counter) {
        jnx_list *sessions_list;
        JNXCHECK(session_service_fetch_all_sessions(*service,&sessions_list) ==
                 SESSION_STATE_OKAY);
        jnx_node *h = sessions_list->head,
                  *r = sessions_list->head;
        while(h) {
            session *s = h->_data;
            session_service_destroy_session(*service,&s->session_guid);
            h = h->next_node;
        }
        h = r;
        jnx_list_destroy(&sessions_list);
    }
    jnx_list *s = (*service)->session_list;
    jnx_list_destroy(&s);
    free(*service);
    *service = NULL;
}
コード例 #3
0
ファイル: cartographer.c プロジェクト: AlexsJones/gridfire_c
void cartographer_clear(void)
{
  if(object_list == NULL) return;
  jnx_node *head = object_list->head;
  while(head)
  {
    game_object *currentobj = head->_data;
    free(currentobj->sprite);
    free(currentobj);
    head = head->next_node;
  }
  jnx_list_destroy(&object_list);
  object_list = NULL;
}
コード例 #4
0
ファイル: test_jnxlist.c プロジェクト: AlexsJones/jnxlibc
static void test_data_removal() {
  JNXLOG(LDEBUG,"- test_data_removal");
  char *test_string = "AABBCC";
  jnx_list *list = jnx_list_create();
  int count = 10;
  int x;
  for(x = 0; x < count; ++x) {
    char *dynamic_string = malloc(strlen(test_string));
    jnx_list_add(list,dynamic_string);
  }
  char *ret;
  while((ret = jnx_list_remove(&list)) != NULL) {
    free(ret);
  }
  jnx_list_destroy(&list);
  JNXCHECK(list == NULL);
  JNXLOG(LDEBUG,"OK");
}
コード例 #5
0
ファイル: test_jnxlist.c プロジェクト: AlexsJones/jnxlibc
static void test_list_index() {
  JNXLOG(LDEBUG,"- test_list_sequence");
  jnx_list *j = jnx_list_create();
  int count = 6;
  char *ar[] = { "A", "B", "C", "D", "E", "F" };
  int y;
  for(y = 0; y < count; ++y) {
    jnx_list_add(j,ar[y]);
  }
  int x;
  for(x = count - 1; x >= 0; x--) {
    char *current = jnx_list_remove(&j);
    JNXCHECK(strcmp(current,ar[x]) == 0);
  }
  JNXLOG(LDEBUG,"OK");
  jnx_list_destroy(&j);
  JNXCHECK(j == NULL);
}
コード例 #6
0
ファイル: test_jnxlist.c プロジェクト: AlexsJones/jnxlibc
static void test_list_tail() {
  jnx_list *l = jnx_list_create();

  int count = 3;
  char *ar[] = { "A", "B", "C" };
  int x;
  for(x = 0; x < count; ++x) {
    jnx_list_add(l,ar[x]);
  }
  int c=count;
  while(l->tail != NULL) {

    JNXCHECK(strcmp((char*)l->tail->_data,ar[c-1]) == 0);
    --c;
    l->tail = l->tail->prev_node;
  }

  jnx_list_destroy(&l);
}
コード例 #7
0
ファイル: test_jnxlist.c プロジェクト: AlexsJones/jnxlibc
static void test_list_creation() {
  JNXLOG(LDEBUG,"- test_list_creation");
  jnx_list *secondlist = jnx_list_create();
  JNXCHECK(secondlist != NULL);
  JNXLOG(LDEBUG,"OK");
  struct foo *f = malloc(sizeof(foo));
  f->number = 10;
  JNXLOG(LDEBUG,"- test_list_insertion");
  jnx_list_add(secondlist,(void*)f);
  JNXLOG(LDEBUG,"OK");
  JNXLOG(LDEBUG,"- test_list_removal");
  struct foo *output = (struct foo*)jnx_list_remove(&secondlist);
  JNXCHECK(output->number == 10);
  free(output);
  JNXLOG(LDEBUG,"OK");
  JNXLOG(LDEBUG,"- test_list_deletion");
  jnx_list_destroy(&secondlist);
  JNXLOG(LDEBUG,"OK");
}
コード例 #8
0
ファイル: game.c プロジェクト: AlexsJones/gridfire_c
void *game_load(void *args)
{
  char *configuration_path = GAMECONFIGURATION;
  loading_flag = 0;
  JNX_LOG(NULL,"Starting game_load\n");	
  /*-----------------------------------------------------------------------------
   *  Perform object loading
   *-----------------------------------------------------------------------------*/
  jnx_list *configuration_list = config_parser_load_configuration(configuration_path);
  jnx_node *head = configuration_list->head;

  while(head)
  {
    game_object *obj = (game_object*)head->_data;
    /*-----------------------------------------------------------------------------
     *  Setup a pointer to player
     *-----------------------------------------------------------------------------*/
    if(strcmp(obj->object_type,"player") == 0)
    {
      player = obj;
    }	
    cartographer_add(obj);
    head = head->next_node;
  }
  jnx_list_destroy(&configuration_list);
  head = NULL;
  if(player == NULL)
  {
    JNX_LOG(NULL,"Could not find the player from the loaded configuration file!\n Cannot have a game without a player\n");
    exit(0);
  }
  /*-----------------------------------------------------------------------------
   *  Start results
   *-----------------------------------------------------------------------------*/

  JNX_LOG(NULL,"Done\n");
  loading_flag = 1;
}
コード例 #9
0
ファイル: jnx_hash.c プロジェクト: AlexsJones/jnxlibc
void jnx_hash_destroy(jnx_hashmap** hash) {
  jnx_hashmap *hashmap = *hash;
  JNXCHECK(hashmap);
  jnx_int32 len = hashmap->size;
  jnx_int32 count;

  for(count = 0; count < len; ++count) {
    jnx_hash_element *current_element = &hashmap->data[count];

    if(current_element->used) {
      jnx_list *current_bucket = current_element->bucket;
      while(current_bucket->head) {
        jnx_hash_bucket_el *current_element = current_bucket->head->_data;
        free(current_element->origin_key);
        free(current_element);
        current_bucket->head = current_bucket->head->next_node;
      }
      jnx_list_destroy(&current_bucket);
    }
  }
  jnx_thread_mutex_destroy(&hashmap->internal_lock);
  free(hashmap);
  *hash = NULL;
}
コード例 #10
0
ファイル: game.c プロジェクト: AlexsJones/gridfire_c
void game_run()
{
  JNX_LOG(NULL,"Starting run loop\n");
  sfEvent current_event;
  sfTime time;
  float current_time;
  while(sfRenderWindow_isOpen(main_window))
  {
    switch(current_game_state)
    {
      case COMPLETE:
        sfRenderWindow_clear(main_window,clear_color);	
        sfRenderWindow_pollEvent(main_window,&current_event);
        switch(current_event.key.code)
        {
          case sfKeyReturn:
            sfRenderWindow_close(main_window);
        }
        sfVector2f completepos = sfView_getCenter(main_view);
        int string_length = strlen(sfText_getString(game_finish_text));
        int complete_offset = sfText_getCharacterSize(game_finish_text) * string_length;
        completepos.x = completepos.x - (complete_offset / 2);
        sfText_setPosition(game_finish_text,completepos);

        sfRenderWindow_drawText(main_window,game_finish_text,NULL);
        sfRenderWindow_display(main_window);	
        break;
      case NEXT_LEVEL:
        sfRenderWindow_clear(main_window,clear_color);	
        sfRenderWindow_pollEvent(main_window,&current_event);
        switch(current_event.key.code)
        {
          case sfKeyEscape:
            sfRenderWindow_close(main_window);
            break;
          case sfKeyReturn:
            game_setup_next_level();
            break;
        }
        sfVector2f nlpos = sfView_getCenter(main_view);
        int nltext_offset = strlen(sfText_getString(next_level_text));
        nltext_offset = nltext_offset * sfText_getCharacterSize(next_level_text);
        sfVector2f nlnewpos;
        nlnewpos.x	= nlpos.x - (nltext_offset / 2);
        nlnewpos.y = nlpos.y;
        sfText_setPosition(next_level_text,nlnewpos);
        int nlbt_offset = strlen(sfText_getString(next_level_button_text));
        nlbt_offset = nlbt_offset * sfText_getCharacterSize(next_level_button_text);
        nlnewpos.x = nlpos.x - (nlbt_offset /2);
        nlnewpos.y = nlnewpos.y + 50;
        sfText_setPosition(next_level_button_text,nlnewpos);
        switch(text_yellow)
        {
          case 0:
            sfText_setColor(next_level_button_text,sfColor_fromRGB(255,255,0));
            text_yellow = 1;
            break;
          case 1:
            sfText_setColor(next_level_button_text,sfColor_fromRGB(255,0,0));
            text_yellow = 0;
            break;
        }
        sfRenderWindow_drawText(main_window,next_level_text,NULL);
        sfRenderWindow_drawText(main_window,next_level_button_text,NULL);
        sfRenderWindow_display(main_window);	
        break;
      case RUNNING:
        time = sfClock_getElapsedTime(_clock);
        current_time = sfTime_asSeconds(time);
        sfRenderWindow_pollEvent(main_window,&current_event);
        /*-----------------------------------------------------------------------------
         *  Slowly zoom in as we start the level
         *-----------------------------------------------------------------------------*/
        /*  	if(sfView_getSize(main_view).x > videomode.width)
                {
                sfView_zoom(main_view,0.99f);
                }
                */
        switch(current_event.key.code)
        {
          case sfKeyEscape:
            sfRenderWindow_close(main_window);
            break;
        }
        if(score_max_achieved() == 1)
        {
          if(current_level < max_levels)
          {
            current_game_state = NEXT_LEVEL;
          }else if(current_level == max_levels)
          {
            current_game_state = COMPLETE;
          }
          score_reset();
        }				
        sfRenderWindow_clear(main_window,clear_color);	
        /*-----------------------------------------------------------------------------
         *  Set the current view
         *-----------------------------------------------------------------------------*/
        if(player != NULL){
          sfView_setCenter(main_view,sfSprite_getPosition(player->sprite));
          sfRenderWindow_setView(main_window,main_view);
        }
        /*-----------------------------------------------------------------------------
         *  Draw starfield
         *-----------------------------------------------------------------------------*/
        if(player != NULL){
          starfield_draw(main_view,main_window,sfSprite_getPosition(player->sprite));	
        }
        /*-----------------------------------------------------------------------------
         *  Draw objects
         *-----------------------------------------------------------------------------*/
        jnx_list *draw_queue = cartographer_get_at(main_view);
        if(draw_queue != NULL){
          jnx_node *current_draw_pos = draw_queue->head; 
          /*-----------------------------------------------------------------------------
           *  Draw weapon fire
           *-----------------------------------------------------------------------------*/
          weapon_draw(main_window,main_view,&draw_queue);
          while(current_draw_pos)
          {
            game_object *obj = (game_object*)current_draw_pos->_data;
            if(strcmp(obj->object_type,"player") == 0)
            {
              game_object_update(obj,current_event,main_view);				
            }
            else
            {
              /*-----------------------------------------------------------------------------
               *  Update AI objects
               *-----------------------------------------------------------------------------*/
              game_ai_update(obj,player);	
            }
#ifdef BOUNDING_BOX
            sfRectangleShape *bounding = game_object_get_boundingRect(obj);
            sfRenderWindow_drawRectangleShape(main_window,bounding,NULL);
            sfRectangleShape_destroy(bounding);
#endif
            sfRenderWindow_drawSprite(main_window,obj->sprite,NULL);
            current_draw_pos = current_draw_pos->next_node;
          }
          cartographer_update();
        }
        /*-----------------------------------------------------------------------------
         *  Draw ingame ui
         *-----------------------------------------------------------------------------*/
        game_ui_update(main_window,main_view,player,draw_queue);
        game_ui_draw(main_window,draw_queue);
        sfRenderWindow_display(main_window);
        jnx_list_destroy(&draw_queue);
        break;
      case GAMEOVER:
        sfRenderWindow_clear(main_window,clear_color);	
        sfRenderWindow_pollEvent(main_window,&current_event);
        switch(current_event.key.code)
        {
          case sfKeyEscape:
            sfRenderWindow_close(main_window);
            break;
        }
        sfVector2f pos = sfView_getCenter(main_view);
        int text_offset = strlen(sfText_getString(game_over_text));
        text_offset = text_offset * sfText_getCharacterSize(game_over_text);
        sfVector2f newpos;
        newpos.x	= pos.x - (text_offset / 2);
        newpos.y = pos.y;
        sfText_setPosition(game_over_text,newpos);
        sfRenderWindow_drawText(main_window,game_over_text,NULL);
        sfRenderWindow_display(main_window);	
        break;
      case GAMESTART:
        sfRenderWindow_clear(main_window,clear_color);	
        sfRenderWindow_pollEvent(main_window,&current_event);
        int game_bound = atoi(jnx_hash_get(config,"GAMEBOUNDS"));
        switch(current_event.key.code)
        {
          case sfKeyEscape:
            sfRenderWindow_close(main_window);
            break;
          case sfKeySpace:

            play_music(INGAMEMUSIC);
            current_game_state = LOADING;
            break;
        }
        sfVector2f pos_start = sfView_getCenter(main_view);
        int text_offset_start = strlen(sfText_getString(game_start_text));
        text_offset_start = text_offset_start * sfText_getCharacterSize(game_start_text);
        sfVector2f newpos_start;
        newpos_start.x	= pos_start.x + (text_offset_start /2 );
        newpos_start.y = pos_start.y - (text_offset_start /2);
        sfText_setPosition(game_start_text,newpos_start);

        sfVector2f button_start;
        button_start.x = newpos_start.x;
        button_start.y = newpos_start.y + 50;
        sfText_setPosition(game_start_button_text,button_start);
        button_start.y = button_start.y + 50;
        sfText_setPosition(game_author_text,button_start);
        switch(text_yellow)
        {
          case 0:
            sfText_setColor(game_start_button_text,sfColor_fromRGB(255,255,0));
            sfText_setColor(game_start_text,sfColor_fromRGB(255,255,0));
            text_yellow = 1;
            break;
          case 1:
            sfText_setColor(game_start_button_text,sfColor_fromRGB(255,0,0));
            sfText_setColor(game_start_text,sfColor_fromRGB(255,0,0));
            text_yellow = 0;
            break;
        }
        jnx_list *menu_starfield = starfield_menu_create(main_view);
        jnx_node *head = menu_starfield->head;
        while(menu_starfield->head)
        {
          sfSprite *sprite = menu_starfield->head->_data;
          sfVector2f pos = sfSprite_getPosition(sprite);
          pos.y = pos.y +5;
          if(pos.y > sfView_getSize(main_view).y)
          {
            pos.y = 0;
          }
          sfSprite_setPosition(sprite,pos);
          sfRenderWindow_drawSprite(main_window,sprite,NULL);
          menu_starfield->head = menu_starfield->head->next_node;
        }
        menu_starfield->head = head;
        sfRenderWindow_drawText(main_window,game_start_button_text,NULL);
        sfRenderWindow_drawText(main_window,game_start_text,NULL);
        sfRenderWindow_drawText(main_window,game_author_text,NULL);
        sfRenderWindow_display(main_window);	
        break;
      case LOADING:
        sfRenderWindow_clear(main_window,clear_color);
        sfRenderWindow_setView(main_window,main_view);
        if(loading_started == 0)
        {
          //spawn thread
          pthread_t load_worker;
          pthread_create(&load_worker,NULL,game_load,NULL);
          loading_started = 1;
        }
        if(loading_flag == 1)
        {
          //break and start game
          loading_started = 0;
          loading_flag = 0;
          sfVector2f viewpos;
          viewpos.x = game_bound /2;
          viewpos.y = game_bound /2;
          sfView_setCenter(main_view,viewpos);
          sfVector2f size = sfView_getSize(main_view);
          size.x = size.x *2;
          size.y = size.y *2;
          /*-----------------------------------------------------------------------------
           *  Set the zoom a bit further out so on level start we can zoom in
           *-----------------------------------------------------------------------------*/
          //	sfView_setSize(main_view,size);
          current_game_state = RUNNING;
          printf("Loading done\n");	
          break;
        }
        sfVector2f loadingpos = sfView_getCenter(main_view); 
        int loading_offset = strlen(sfText_getString(game_loading_text));
        loading_offset = loading_offset * sfText_getCharacterSize(game_loading_text);
        loadingpos.x = loadingpos.x - (loading_offset /2);
        loadingpos.y = loadingpos.y - (loading_offset /2);
        switch(text_yellow)
        {
          case 0:
            sfText_setColor(game_loading_text,sfColor_fromRGB(255,255,0));
            text_yellow = 1;
            break;
          case 1:
            sfText_setColor(game_loading_text,sfColor_fromRGB(255,0,0));
            text_yellow = 0;
            break;
        }
        sfText_setPosition(game_loading_text,loadingpos);
        sfRenderWindow_drawText(main_window,game_loading_text,NULL);
        sfRenderWindow_display(main_window);
        break;
    }
  }
}
コード例 #11
0
ファイル: jnx_hash.c プロジェクト: AlexsJones/jnxlibc
void* jnx_hash_delete_value(jnx_hashmap *hashmap,jnx_char *key) {
  JNXCHECK(hashmap);
  JNXCHECK(key);
  jnx_int32 index = jnx_hash_string(key, hashmap->size);
  jnx_node *head = hashmap->data[index].bucket->head;
  jnx_node *rewind = head;
  if(head == NULL) {
    return NULL;
  }
  if(head->next_node == NULL) {
    jnx_hash_bucket_el *element = head->_data;
    void *data = (void*)element->origin_value;
    free(element->origin_key);
    free(element);
    jnx_list_destroy(&hashmap->data[index].bucket);
    hashmap->data[index].bucket = NULL;
    hashmap->data[index].used = 0;
    hashmap->data[index].bucket_len = 0;
    return data;
  }
  jnx_node *previous_node = NULL;
  while(head) {
    jnx_hash_bucket_el *bucketel = head->_data;
    if(strcmp(bucketel->origin_key,key) == 0) {
      if(previous_node == NULL) {
        //Start node in list
        void *data = (void*)bucketel->origin_value;
        free(bucketel->origin_key);
        free(bucketel);
        //lets set the hashmap to pojnx_int32 to the next element of this list
        hashmap->data[index].bucket->head = head->next_node;
        ///free this node in the list
        free(head);
        hashmap->data[index].bucket_len--;
        return data;
      } else {
        if(head->next_node == NULL) {
          ///Last node in list
          ///we have a previous node which will become the last node in the list now
          void *data = (void*)bucketel->origin_value;
          free(bucketel->origin_key);
          free(bucketel);
          free(head);
          previous_node->next_node = NULL;
          head = rewind;
          hashmap->data[index].bucket_len--;
          return data;
        } else {
          //Middle node in list
          //set need to set the previous node, and the next node to link to each other
          void *data = (void*)bucketel->origin_value;
          free(bucketel->origin_key);
          free(bucketel);
          //set the previous node to jump to the next
          jnx_node *next_node = head->next_node;
          free(head);
          previous_node->next_node = next_node;
          hashmap->data[index].bucket_len--;
          return data;
        }

      }

    }
    previous_node = head;
    head = head->next_node;
  }
  return NULL;
}