mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-08 06:06:43 +01:00
add "power meter"
This commit is contained in:
parent
896b9d57aa
commit
389c4c27aa
6 changed files with 65 additions and 8 deletions
4
Makefile
4
Makefile
|
@ -4,9 +4,9 @@ CFLAGS=-I$(IDIR) -Wall -ansi -g
|
||||||
|
|
||||||
SRCDIR=src
|
SRCDIR=src
|
||||||
ODIR=obj
|
ODIR=obj
|
||||||
LIBS=-lallegro -lallegro_audio -lallegro_acodec -lallegro_image -lallegro_font -lallegro_main -lallegro_ttf -lm
|
LIBS=-lallegro -lallegro_audio -lallegro_acodec -lallegro_image -lallegro_font -lallegro_main -lallegro_ttf -lallegro_primitives -lm
|
||||||
|
|
||||||
_OBJ = config.o main.o about.o intro.o loading.o map.o menu.o level.o moonwalk.o pause.o timeline.o
|
_OBJ = config.o main.o about.o intro.o loading.o map.o menu.o level.o moonwalk.o pause.o timeline.o allegro_utils.o
|
||||||
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
|
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
|
||||||
|
|
||||||
OUTPUTDIR = bin
|
OUTPUTDIR = bin
|
||||||
|
|
24
src/allegro_utils.c
Normal file
24
src/allegro_utils.c
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#include "allegro_utils.h"
|
||||||
|
|
||||||
|
void al_draw_vertical_gradient_rect(float x, float y, float w, float h, ALLEGRO_COLOR top, ALLEGRO_COLOR bottom) {
|
||||||
|
ALLEGRO_VERTEX v[] = {
|
||||||
|
{.x = x, .y = y, .z = 0, .color = top},
|
||||||
|
{.x = x + w, .y = y, .z = 0, .color = top},
|
||||||
|
{.x = x, .y = y + h, .z = 0, .color = bottom},
|
||||||
|
{.x = x + w, .y = y + h, .z = 0, .color = bottom}};
|
||||||
|
al_draw_prim(v, NULL, NULL, 0, 4, ALLEGRO_PRIM_TRIANGLE_STRIP);
|
||||||
|
}
|
||||||
|
|
||||||
|
void al_draw_horizontal_gradient_rect(float x, float y, float w, float h, ALLEGRO_COLOR left, ALLEGRO_COLOR right) {
|
||||||
|
ALLEGRO_VERTEX v[] = {
|
||||||
|
{.x = x, .y = y, .z = 0, .color = left},
|
||||||
|
{.x = x + w, .y = y, .z = 0, .color = right},
|
||||||
|
{.x = x, .y = y + h, .z = 0, .color = left},
|
||||||
|
{.x = x + w, .y = y + h, .z = 0, .color = right}};
|
||||||
|
al_draw_prim(v, NULL, NULL, 0, 4, ALLEGRO_PRIM_TRIANGLE_STRIP);
|
||||||
|
}
|
||||||
|
|
||||||
|
void al_draw_text_with_shadow(ALLEGRO_FONT *font, ALLEGRO_COLOR color, float x, float y, int flags, char const *text) {
|
||||||
|
al_draw_text(font, al_map_rgba(0,0,0,128), x+1, y+1, flags, text);
|
||||||
|
al_draw_text(font, color, x, y, flags, text);
|
||||||
|
}
|
7
src/allegro_utils.h
Normal file
7
src/allegro_utils.h
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#include <allegro5/allegro.h>
|
||||||
|
#include <allegro5/allegro_primitives.h>
|
||||||
|
#include <allegro5/allegro_font.h>
|
||||||
|
|
||||||
|
void al_draw_vertical_gradient_rect(float x, float y, float w, float h, ALLEGRO_COLOR top, ALLEGRO_COLOR bottom);
|
||||||
|
void al_draw_horizontal_gradient_rect(float x, float y, float w, float h, ALLEGRO_COLOR left, ALLEGRO_COLOR right);
|
||||||
|
void al_draw_text_with_shadow(ALLEGRO_FONT *font, ALLEGRO_COLOR color, float x, float y, int flags, char const *text);
|
25
src/level.c
25
src/level.c
|
@ -113,10 +113,24 @@ bool Move(struct Game *game, struct TM_Action *action, enum TM_ActionState state
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ShowMeter(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||||
|
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
||||||
|
game->level.meter_alpha+=tps(game, 60*3);
|
||||||
|
if (game->level.meter_alpha>=255) {
|
||||||
|
game->level.meter_alpha=255;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||||
if (state == TM_ACTIONSTATE_INIT) action->arguments = NULL;
|
if (state == TM_ACTIONSTATE_INIT) action->arguments = NULL;
|
||||||
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
||||||
if (!(action->arguments)) { SelectDerpySpritesheet(game, "fly"); game->level.flying = true; }
|
if (!(action->arguments)) {
|
||||||
|
SelectDerpySpritesheet(game, "fly");
|
||||||
|
game->level.flying = true;
|
||||||
|
TM_AddBackgroundAction(&ShowMeter, NULL, 0, "showmeter");
|
||||||
|
}
|
||||||
action->arguments++;
|
action->arguments++;
|
||||||
game->level.derpy_y-=tps(game, 60*0.004);
|
game->level.derpy_y-=tps(game, 60*0.004);
|
||||||
if (game->level.derpy_y>0.2) return false;
|
if (game->level.derpy_y>0.2) return false;
|
||||||
|
@ -312,6 +326,11 @@ void Level_Draw(struct Game *game) {
|
||||||
if (game->level.cl_pos >= 1) game->level.cl_pos=game->level.cl_pos-1;
|
if (game->level.cl_pos >= 1) game->level.cl_pos=game->level.cl_pos-1;
|
||||||
al_hold_bitmap_drawing(false);
|
al_hold_bitmap_drawing(false);
|
||||||
|
|
||||||
|
al_set_target_bitmap(game->level.meter_bmp);
|
||||||
|
al_draw_horizontal_gradient_rect(0, 0, al_get_bitmap_width(game->level.meter_bmp), al_get_bitmap_height(game->level.meter_bmp), al_map_rgb(255,0,0), al_map_rgb(0,255,0));
|
||||||
|
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||||
|
al_draw_tinted_bitmap(game->level.meter_bmp, al_map_rgba(game->level.meter_alpha,game->level.meter_alpha,game->level.meter_alpha,game->level.meter_alpha), al_get_display_width(game->display)*0.75, al_get_display_height(game->display)*0.925, 0);
|
||||||
|
|
||||||
TM_Process();
|
TM_Process();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -430,6 +449,7 @@ void Level_Load(struct Game *game) {
|
||||||
game->level.handle_input = false;
|
game->level.handle_input = false;
|
||||||
game->level.obstracles = NULL;
|
game->level.obstracles = NULL;
|
||||||
game->level.flying = false;
|
game->level.flying = false;
|
||||||
|
game->level.meter_alpha=0;
|
||||||
al_clear_to_color(al_map_rgb(0,0,0));
|
al_clear_to_color(al_map_rgb(0,0,0));
|
||||||
if (game->level.current_level!=1) Moonwalk_Load(game);
|
if (game->level.current_level!=1) Moonwalk_Load(game);
|
||||||
else {
|
else {
|
||||||
|
@ -555,6 +575,7 @@ void Level_UnloadBitmaps(struct Game *game) {
|
||||||
al_destroy_bitmap(game->level.clouds);
|
al_destroy_bitmap(game->level.clouds);
|
||||||
al_destroy_bitmap(game->level.welcome);
|
al_destroy_bitmap(game->level.welcome);
|
||||||
al_destroy_bitmap(game->level.obst_bmps.pie);
|
al_destroy_bitmap(game->level.obst_bmps.pie);
|
||||||
|
al_destroy_bitmap(game->level.meter_bmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -582,5 +603,7 @@ void Level_PreloadBitmaps(struct Game *game) {
|
||||||
al_draw_text_with_shadow(game->menu.font_title, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.1, ALLEGRO_ALIGN_CENTRE, "Level 1");
|
al_draw_text_with_shadow(game->menu.font_title, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.1, ALLEGRO_ALIGN_CENTRE, "Level 1");
|
||||||
al_draw_text_with_shadow(game->menu.font_subtitle, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.275, ALLEGRO_ALIGN_CENTRE, "Fluttershy");
|
al_draw_text_with_shadow(game->menu.font_subtitle, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.275, ALLEGRO_ALIGN_CENTRE, "Fluttershy");
|
||||||
al_set_target_bitmap(al_get_backbuffer(game->display));
|
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||||
|
|
||||||
|
game->level.meter_bmp = al_create_bitmap(al_get_display_width(game->display)*0.2, al_get_display_height(game->display)*0.025);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
10
src/main.c
10
src/main.c
|
@ -60,11 +60,6 @@
|
||||||
double old_time = 0, fps;
|
double old_time = 0, fps;
|
||||||
int frames_done = 0;
|
int frames_done = 0;
|
||||||
|
|
||||||
void al_draw_text_with_shadow(ALLEGRO_FONT *font, ALLEGRO_COLOR color, float x, float y, int flags, char const *text) {
|
|
||||||
al_draw_text(font, al_map_rgba(0,0,0,128), x+1, y+1, flags, text);
|
|
||||||
al_draw_text(font, color, x, y, flags, text);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrintConsole(struct Game *game, char* format, ...) {
|
void PrintConsole(struct Game *game, char* format, ...) {
|
||||||
va_list vl;
|
va_list vl;
|
||||||
va_start(vl, format);
|
va_start(vl, format);
|
||||||
|
@ -329,6 +324,11 @@ int main(int argc, char **argv){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!al_init_primitives_addon()){
|
||||||
|
fprintf(stderr, "failed to initialize primitives!\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* if (!al_reserve_samples(10)){
|
/* if (!al_reserve_samples(10)){
|
||||||
fprintf(stderr, "failed to reserve samples!\n");
|
fprintf(stderr, "failed to reserve samples!\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <allegro5/allegro_image.h>
|
#include <allegro5/allegro_image.h>
|
||||||
#include <allegro5/allegro_font.h>
|
#include <allegro5/allegro_font.h>
|
||||||
#include <allegro5/allegro_ttf.h>
|
#include <allegro5/allegro_ttf.h>
|
||||||
|
#include "allegro_utils.h"
|
||||||
|
|
||||||
struct Game;
|
struct Game;
|
||||||
|
|
||||||
|
@ -77,6 +78,7 @@ struct Level {
|
||||||
float derpy_x, derpy_y;
|
float derpy_x, derpy_y;
|
||||||
bool handle_input;
|
bool handle_input;
|
||||||
bool flying;
|
bool flying;
|
||||||
|
float meter_alpha;
|
||||||
int sheet_rows, sheet_cols, sheet_pos, sheet_blanks;
|
int sheet_rows, sheet_cols, sheet_pos, sheet_blanks;
|
||||||
float sheet_tmp, sheet_speed, sheet_speed_modifier;
|
float sheet_tmp, sheet_speed, sheet_speed_modifier;
|
||||||
ALLEGRO_SAMPLE *sample; /*!< Sample with background music. */
|
ALLEGRO_SAMPLE *sample; /*!< Sample with background music. */
|
||||||
|
@ -86,6 +88,7 @@ struct Level {
|
||||||
ALLEGRO_BITMAP *welcome;
|
ALLEGRO_BITMAP *welcome;
|
||||||
ALLEGRO_BITMAP **derpy_sheet; /*!< Active Derpy sprite sheet. */
|
ALLEGRO_BITMAP **derpy_sheet; /*!< Active Derpy sprite sheet. */
|
||||||
ALLEGRO_BITMAP *derpy; /*!< Derpy sprite. */
|
ALLEGRO_BITMAP *derpy; /*!< Derpy sprite. */
|
||||||
|
ALLEGRO_BITMAP *meter_bmp;
|
||||||
struct Spritesheet* derpy_sheets; /*!< List of sprite sheets of Derpy character. */
|
struct Spritesheet* derpy_sheets; /*!< List of sprite sheets of Derpy character. */
|
||||||
struct Spritesheet* pony_sheets; /*!< List of sprite sheets of character rescued by Derpy. */
|
struct Spritesheet* pony_sheets; /*!< List of sprite sheets of character rescued by Derpy. */
|
||||||
struct {
|
struct {
|
||||||
|
|
Loading…
Reference in a new issue