merged from herbglitch/master
This commit is contained in:
commit
2f221987af
21 changed files with 339 additions and 10 deletions
7
src/audio/sdl/audio.c
Normal file
7
src/audio/sdl/audio.c
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#include "arc/audio/audio.h"
|
||||
#include "arc/audio/sdl/audio.h"
|
||||
#include <SDL2/SDL_mixer.h>
|
||||
|
||||
void ARC_Audio_Play(ARC_Audio *audio){
|
||||
Mix_PlayChannel(-1, audio->chunk, 0);
|
||||
}
|
||||
43
src/audio/sdl/config.c
Normal file
43
src/audio/sdl/config.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#include "arc/audio/config.h"
|
||||
#include "arc/audio/sdl/audio.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "arc/std/config.h"
|
||||
#include "arc/std/errno.h"
|
||||
#include "arc/audio/audio.h"
|
||||
|
||||
// #define ARC_DEFAULT_CONFIG
|
||||
#include "arc/std/defaults/config.h"
|
||||
|
||||
void ARC_AudioConfig_Init(ARC_Config *config){
|
||||
ARC_Config_AddKeyCString(config, (char *)"ARC_Audio", 9, ARC_Audio_Read, ARC_Audio_Delete);
|
||||
}
|
||||
|
||||
uint8_t ARC_Audio_Read(ARC_Config *config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(string->data[0] != '"' || string->data[string->length - 1] != '"'){
|
||||
ARC_DEBUG_LOG(arc_errno, "in ARC_Point_Read(config, string, value); no matching quotes: %s", string->data);
|
||||
arc_errno = ARC_ERRNO_DATA;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ARC_Audio *audio = (ARC_Audio *)malloc(sizeof(ARC_Audio));
|
||||
|
||||
ARC_String *path;
|
||||
ARC_String_CopySubstring(&path, string, 1, string->length - 2);
|
||||
audio->chunk = Mix_LoadWAV(path->data);
|
||||
|
||||
//TODO: get error message if not loaded
|
||||
|
||||
*value = (void *)audio;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ARC_Audio_Delete(ARC_Config* config, ARC_String *string, void *value){
|
||||
Mix_FreeChunk(((ARC_Audio *)value)->chunk);
|
||||
free((ARC_Audio *)value);
|
||||
}
|
||||
|
|
@ -20,8 +20,8 @@
|
|||
#include "arc/input/sdl/mouse.h"
|
||||
#include "arc/input/sdl/keyboard.h"
|
||||
#include <SDL.h>
|
||||
#include <SDL_video.h>
|
||||
#include <SDL2/SDL_ttf.h>
|
||||
#include <SDL2/SDL_mixer.h>
|
||||
#elif ARC_OPENGL
|
||||
#include "arc/graphics/opengl/window.h"
|
||||
#include "arc/graphics/opengl/renderer.h"
|
||||
|
|
@ -48,6 +48,8 @@ void ARC_EngineData_Create(ARC_EngineData **data, ARC_Handler_CleanDataFn cleanf
|
|||
//TEMP
|
||||
#ifdef ARC_SDL
|
||||
TTF_Init();
|
||||
Mix_Init(0);
|
||||
Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024);
|
||||
#endif
|
||||
|
||||
#ifdef ARC_SDL
|
||||
|
|
@ -90,6 +92,8 @@ void ARC_EngineData_Create(ARC_EngineData **data, ARC_Handler_CleanDataFn cleanf
|
|||
void ARC_EngineData_Destroy(ARC_EngineData *data){
|
||||
#ifdef ARC_SDL
|
||||
free(data->mouse->event);
|
||||
TTF_Quit();
|
||||
Mix_Quit();
|
||||
#endif // ARC_SDL
|
||||
|
||||
ARC_Mouse_Destroy(data->mouse);
|
||||
|
|
@ -105,7 +109,6 @@ void ARC_Engine_Run(ARC_EngineData *data){
|
|||
}
|
||||
|
||||
#ifdef ARC_SDL
|
||||
SDL_SetRenderDrawBlendMode((SDL_Renderer *)data->renderer, SDL_BLENDMODE_BLEND);
|
||||
|
||||
SDL_Event *event = data->mouse->event;
|
||||
double lastTime = 0, currentTime;
|
||||
|
|
|
|||
|
|
@ -40,4 +40,13 @@ void ARC_Circle_Render(ARC_Circle *circle, ARC_Renderer *renderer, ARC_Color *co
|
|||
}
|
||||
}
|
||||
|
||||
//TODO: very temp
|
||||
void ARC_Circle_RenderFill(ARC_Circle *circle, ARC_Renderer *renderer, ARC_Color *color){
|
||||
ARC_Circle temp = *circle;
|
||||
|
||||
for(; temp.r; temp.r--){
|
||||
ARC_Circle_Render(&temp, renderer, color);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // ARC_SDL
|
||||
|
|
@ -53,7 +53,10 @@ int32_t ARC_SDL_Texture_Load(const char *path, SDL_Texture **texture){
|
|||
return 1; // GE_SDL_ERRNO_
|
||||
}
|
||||
|
||||
SDL_BlendMode tempMode;
|
||||
SDL_GetSurfaceBlendMode(surface, &tempMode);
|
||||
*texture = SDL_CreateTextureFromSurface(global_renderer, surface);
|
||||
SDL_GetTextureBlendMode(*texture, &tempMode);
|
||||
|
||||
SDL_FreeSurface(surface);
|
||||
IMG_Quit();
|
||||
|
|
@ -213,12 +216,7 @@ uint8_t ARC_Sprite_Read(ARC_Config* config, ARC_String *string, void **value){
|
|||
}
|
||||
}
|
||||
//sprite
|
||||
*value = malloc(sizeof(ARC_Sprite));
|
||||
((ARC_Sprite *) *value)->frameIndex = malloc(sizeof(uint32_t));
|
||||
|
||||
((ARC_Sprite *) *value)->spritesheet = spritesheet;
|
||||
((ARC_Sprite *) *value)->frames = frames;
|
||||
*((ARC_Sprite *) *value)->frameIndex = 0;
|
||||
ARC_Sprite_Create((ARC_Sprite **)value, spritesheet, frames);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ void ARC_Renderer_Create(ARC_Renderer **renderer, ARC_RenderInfo *info){
|
|||
ARC_DEBUG_LOG(arc_errno, "SDL_CreateRenderer(%p, %d, %u);", info->window, info->index, info->flags);
|
||||
free(renderer);
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawBlendMode((SDL_Renderer *)*renderer, SDL_BLENDMODE_BLEND);
|
||||
}
|
||||
|
||||
void ARC_Renderer_Destroy(ARC_Renderer *renderer){
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Ar
|
|||
(*sprite)->frames = frames;
|
||||
(*sprite)->frameIndex = (uint32_t *)malloc(sizeof(uint32_t));
|
||||
*(*sprite)->frameIndex = 0;
|
||||
(*sprite)->opacity = 255;
|
||||
}
|
||||
|
||||
void ARC_Sprite_Destroy(ARC_Sprite *sprite){
|
||||
|
|
@ -28,7 +29,13 @@ void ARC_Sprite_Copy(ARC_Sprite **newSprite, ARC_Sprite *oldSprite){
|
|||
*(*newSprite)->frameIndex = *oldSprite->frameIndex;
|
||||
}
|
||||
|
||||
void ARC_Sprite_SetOpacity(ARC_Sprite *sprite, uint8_t opacity){
|
||||
sprite->opacity = opacity;
|
||||
}
|
||||
|
||||
void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds){
|
||||
//TODO: note, this is set here so not all entities in the sheet get opacity set
|
||||
SDL_SetTextureAlphaMod((SDL_Texture *)sprite->spritesheet->texture, sprite->opacity);
|
||||
SDL_RenderCopy((SDL_Renderer *)renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds);
|
||||
}
|
||||
|
||||
|
|
@ -42,10 +49,14 @@ void ARC_Sprite_RenderFlip(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect
|
|||
flip |= SDL_FLIP_VERTICAL;
|
||||
}
|
||||
|
||||
//TODO: note, this is set here so not all entities in the sheet get opacity set
|
||||
SDL_SetTextureAlphaMod((SDL_Texture *)sprite->spritesheet->texture, sprite->opacity);
|
||||
SDL_RenderCopyEx((SDL_Renderer *)renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds, 0.0, NULL, flip);
|
||||
}
|
||||
|
||||
void ARC_Sprite_RenderRotated(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds, ARC_Point *center, double angle){
|
||||
//TODO: note, this is set here so not all entities in the sheet get opacity set
|
||||
SDL_SetTextureAlphaMod((SDL_Texture *)sprite->spritesheet->texture, sprite->opacity);
|
||||
SDL_RenderCopyEx((SDL_Renderer *)renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds, angle, (SDL_Point *)center, SDL_FLIP_NONE);
|
||||
}
|
||||
|
||||
|
|
@ -66,6 +77,10 @@ void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t ARC_Sprite_GetFrameIndex(ARC_Sprite *sprite){
|
||||
return *sprite->frameIndex;
|
||||
}
|
||||
|
||||
ARC_Rect *ARC_Sprite_GetBounds(ARC_Sprite *sprite){
|
||||
return (ARC_Rect *)sprite->frames->data + *sprite->frameIndex;
|
||||
}
|
||||
|
|
|
|||
35
src/graphics/sdl/view.c
Normal file
35
src/graphics/sdl/view.c
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#include "arc/graphics/view.h"
|
||||
|
||||
#include "arc/std/errno.h"
|
||||
#include <SDL.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void ARC_View_Create(ARC_View **view, ARC_Renderer *renderer, ARC_Rect bounds){
|
||||
*view = (ARC_View *)malloc(sizeof(ARC_View));
|
||||
(*view)->renderer = renderer;
|
||||
(*view)->bounds = bounds;
|
||||
}
|
||||
|
||||
void ARC_View_Destroy(ARC_View *view){
|
||||
free(view);
|
||||
}
|
||||
|
||||
void ARC_View_Render(ARC_View *view, ARC_View_RenderFn renderFn, void *data){
|
||||
int err = SDL_RenderSetViewport((SDL_Renderer *)view->renderer, (const SDL_Rect *)&(view->bounds));
|
||||
if(err){
|
||||
ARC_DEBUG_LOG(ARC_ERRNO_DATA, "in src/graphics/sdl/view.c ARC_View_Render(view, renderFn), SDL_RenderSetViewport(...) returned: %d", err);
|
||||
return;
|
||||
}
|
||||
|
||||
renderFn(data);
|
||||
|
||||
err = SDL_RenderSetViewport((SDL_Renderer *)view->renderer, NULL);
|
||||
if(err){
|
||||
ARC_DEBUG_LOG(ARC_ERRNO_DATA, "in src/graphics/sdl/view.c ARC_View_Render(view, NULL), SDL_RenderSetViewport(...) returned: %d", err);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ARC_Rect ARC_View_GetBounds(ARC_View *view){
|
||||
return view->bounds;
|
||||
}
|
||||
|
|
@ -12,7 +12,7 @@ void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){
|
|||
return;
|
||||
}
|
||||
|
||||
if(SDL_Init(SDL_INIT_VIDEO) < 0){
|
||||
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0){
|
||||
arc_errno = ARC_ERRNO_INIT;
|
||||
printf("Error: initializing SDL\nSDL Error: %s\n", SDL_GetError());
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, enum ARC_Keyboar
|
|||
|
||||
case ARC_KEY_SPACE: return keyboard->keys[SDLK_SPACE ];
|
||||
case ARC_KEY_ESC: return keyboard->keys[SDLK_ESCAPE];
|
||||
case ARC_KEY_ENTER: return keyboard->keys[SDLK_RETURN];
|
||||
|
||||
default: return ARC_KEY_NONE;
|
||||
}
|
||||
|
|
|
|||
8
src/math/point.c
Normal file
8
src/math/point.c
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#include "arc/math/point.h"
|
||||
|
||||
ARC_FPoint ARC_FPoint_Lerp(ARC_FPoint *start, ARC_FPoint *end, float t){
|
||||
return (ARC_FPoint){
|
||||
(1.0f - t) * start->x + t * end->x,
|
||||
(1.0f - t) * start->y + t * end->y
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue