Exemple #1
0
void Window::scaleRenderer()
{
	if (this->_windowMode.w <= 0)
	{
		SDL_SetWindowSize(this->_window, 1, this->_windowMode.h);
	}
	if (this->_windowMode.h <= 0)
	{
		SDL_SetWindowSize(this->_window, this->_windowMode.w, 1);
	}


	SDL_RenderSetLogicalSize(this->_renderer,
		this->_game->settings.getInt("RenderWidth"),
		this->_game->settings.getInt("RenderHeight"));

	// scale the renderer to the smallest window w/h, and to fill up the remaining empty space (assuming the aspect ratio wasn't conserved), increase the rendering resolution of that axis till it fits
	// so the minimum scaled side retains its rendering resolution from settings.xml, but the other side increases its resolution to fit the window
	
	int curWindW;
	int curWindH;

	SDL_GetWindowSize(this->_window, &curWindW, &curWindH);
	
	int tempWinDMin = std::min(curWindW, curWindH);

	int curRendW;
	int curRendH;

	SDL_RenderGetLogicalSize(this->_renderer, &curRendW, &curRendH);

	int tempRendMin = std::min(curRendW, curRendH);

	float aspectMin = static_cast<float>(tempWinDMin) / tempRendMin; // scale on both x and y

	float tempWindMax = std::max(curWindW, curWindH);
	//TODO: possible floating point inaccuracies
	curRendW = (static_cast<int>(curRendW * aspectMin) == tempWinDMin) ? curRendW : tempWindMax / aspectMin;
	curRendW = (static_cast<int>(curRendH * aspectMin) == tempWinDMin) ? curRendH : tempWindMax / aspectMin;

	SDL_RenderSetLogicalSize(this->_renderer, curRendW, curRendH);

	// set scale to be uniform on x and y
	SDL_RenderSetScale(this->_renderer, aspectMin, aspectMin);

	//it's scaled up and we want the min renderer side to remain the same, as it's currently already fitted nicely, but the other side? theres now a blank space, lets increase the rendering resolution of the renderer on that axis

	SDL_RenderGetLogicalSize(this->_renderer, &this->_renderMode.w, &this->_renderMode.h);
	SDL_RenderGetScale(this->_renderer, &this->_renderMode.scaleX, &this->_renderMode.scaleY);
}
void GameOverModule_init(void* context) {
	GameOverModule* this = context;

	this->scene = Scene_create(this->engine, "scenes/mainMenu.lua", NULL);

	this->ui = UiNode_create(NULL, NULL);
	SDL_RenderGetLogicalSize(this->engine->renderer, &this->ui->bounds.w, &this->ui->bounds.h);
	UiMenuList* menu = UiMenuList_create(this->ui);

	SDL_Renderer* r = this->engine->renderer;
	char winnerString[128];
	sprintf(winnerString, "%s wins!", this->winnerName);
	UiMenuElement_create(menu, r, "Thanks for playing", NULL, NULL, this);
	UiMenuElement_create(menu, r, winnerString, NULL, NULL, this);
	UiMenuElement_create(menu, r, "Play", NULL, GameOverModule_onStartButton, this);
	//UiMenuElement_create(menu, r, "Options", NULL, NULL, this);
	//UiMenuElement_create(menu, r, "Credits", NULL, NULL, this);
	//UiMenuElement_create(menu, r, "Editor", NULL, GameOverModule_onEditorButton, this);
	UiMenuElement_create(menu, r, "Exit", NULL, GameOverModule_onExitButton, this);
	UiMenuElement_create(menu, r, "Created by Nehmulos", NULL, NULL, this);
	UiMenuElement_create(menu, r, "For LD27", NULL, NULL, this);

	UiNode_moveTo(menu->node,
				this->ui->bounds.w - menu->node->bounds.w - (this->ui->bounds.w/15),
				(this->ui->bounds.h - menu->node->bounds.h) / 2);

	//UiMenuList_layout(menu);

	// create stupid playersprite that
}
Exemple #3
0
const struct size *video_get_logical_size( )
{
	static struct size size;

	SDL_RenderGetLogicalSize( video_renderer, &size.w, &size.h );
	return &size;
}
Exemple #4
0
void
render(SDL_Renderer *renderer)
{
    Uint8 r, g, b;
    int renderW;
    int renderH;

    SDL_RenderGetLogicalSize(renderer, &renderW, &renderH);

    /*  Come up with a random rectangle */
    SDL_Rect rect;
    rect.w = randomInt(64, 128);
    rect.h = randomInt(64, 128);
    rect.x = randomInt(0, renderW);
    rect.y = randomInt(0, renderH);

    /* Come up with a random color */
    r = randomInt(50, 255);
    g = randomInt(50, 255);
    b = randomInt(50, 255);

    /*  Fill the rectangle in the color */
    SDL_SetRenderDrawColor(renderer, r, g, b, 255);
    SDL_RenderFillRect(renderer, &rect);

    /* update screen */
    SDL_RenderPresent(renderer);
}
Exemple #5
0
 const Dimensions<int> Renderer::getLogicalSize() const
 {
     Dimensions<int> ret(-1, -1);
     if(isLoaded())
         SDL_RenderGetLogicalSize(ren, ret.x().getPtr(), ret.y().getPtr());
     return ret;
 }
