void createStaticUI(void) { staticUI[0] = sfSprite_create(); sfSprite_setTexture(staticUI[0], textureArray[1], sfTrue); sfSprite_setTextureRect(staticUI[0], (sfIntRect){0,0, 960, 14}); staticUI[1] = sfSprite_create(); sfSprite_setTexture(staticUI[1], textureArray[1], sfTrue); sfSprite_setTextureRect(staticUI[1], (sfIntRect){0,14, 960, 14}); sfSprite_setPosition(staticUI[1], (sfVector2f){0, WINDOW_Y-BORDER_OFFSET}); staticUI[2] = sfSprite_create(); sfSprite_setTexture(staticUI[2], textureArray[1], sfTrue); sfSprite_setTextureRect(staticUI[2], (sfIntRect){0,28, 540, 14}); sfSprite_setPosition(staticUI[2], (sfVector2f){BORDER_OFFSET, 0}); sfSprite_setRotation(staticUI[2], 90); staticUI[3] = sfSprite_create(); sfSprite_setTexture(staticUI[3], textureArray[1], sfTrue); sfSprite_setTextureRect(staticUI[3], (sfIntRect){0,42, 540, 14}); sfSprite_setPosition(staticUI[3], (sfVector2f){WINDOW_X, 0}); sfSprite_setRotation(staticUI[3], 90); staticUI[4] = sfSprite_create(); sfSprite_setTexture(staticUI[4], textureArray[1], sfTrue); sfSprite_setTextureRect(staticUI[4], (sfIntRect){0,56, 540, 14}); sfSprite_setPosition(staticUI[4], (sfVector2f){PANEL_ZERO_X+BORDER_OFFSET, 0}); sfSprite_setRotation(staticUI[4], 90); }
CAMLprim value caml_sfSprite_setTexture(value sprite, value texture, value resetRect) { sfSprite_setTexture( SfSprite_val(sprite), SfTexture_val(texture), Bool_val(resetRect)); return Val_unit; }
sfSprite *radar_blip_from_object(game_object *obj) { if(!obj->sprite) { return NULL; } sfSprite *objsprite = sfSprite_create(); sfVector2u texture_origin; if(strcmp(obj->object_type,"player") == 0) { sfSprite_setTexture(objsprite,radar_blip_texture_player,1); texture_origin = sfTexture_getSize(radar_blip_texture_player); }else if(strcmp(obj->object_type,"enemy") == 0) { sfSprite_setTexture(objsprite,radar_blip_texture,1); texture_origin = sfTexture_getSize(radar_blip_texture); } float _x = (float)texture_origin.x; float _y = (float)texture_origin.y; sfVector2f new_org; new_org.x = _x /2 ; new_org.y = _y /2 ; sfSprite_setOrigin(objsprite,new_org); sfSprite_setPosition(objsprite,radar_position_translation(sfSprite_getPosition(obj->sprite))); return objsprite; }
int main(int argc, char **argv) { int window_width = 640; int window_height = 480; //Create the render window sfRenderWindow *window = NULL; if(!(window = sfRenderWindow_create((sfVideoMode) {window_width, window_height, 32}, "Mettle", sfClose|sfResize, NULL))) { printf("Unable to create RenderWindow\n"); exit(EXIT_FAILURE); } //Create a queue of inputs actionQueue *actions = actionQueue_create(); playerAction action = actionQueue_next(actions); //Load the hero sprite sfTexture *hero_texture = NULL; static const char *hero_texture_location = "data/img/leatherarmor.png"; if(!(hero_texture = sfTexture_createFromFile(hero_texture_location, NULL))) { printf("Unable to load %s\n", hero_texture_location); exit(EXIT_FAILURE); } entity *hero = entity_createPlayer((sfVector2i) {0, 0}, &action, hero_texture); //Create the "map" sfTexture *map_texture = NULL; static const char *map_texture_location = "data/img/tilesheet.png"; if(!(map_texture = sfTexture_createFromFile(map_texture_location, NULL))) { printf("Unable to load %s\n", map_texture_location); exit(EXIT_FAILURE); } int map_width = (int) ceilf((float) (window_width / TILE_SIZE)); int map_height = (int) ceilf((float) (window_height / TILE_SIZE)); //Allocate space sfSprite *tile = NULL; if(!(tile = sfSprite_create())) { printf("Unable to create sprite\n"); exit(EXIT_FAILURE); } //Initialize the tile sfSprite_setTexture(tile, map_texture, sfFalse); sfSprite_setTextureRect(tile, XY_TO_RECT(4, 2, TILE_SIZE, TILE_SIZE)); //Event holder sfEvent event; //Window active variable sfBool window_active = sfFalse; //Main loop while(sfRenderWindow_isOpen(window)) { //Process events while(sfRenderWindow_pollEvent(window, &event)) { switch(event.type) { //Handle keyboard input case(sfEvtKeyPressed): case(sfEvtKeyReleased): { playerAction action = handleKey(&event.key); if(action) { actionQueue_add(actions, action); } break; } case(sfEvtClosed): sfRenderWindow_close(window); break; case(sfEvtGainedFocus): window_active = sfTrue; break; case(sfEvtLostFocus): window_active = sfFalse; default: break; } } //While there are still actions to do while(action = actionQueue_next(actions)) { hero->ai->think(hero->ai); } //Clear the screen and render sfRenderWindow_clear(window, sfMagenta); //Draw the map int x,y; for(x = 0; x < map_width; x++) { for(y = 0; y < map_height; y++) { sfSprite_setPosition(tile, (sfVector2f) {x * TILE_SIZE, y * TILE_SIZE}); sfRenderWindow_drawSprite(window, tile, NULL); } } //Draw the hero displayComp_draw(hero->display, window); sfRenderWindow_display(window); #ifdef DEBUG sfVector2f pos = sfSprite_getPosition(hero->display->sprite); printf("\rPlayer at %d,%d (%f.0px, %f.0px)", hero->x, hero->y, pos.x, pos.y); fflush(stdout); #endif } //Cleanup sfRenderWindow_destroy(window); return EXIT_SUCCESS; }
void render_main(void) { // Create the main window and the main view window = sfRenderWindow_create( (sfVideoMode){DEFAULT_WIN_WIDTH, DEFAULT_WIN_HEIGHT, 32}, "Territory", sfResize | sfClose, NULL ); if (!window) return; mainView = sfView_createFromRect( (sfFloatRect){0, 0, DEFAULT_WIN_WIDTH, DEFAULT_WIN_HEIGHT}); sfView_zoom(mainView, 0.75); /*** ***/ // Create images sfImage* oceanImage = sfImage_createFromFile("res/ocean.png"); if (!oceanImage) return; sfImage* grassImage = sfImage_createFromFile("res/grass.png"); if (!grassImage) return; const int mapWidth = 40; const int mapHeight = 20; sfImage* mapImage = sfImage_create(mapWidth * 16, mapHeight * 16); worldmap* map = newMap(mapWidth, mapHeight); for (int y = 0; y < mapHeight; y++) { for (int x = 0; x < mapWidth; x++) { sfImage_copyImage( mapImage, map->tiles[x][y] ? grassImage : oceanImage, x * 16, y * 16, (sfIntRect){0, 0, 16, 16}, sfTrue); } } sfSprite* mapSprite = sfSprite_create(); sfSprite_setTexture( mapSprite, sfTexture_createFromImage(mapImage, NULL), sfTrue); /*** ***/ sfVector2u winDimensions; render_closeFlag = false; eventAvailable = sfFalse; while (sfRenderWindow_isOpen(window)) { eventAvailable = sfRenderWindow_pollEvent(window, &render_event); if (render_closeFlag) { render_closeFlag = false; sfRenderWindow_close(window); sfRenderWindow_destroy(window); return; } if (render_rescaleFlag) { render_rescaleFlag = false; winDimensions = sfRenderWindow_getSize(window); if (winDimensions.x < DEFAULT_WIN_WIDTH) { winDimensions.x = DEFAULT_WIN_WIDTH; sfRenderWindow_setSize(window, winDimensions); } if (winDimensions.y < DEFAULT_WIN_HEIGHT) { winDimensions.y = DEFAULT_WIN_HEIGHT; sfRenderWindow_setSize(window, winDimensions); } sfView_setSize( mainView, (sfVector2f){render_event.size.width, render_event.size.height} ); sfView_zoom(mainView, 0.75); } sfRenderWindow_clear(window, sfBlue); sfRenderWindow_setView(window, mainView); sfRenderWindow_drawSprite(window, mapSprite, NULL); sfRenderWindow_display(window); Sleep(10); } }