예제 #1
0
void TinyGameLibrary::renderLevel()
{
    if (m_levelAt >= m_levels.size()) return;

    const TGL_Level& level = m_levels.at(m_levelAt);

    int width = level.layer0.at(0).size();
    int height = level.layer0.size();

    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {

            // debug
            SDL_Rect rect = { j * m_tileWidth, i * m_tileHeight, m_tileWidth + 1, m_tileHeight + 1 };
            SDL_SetRenderDrawColor(m_renderer, 255, 0, 0, 0);
            SDL_RenderDrawRect(m_renderer, &rect);
            SDL_SetRenderDrawColor(m_renderer, 0, 0, 0, 0);

            TGL_Id id = level.layer0.at(i).at(j);
            if (id == -1) continue;
            int x = j * m_tileWidth;// + (m_renderWidth - width * m_tileWidth) / 2;
            int y = i * m_tileHeight;

            renderSprite(id, x, y);
        }
    }

    for (const TGL_Object& object : level.sprites) {

        // debug
        SDL_Rect rect = { object.x, object.y, m_objectDefinitions.at(object.definitionId).spriteSheetCoord.width, m_objectDefinitions.at(object.definitionId).spriteSheetCoord.height };
        SDL_SetRenderDrawColor(m_renderer, 0, 255, 0, 0);
        SDL_RenderDrawRect(m_renderer, &rect);
        SDL_SetRenderDrawColor(m_renderer, 0, 0, 0, 0);

        renderSprite(object.definitionId, object.x, object.y);
    }
}
예제 #2
0
	void Sprite::render(float dt)
	{
		if (!mVisible)
		{
			return;
		}

		if (mAsset == NULL || mAsset->getTexture() == NULL || !mAsset->getTexture()->isLoaded())
		{
			if (!mGfxComponent || (mGfxComponent && mGfxComponent->getColour().getAlpha() > 0.05f))
			{
				preRender(dt);
				Texture::bindTexture(0);

				if (mGfxComponent)
				{
					mGfxComponent->getColour().applyColour();
				}
				glBegin(GL_QUADS);
					glVertex2f(0.0f, 0.0f);
					glVertex2f(getWidth(), 0.0f);
					glVertex2f(getWidth(), getHeight());
					glVertex2f(0.0f, getHeight());
				glEnd();

				postRender(dt);
			}

			return;
		}

		preRender(dt);
		
		updateSprite(dt);
		renderSprite();

		postRender(dt);
	}