Exemple #6
0
void MainMenu::RenderFrame(SDL_Renderer *renderer)
{
	int w = 0, h = 0;
	SDL_RenderGetLogicalSize(renderer, &w, &h);
	//m_logo.Draw(renderer, (w - m_logo.GetClipW()) / 2, (h - m_logo.GetClipH()) / 2);
	
	m_startButton.DrawTo(renderer);
	m_optionsButton.DrawTo(renderer);
	m_quitButton.DrawTo(renderer);

	m_textBox.DrawTo(renderer, w - 100, h - 20, -12);
}
Exemple #7
0
int MenuState::init(){
	int w, h;

	SDL_RenderGetLogicalSize(m_game->renderer(), &w, &h);

	m_drawtex = SDL_CreateTexture(m_game->renderer(), SDL_PIXELTYPE_UNKNOWN,
	SDL_TEXTUREACCESS_TARGET, w, h);

	m_camera = SDL_Rect{0,0,w,h};

	init_menuitems(w, h);

	return 0;
}
Exemple #8
0
SDL_Setup::SDL_Setup(const int width, const int height) 
	: SCREEN_WIDTH(width), SCREEN_HEIGHT(height)
{
	e = new SDL_Event();

	if (SDL_Init(SDL_INIT_VIDEO) < 0)
	{
		std::printf("\nUnable to initialize SDL:  %s\n", SDL_GetError());
	}
	else
		if (!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1"))
		{
			std::printf("Warning: Linear texture filtering not enabled!");
		}

	//Create Window
	gWindow = SDL_CreateWindow("Game Prototype", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 
								SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
	if (gWindow == NULL)
	{
		std::printf("Window failed to initialize! SDL Error: %s\n", SDL_GetError());
	}
	else
	{
		//Create renderer
		gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);
		if (gRenderer == NULL)
		{
			printf("Renderer failed to initialize! SDL Error: %s\n", SDL_GetError());
		}
		else
		{
			//Sets resolution for all platforms (letter boxing)
			SDL_RenderGetLogicalSize(gRenderer, &resWidth, &resHeight);

			//Intitialize render color
			SDL_SetRenderDrawColor(gRenderer, 0xFF, 0xFF, 0xFF, 0xFF);

			//Initialize PNG loading 
			int imgFlags = IMG_INIT_PNG;
			if (!(IMG_Init(imgFlags) & imgFlags))
			{
				printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError());
			}
		}
	}
}
Exemple #9
0
MainMenu::MainMenu() {
	ConfigUtility& config = ConfigUtility::GetSingleton();

	//setup the utility objects
	buttonImage.Load(GetRenderer(), config["dir.interface"] + "button_blue.png");
	font = TTF_OpenFont(config["client.font"].c_str(), 12);

	//check that the font loaded
	if (!font) {
		std::ostringstream msg;
		msg << "Failed to load a font file; " << SDL_GetError();
		throw(std::runtime_error(msg.str()));
	}

	//setup the buttons
	startButton.SetBackgroundTexture(GetRenderer(), buttonImage.GetTexture());
	startButton.SetText(GetRenderer(), font, WHITE, "Start");
	optionsButton.SetBackgroundTexture(GetRenderer(), buttonImage.GetTexture());
	optionsButton.SetText(GetRenderer(), font, WHITE, "Options");
	quitButton.SetBackgroundTexture(GetRenderer(), buttonImage.GetTexture());
	quitButton.SetText(GetRenderer(), font, WHITE, "Quit");

	//set the button positions
	startButton.SetX(50);
	startButton.SetY(50 + 20 * 0);
	optionsButton.SetX(50);
	optionsButton.SetY(50 + 20 * 1);
	quitButton.SetX(50);
	quitButton.SetY(50 + 20 * 2);

	//text box
	int h = -1;
	SDL_RenderGetLogicalSize(GetRenderer(), nullptr, &h);

	textBox.SetX(50);
	textBox.SetY(h-100);

	textBox.PushLine(GetRenderer(), font, WHITE, "Thanks for playing!");
	textBox.PushLine(GetRenderer(), font, WHITE, "You can get the latest version at: ");
	textBox.PushLine(GetRenderer(), font, WHITE, "krgamestudios.com"); //TODO: (9) click to open the website/update

	//debug
	//
}
Exemple #10
0
Scene* Scene_create(GameEngine* engine, Scene* lastScene) {
    Scene* this = allocStruct(Scene);

    this->engine = engine;
    SDL_Point screenSize;
    SDL_RenderGetLogicalSize(engine->renderer, &screenSize.x, &screenSize.y);
    this->camera = Camera_create(screenSize.x, screenSize.y);
    this->walkableBounds.x = 0;
    this->walkableBounds.w = 0;
    this->walkableBounds.y = 295 * PHYSICS_SCALE;
    this->walkableBounds.h = 185 * PHYSICS_SCALE;

    this->entities = Vector_Create();
    this->triggers = Vector_Create();
    this->bodies = Vector_Create();
    this->shapes = Vector_Create();

    this->sky = Sky_create(engine->textureCache);

    withSprintf(path, "images/%s/bg.png", anyArgs("red"), {
            SDL_Texture* texture = TextureCache_getForUnconstantPath(engine->textureCache, path);
            this->background = Sprite_create(texture);
        });
Exemple #11
0
void MainMenu_init(void* context) {
    MainMenu* this = context;

    this->scene = Scene_createForPath(this->engine, "scenes/main-menu.scm", NULL);

    this->ui = UiNode_create(NULL, NULL);
    SDL_RenderGetLogicalSize(this->engine->renderer, &this->ui->bounds.w, &this->ui->bounds.h);
    UiMenuList* menu = UiMenuList_create(this->ui);

    SDL_Renderer* r = this->engine->renderer;
    UiMenuElement_create(menu, r, "Play", NULL, MainMenu_onStartButton, this);
    //UiMenuElement_create(menu, r, "Options", NULL, NULL, this);
    //UiMenuElement_create(menu, r, "Credits", NULL, NULL, this);
    //UiMenuElement_create(menu, r, "Editor", NULL, MainMenu_onEditorButton, this);
    UiMenuElement_create(menu, r, "Exit", NULL, MainMenu_onExitButton, this);

    UiNode_moveTo(menu->node,
                this->ui->bounds.w - menu->node->bounds.w - (this->ui->bounds.w/15),
                (this->ui->bounds.h - menu->node->bounds.h) / 2);

    //UiMenuList_layout(menu);

    // create stupid playersprite that
}
Exemple #12
0
int Window::getLogicalHeight() const noexcept
{
    int h;
    SDL_RenderGetLogicalSize( m_wimpl->renderer, nullptr, &h );
    return h == 0 ? getHeight() : h;
}
Exemple #13
0
int Window::getLogicalWidth() const noexcept
{
    int w;
    SDL_RenderGetLogicalSize( m_wimpl->renderer, &w, nullptr );
    return w == 0 ? getWidth() : w;
}
Exemple #14
0
static void SDL_handle_events(void)
{
  SDL_Event event;

  assert(pthread_equal(pthread_self(), dosemu_pthread_self));
  if (render_is_updating())
    return;
  while (SDL_PollEvent(&event)) {
    switch (event.type) {

    case SDL_WINDOWEVENT:
      switch (event.window.event) {
      case SDL_WINDOWEVENT_FOCUS_GAINED:
	v_printf("SDL: focus in\n");
	render_gain_focus();
	if (config.X_background_pause && !dosemu_user_froze)
	  unfreeze_dosemu();
	break;
      case SDL_WINDOWEVENT_FOCUS_LOST:
	v_printf("SDL: focus out\n");
	render_lose_focus();
	if (config.X_background_pause && !dosemu_user_froze)
	  freeze_dosemu();
	break;
      case SDL_WINDOWEVENT_RESIZED:
	/* very strange things happen: if renderer size was explicitly
	 * set, SDL reports mouse coords relative to that. Otherwise
	 * it reports mouse coords relative to the window. */
	SDL_RenderGetLogicalSize(renderer, &m_x_res, &m_y_res);
	if (!m_x_res || !m_y_res) {
	  m_x_res = event.window.data1;
	  m_y_res = event.window.data2;
	}
	update_mouse_coords();
	SDL_redraw();
	break;
      case SDL_WINDOWEVENT_EXPOSED:
	SDL_redraw();
	break;
      case SDL_WINDOWEVENT_ENTER:
        /* ignore fake enter events */
        if (config.X_fullscreen)
          break;
        mouse_drag_to_corner(m_x_res, m_y_res);
        break;
      }
      break;

    case SDL_KEYDOWN:
      {
	if (wait_kup)
	  break;
	SDL_Keysym keysym = event.key.keysym;
	if ((keysym.mod & KMOD_CTRL) && (keysym.mod & KMOD_ALT)) {
	  if (keysym.sym == SDLK_HOME || keysym.sym == SDLK_k) {
	    force_grab = 0;
	    toggle_grab(keysym.sym == SDLK_k);
	    break;
	  } else if (keysym.sym == SDLK_f) {
	    toggle_fullscreen_mode();
	    /* some versions of SDL re-send the keydown events after the
	     * full-screen switch. We need to filter them out to prevent
	     * the infinite switching loop. */
	    wait_kup = 1;
	    break;
	  }
	}
	if (vga.mode_class == TEXT &&
	    (keysym.sym == SDLK_LSHIFT || keysym.sym == SDLK_RSHIFT)) {
	  copypaste = 1;
	  /* enable cursor for copy/paste */
	  if (!m_cursor_visible)
	    SDL_ShowCursor(SDL_ENABLE);
	}
      }
#if CONFIG_SDL_SELECTION
      clear_if_in_selection();
#endif
#ifdef X_SUPPORT
#if HAVE_XKB
      if (x11_display && config.X_keycode)
	SDL_process_key_xkb(x11_display, event.key);
      else
#endif
#endif
	SDL_process_key(event.key);
      break;
    case SDL_KEYUP: {
      SDL_Keysym keysym = event.key.keysym;
      wait_kup = 0;
      if (copypaste && (keysym.sym == SDLK_LSHIFT ||
              keysym.sym == SDLK_RSHIFT)) {
        copypaste = 0;
        if (!m_cursor_visible)
	    SDL_ShowCursor(SDL_DISABLE);
      }
#ifdef X_SUPPORT
#if HAVE_XKB
      if (x11_display && config.X_keycode)
	SDL_process_key_xkb(x11_display, event.key);
      else
#endif
#endif
	SDL_process_key(event.key);
      break;
    }

    case SDL_MOUSEBUTTONDOWN:
      {
	int buttons = SDL_GetMouseState(NULL, NULL);
#if CONFIG_SDL_SELECTION
	if (window_has_focus() && !shift_pressed()) {
	  clear_selection_data();
	} else if (vga.mode_class == TEXT && !grab_active) {
	  if (event.button.button == SDL_BUTTON_LEFT)
	    start_selection(x_to_col(event.button.x, m_x_res),
			    y_to_row(event.button.y, m_y_res));
	  else if (event.button.button == SDL_BUTTON_RIGHT)
	    start_extend_selection(x_to_col(event.button.x, m_x_res),
				   y_to_row(event.button.y, m_y_res));
	  else if (event.button.button == SDL_BUTTON_MIDDLE) {
	    char *paste = SDL_GetClipboardText();
	    if (paste)
	      paste_text(paste, strlen(paste), "utf8");
	  }
	  break;
	}
#endif				/* CONFIG_SDL_SELECTION */
	mouse_move_buttons(buttons & SDL_BUTTON(1),
			   buttons & SDL_BUTTON(2),
			   buttons & SDL_BUTTON(3));
	break;
      }
    case SDL_MOUSEBUTTONUP:
      {
	int buttons = SDL_GetMouseState(NULL, NULL);
#if CONFIG_SDL_SELECTION
	if (vga.mode_class == TEXT && !grab_active) {
	    t_unicode *sel = end_selection();
	    if (sel) {
		char *send_text = get_selection_string(sel, "utf8");
		SDL_SetClipboardText(send_text);
		free(send_text);
	    }
	}
#endif				/* CONFIG_SDL_SELECTION */
	mouse_move_buttons(buttons & SDL_BUTTON(1),
			   buttons & SDL_BUTTON(2),
			   buttons & SDL_BUTTON(3));
	break;
      }

    case SDL_MOUSEMOTION:
#if CONFIG_SDL_SELECTION
      extend_selection(x_to_col(event.motion.x, m_x_res),
			 y_to_row(event.motion.y, m_y_res));
#endif				/* CONFIG_SDL_SELECTION */
      if (grab_active)
	mouse_move_relative(event.motion.xrel, event.motion.yrel,
			    m_x_res, m_y_res);
      else
	mouse_move_absolute(event.motion.x, event.motion.y, m_x_res,
			    m_y_res);
      break;
    case SDL_MOUSEWHEEL:
      mouse_move_wheel(-event.wheel.y);
      break;
    case SDL_QUIT:
      leavedos(0);
      break;
    default:
      v_printf("PAS ENCORE TRAITE %x\n", event.type);
      /* TODO */
      break;
    }
  }

#ifdef X_SUPPORT
  if (x11_display && !use_bitmap_font && vga.mode_class == TEXT &&
      X_handle_text_expose()) {
    /* need to check separately because SDL_VIDEOEXPOSE is eaten by SDL */
    redraw_text_screen();
  }
#endif
}
SDL_Rect& GraphicsDriver::GetLogicalViewport()
{
	SDL_RenderGetLogicalSize( mRenderer, &mViewport.w, &mViewport.h );

	return mViewport;
}
Exemple #16
0
World::World(int* const argClientIndex,	int* const argAccountIndex):
	clientIndex(*argClientIndex),
	accountIndex(*argAccountIndex)
{
	//setup the utility objects
	buttonImage.Load(GetRenderer(), config["dir.interface"] + "button_blue.png");
	font = TTF_OpenFont(config["client.font"].c_str(), 12);

	//check that the font loaded
	if (!font) {
		std::ostringstream msg;
		msg << "Failed to load a font file; " << SDL_GetError();
		throw(std::runtime_error(msg.str()));
	}

	//setup the buttons
	disconnectButton.SetBackgroundTexture(GetRenderer(), buttonImage.GetTexture());
	disconnectButton.SetText(GetRenderer(), font, WHITE, "Disconnect");
	shutdownButton.SetBackgroundTexture(GetRenderer(), buttonImage.GetTexture());
	shutdownButton.SetText(GetRenderer(), font, WHITE, "Shutdown");

	//set the button positions
	disconnectButton.SetX(50);
	disconnectButton.SetY(50);
	shutdownButton.SetX(50);
	shutdownButton.SetY(70);

	//load the tilesheet
	//TODO: (2) Tile size and tile sheet should be loaded elsewhere
	tileSheet.Load(GetRenderer(), config["dir.tilesets"] + "overworld.png", 32, 32);

	//Send the character data
	CharacterPacket newPacket;
	newPacket.type = SerialPacketType::CHARACTER_LOAD;
	strncpy(newPacket.handle, config["client.handle"].c_str(), PACKET_STRING_SIZE);
	strncpy(newPacket.avatar, config["client.avatar"].c_str(), PACKET_STRING_SIZE);
	newPacket.accountIndex = accountIndex;
	network.SendTo(Channels::SERVER, &newPacket);

	//set the camera's values
	SDL_RenderGetLogicalSize(GetRenderer(), &camera.width, &camera.height);

	//debug
	std::list<std::string> slotNames = {
			"slot 1 green.png",
			"slot 2 green.png",
			"slot 3 green.png",
			"slot 4 green.png",
			"slot 5 green.png",
			"slot 6 green.png",
			"slot 7 green.png",
			"slot 8 green.png",
			"slot 1 red.png",
			"slot 2 red.png",
			"slot 3 red.png",
			"slot 4 red.png",
			"slot 5 red.png",
			"slot 6 red.png",
			"slot 7 red.png",
			"slot 8 red.png"
		};
	barrierMgr.LoadBaseImage(GetRenderer(), config["dir.sprites"] + "barrier/base.png");
	barrierMgr.LoadTemplateImages(GetRenderer(), config["dir.sprites"] + "barrier/", slotNames);

	std::cout << "Templates loaded: " << barrierMgr.GetTemplateContainer()->size() << std::endl;
}
Exemple #17
0
void get_screen_size(int* width, int* height)
{
    SDL_RenderGetLogicalSize(screen->impl, width, height);
}