[Add] Stars!!!!
This commit is contained in:
parent
223a6185fb
commit
246bdff2c8
@ -9,6 +9,7 @@
|
|||||||
#include "pilot.h"
|
#include "pilot.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "joystick.h"
|
#include "joystick.h"
|
||||||
|
#include "space.h"
|
||||||
#include "rng.h"
|
#include "rng.h"
|
||||||
#include "pilot.h"
|
#include "pilot.h"
|
||||||
|
|
||||||
@ -85,6 +86,7 @@ int main(int argc, char** argv) {
|
|||||||
unsigned int player_id;
|
unsigned int player_id;
|
||||||
player_id = pilot_create(get_ship("Ship"), "Player", NULL, NULL, PILOT_PLAYER);
|
player_id = pilot_create(get_ship("Ship"), "Player", NULL, NULL, PILOT_PLAYER);
|
||||||
gl_bindCamera(&get_pilot(player_id)->solid->pos);
|
gl_bindCamera(&get_pilot(player_id)->solid->pos);
|
||||||
|
space_init();
|
||||||
|
|
||||||
pilot_create(get_ship("Miss. Test"), NULL, NULL, NULL, 0);
|
pilot_create(get_ship("Miss. Test"), NULL, NULL, NULL, 0);
|
||||||
|
|
||||||
@ -99,6 +101,7 @@ int main(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
update_all();
|
update_all();
|
||||||
}
|
}
|
||||||
|
space_exit();
|
||||||
// Unload data.
|
// Unload data.
|
||||||
pilots_free();
|
pilots_free();
|
||||||
ships_free();
|
ships_free();
|
||||||
@ -117,6 +120,7 @@ static void update_all(void) {
|
|||||||
time = SDL_GetTicks();
|
time = SDL_GetTicks();
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
space_render(dt);
|
||||||
pilots_update(dt);
|
pilots_update(dt);
|
||||||
|
|
||||||
SDL_GL_SwapBuffers();
|
SDL_GL_SwapBuffers();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#define RNG(L,H) rand()%(H-L_1)+L
|
#define RNG(L,H) rand()%(H-L+1)+L
|
||||||
|
|
||||||
void rng_init(void);
|
void rng_init(void);
|
||||||
|
|
||||||
|
147
src/space.c
Normal file
147
src/space.c
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
#include "log.h"
|
||||||
|
#include "physics.h"
|
||||||
|
#include "opengl.h"
|
||||||
|
#include "rng.h"
|
||||||
|
#include "pilot.h"
|
||||||
|
#include "space.h"
|
||||||
|
|
||||||
|
#define STAR_LAYERS 3
|
||||||
|
|
||||||
|
static gl_texture* starBG[STAR_LAYERS];
|
||||||
|
static Vec2 starPos[STAR_LAYERS];
|
||||||
|
|
||||||
|
static gl_texture* starBG_create(const int density);
|
||||||
|
static void put_pixel(SDL_Surface* surface, const int x, const int y,
|
||||||
|
const Uint8 R, const Uint8 G, const Uint8 B);
|
||||||
|
|
||||||
|
// Modify the pixel at (x,y) of the surface to be of color RGB.
|
||||||
|
static void put_pixel(SDL_Surface* surface, const int x, const int y, const Uint8 R, const Uint8 G, const Uint8 B) {
|
||||||
|
Uint32 color = SDL_MapRGB(surface->format, R, G, B);
|
||||||
|
|
||||||
|
Uint8* bufp8;
|
||||||
|
Uint16* bufp16;
|
||||||
|
Uint32* bufp32;
|
||||||
|
|
||||||
|
switch(surface->format->BytesPerPixel) {
|
||||||
|
case 1: // 8bpp.
|
||||||
|
bufp8 = (Uint8)surface->pixels + y*surface->pitch + x;
|
||||||
|
*bufp8 = color;
|
||||||
|
break;
|
||||||
|
case 2: // 15 or 16bpp.
|
||||||
|
bufp16 = (Uint16*)surface->pixels + y*surface->pitch/2 + x;
|
||||||
|
*bufp16 = color;
|
||||||
|
break;
|
||||||
|
case 3: // 24bpp, Slow as hell.
|
||||||
|
bufp8 = (Uint8*)surface->pixels + y*surface->pitch + x;
|
||||||
|
*(bufp8 + surface->format->Rshift/8) = R;
|
||||||
|
*(bufp8 + surface->format->Gshift/8) = G;
|
||||||
|
*(bufp8 + surface->format->Bshift/8) = B;
|
||||||
|
break;
|
||||||
|
case 4: // 32bpp.
|
||||||
|
bufp32 = (Uint32*)surface->pixels + y*surface->pitch/4 + x;
|
||||||
|
*bufp32 = color;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a background of stars to use.
|
||||||
|
// Background consists of four tiles together.
|
||||||
|
static gl_texture* starBG_create(const int density) {
|
||||||
|
SDL_Surface* surface;
|
||||||
|
int w, h;
|
||||||
|
int i, b, d, x, y;
|
||||||
|
|
||||||
|
w = (int)((float)gl_screen.w * 1.5);
|
||||||
|
if((w & (w-1)) != 0) {
|
||||||
|
w = 1;
|
||||||
|
while(h < (int)((float)gl_screen.h*1.5))
|
||||||
|
h <<= 1;
|
||||||
|
}
|
||||||
|
h = (int)((float)gl_screen.h * 1.5);
|
||||||
|
if((h & (h-1)) != 0) {
|
||||||
|
h = 1;
|
||||||
|
while(h < (int)((float)gl_screen.h * 1.5))
|
||||||
|
h <<= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
surface = SDL_CreateRGBSurface(SDL_SRCCOLORKEY, w, h,
|
||||||
|
SDL_GetVideoSurface()->format->BytesPerPixel*8, RGBMASK);
|
||||||
|
|
||||||
|
if(surface == NULL) {
|
||||||
|
WARN("Unable to create RGB surface");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
d = (int)((FP)(density)*(FP)(gl_screen.w)*(FP)(gl_screen.h)/1000./1000.);
|
||||||
|
for(i = 0; i < d; i++) {
|
||||||
|
b = RNG(50, 255);
|
||||||
|
x = RNG(0, w-1);
|
||||||
|
y = RNG(0, h-1);
|
||||||
|
put_pixel(surface, x, y, b, b, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
return gl_loadImage(surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
void space_init(void) {
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < STAR_LAYERS; i++) {
|
||||||
|
starBG[i] = starBG_create(1000);
|
||||||
|
starPos[i].x = 0.;
|
||||||
|
starPos[i].y = 0.;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void space_render(FP dt) {
|
||||||
|
int i;
|
||||||
|
Vec2 tmp = { .x = starPos[0].x };
|
||||||
|
|
||||||
|
for(i = 0; i < STAR_LAYERS; i++) {
|
||||||
|
// Movement.
|
||||||
|
starPos[i].x -= player->solid->vel.x / (FP)(2*i+4)*dt;
|
||||||
|
starPos[i].y -= player->solid->vel.y / (FP)(2*i+4)*dt;
|
||||||
|
|
||||||
|
// Displaces x if reaches edge.
|
||||||
|
if(starPos[i].x > 0)
|
||||||
|
starPos[i].x -= starBG[i]->w;
|
||||||
|
else if(starPos[i].x < -starBG[i]->w)
|
||||||
|
starPos[i].x += starBG[i]->w;
|
||||||
|
|
||||||
|
// Displaces y if reaches edge.
|
||||||
|
if(starPos[i].y > 0)
|
||||||
|
starPos[i].y -= starBG[i]->h;
|
||||||
|
else if(starPos[i].y < -starBG[i]->h)
|
||||||
|
starPos[i].y += starBG[i]->h;
|
||||||
|
|
||||||
|
// Primary blit.
|
||||||
|
gl_blitStatic(starBG[i], &starPos[i]);
|
||||||
|
|
||||||
|
tmp.x = starPos[i].x;
|
||||||
|
tmp.y = starPos[i].y;
|
||||||
|
|
||||||
|
// TODO: This needs optimizing.
|
||||||
|
tmp.x -= starBG[i]->w;
|
||||||
|
gl_blitStatic(starBG[i], &tmp);
|
||||||
|
tmp.y += starBG[i]->h;
|
||||||
|
gl_blitStatic(starBG[i], &tmp);
|
||||||
|
tmp.x += starBG[i]->w;
|
||||||
|
gl_blitStatic(starBG[i], &tmp);
|
||||||
|
tmp.x += starBG[i]->w;
|
||||||
|
gl_blitStatic(starBG[i], &tmp);
|
||||||
|
tmp.y -= starBG[i]->h;
|
||||||
|
gl_blitStatic(starBG[i], &tmp);
|
||||||
|
tmp.y -= starBG[i]->h;
|
||||||
|
gl_blitStatic(starBG[i], &tmp);
|
||||||
|
tmp.x -= starBG[i]->w;
|
||||||
|
gl_blitStatic(starBG[i], &tmp);
|
||||||
|
tmp.x -= starBG[i]->w;
|
||||||
|
gl_blitStatic(starBG[i], &tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void space_exit(void) {
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < STAR_LAYERS; i++)
|
||||||
|
gl_free(starBG[i]);
|
||||||
|
}
|
||||||
|
|
8
src/space.h
Normal file
8
src/space.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "def.h"
|
||||||
|
|
||||||
|
void space_init(void);
|
||||||
|
void space_exit(void);
|
||||||
|
|
||||||
|
void space_render(FP dt);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user