예제 #3
0
파일: main.c 프로젝트: pepi55/langTest
int main (void) { //int argv, char **argc
	int x, y, i, j, bW, bH, fW, fH, sW, sH;
	int curClip = 0;
	bool quit = 0;
	const Uint8 *kbState = SDL_GetKeyboardState(NULL);
	char **imgFromSrc;

	SDL_Event e;
	SDL_Window *win;
	SDL_Renderer *ren;
	SDL_Texture *bg;
	SDL_Texture *fg;

	SDL_Rect wall;
	SDL_Rect clips[CLIPS_AMOUNT];

	if (SDL_Init(SDL_INIT_VIDEO) != 0 || (IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG) != IMG_INIT_PNG) {
		logSDLError("Init");
		return 1;
	}

	win = SDL_CreateWindow("Hello World!", WINDOW_OFFSET_X, WINDOW_OFFSET_Y, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
	if (win == NULL) {
		logSDLError("CreateWindow");
		return 2;
	}

	ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
	if (ren == NULL) {
		logSDLError("CreateRenderer");
		return 3;
	}

	imgFromSrc = bmp_xpm;
	bg = loadHeader(imgFromSrc, ren);
	fg = loadTexture("../SDL/sprites/sprite.png", ren);
	if (bg == NULL || fg == NULL) {
		logSDLError("loadTexture");
		return 4;
	}

	SDL_RenderClear(ren);

	SDL_QueryTexture(bg, NULL, NULL, &bW, &bH);

	bW /= 2;
	bH /= 2;

	for (i = 0; i < WINDOW_WIDTH / bW; i++) {
		for (j = 0; j <= WINDOW_HEIGHT / bH; j++) {
			renderTextureS(bg, ren, i * bW, j * bH, bW, bH);
		}
	}

	fW = 95;
	fH = 95;
	x = WINDOW_WIDTH / 2 - fW / 2;
	y = WINDOW_WIDTH / 2 - fH / 2;

	for (i = 0; i < CLIPS_AMOUNT; i++) {
		clips[i].x = i / 2 * fW;
		clips[i].y = i % 2 * fH;

		clips[i].w = fW;
		clips[i].h = fH;
	}

	SDL_QueryTexture(fg, NULL, NULL, &sW, &sH);
	renderTexture(fg, ren, x, y);

	SDL_RenderPresent(ren);

	SDL_Delay(2000);

	while (!quit) {
		while (SDL_PollEvent(&e)) {
			if (e.type == SDL_QUIT) quit = 1;
			//if (e.type == SDL_MOUSEBUTTONDOWN) quit = 1;
		}

		if (kbState[SDL_SCANCODE_W] || kbState[SDL_SCANCODE_UP]) {
			x -= 5; curClip = 3;
			if (x < -sW) x = WINDOW_WIDTH - sW;
		}
		
		if (kbState[SDL_SCANCODE_A] || kbState[SDL_SCANCODE_LEFT]) {
			y -= 5; curClip = 0;
			if (y < -sH) y = WINDOW_HEIGHT + sH;
		}
		
		if (kbState[SDL_SCANCODE_S] || kbState[SDL_SCANCODE_DOWN]) {
			x += 5; curClip = 1;
			if (x > WINDOW_WIDTH - sW) x = 0 -sW;
		}
		
		if (kbState[SDL_SCANCODE_D] || kbState[SDL_SCANCODE_RIGHT]) {
			y += 5; curClip = 2;
			if (y > WINDOW_HEIGHT + sH) y = 0 -sH;
		}

		SDL_RenderClear(ren);

		for (i = 0; i < WINDOW_WIDTH / bW; i++) {
			for (j = 0; j <= WINDOW_HEIGHT / bH; j++) {
				renderTextureS(bg, ren, i * bW, j * bH, bW, bH);
			}
		}

		renderSprite(fg, ren, x, y, &clips[curClip]);
		SDL_RenderPresent(ren);
	}

	SDL_DestroyTexture(bg);
	SDL_DestroyTexture(fg);
	SDL_DestroyRenderer(ren);
	SDL_DestroyWindow(win);

	cleanUp();

	return 0;
}
예제 #4
0
 void Sprite::render()
 {
     renderSprite();
 }
예제 #5
0
void renderEntity(Entity *entity) {
    if(entity->sprite) {
        renderSprite(entity->sprite, entity->pos.x, entity->pos.y);
    }
}
예제 #6
0
void ColorModApp::run()
{
	SDL_Event e;
	bool quit = false;
	
	if (!initApp())
	{
		std::cout << "Failed to initialize!\n" << std::endl;
	}
	else
	{
		// Load Media
		if (!loadMedia())
		{
			std::cout << "Failed to load media!\n" << std::endl;
		}
		else
		{			

			//Clear screen
			SDL_SetRenderDrawColor( gCurrentRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
			SDL_RenderClear( gCurrentRenderer );

			//Set rendering space and render to screen
			SDL_Rect renderQuad = { 0, 0, gBackgroundTexture.getWidth(), gBackgroundTexture.getHeight()};
			// SDL_RenderCopy( gCurrentRenderer, gBackgroundTexture.getTexture(), NULL, &renderQuad );
			// renderToScreen(gBackgroundTexture, &renderQuad);
			gBackgroundTexture.renderTexture(gCurrentRenderer, &renderQuad);
			renderSprite();
			
			//Update screen
			SDL_RenderPresent( gCurrentRenderer );
			
			// now we set the SDL_RGB Color
			SDL_Color RGBColor = {255,255,255};

			while (!quit)
			{
				while (SDL_PollEvent(&e) != 0)
				{
					if (e.type == SDL_QUIT)
					{
						quit = true;
						std::cout << "Program quit after "<< e.quit.timestamp << " ticks!" << std::endl;
					}
					else if( e.type == SDL_KEYDOWN )
					{
                        switch( e.key.keysym.sym )
                        {
                            //Increase red
                            case SDLK_q:
                            RGBColor.r += 32;
                            break;
                            
                            //Increase green
                            case SDLK_w:
                            RGBColor.g += 32;
                            break;
                            
                            //Increase blue
                            case SDLK_e:
                            RGBColor.b += 32;
                            break;
                            
                            //Decrease red
                            case SDLK_a:
                            RGBColor.r -= 32;
                            break;
                            
                            //Decrease green
                            case SDLK_s:
                            RGBColor.g -= 32;
                            break;
                            
                            //Decrease blue
                            case SDLK_d:
                            RGBColor.b -= 32;
                            break;
                        }
						
						// set the color mods
						gSpriteTexture.setColorModulation(RGBColor.r, RGBColor.g, RGBColor.b);
						renderSprite();
						SDL_RenderPresent(gCurrentRenderer);
					}
				}
				
			}
			
		}
	}
	
	close();
}