Upload wave collector - GGJ17 game
233
games/wave_collector/Makefile
Normal file
@ -0,0 +1,233 @@
|
||||
#**************************************************************************************************
|
||||
#
|
||||
# raylib - Advance Game
|
||||
#
|
||||
# makefile to compile advance game for desktop platforms, Raspberry Pi and HTML5 (emscripten)
|
||||
#
|
||||
# Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
#
|
||||
# This software is provided "as-is", without any express or implied warranty. In no event
|
||||
# will the authors be held liable for any damages arising from the use of this software.
|
||||
#
|
||||
# Permission is granted to anyone to use this software for any purpose, including commercial
|
||||
# applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||
#
|
||||
# 1. The origin of this software must not be misrepresented; you must not claim that you
|
||||
# wrote the original software. If you use this software in a product, an acknowledgment
|
||||
# in the product documentation would be appreciated but is not required.
|
||||
#
|
||||
# 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
||||
# as being the original software.
|
||||
#
|
||||
# 3. This notice may not be removed or altered from any source distribution.
|
||||
#
|
||||
#**************************************************************************************************
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
# define raylib platform to compile for
|
||||
# possible platforms: PLATFORM_DESKTOP PLATFORM_RPI PLATFORM_WEB
|
||||
# WARNING: To compile to HTML5, code must be redesigned to use emscripten.h and emscripten_set_main_loop()
|
||||
PLATFORM ?= PLATFORM_DESKTOP
|
||||
|
||||
# determine PLATFORM_OS in case PLATFORM_DESKTOP selected
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
# No uname.exe on MinGW!, but OS=Windows_NT on Windows! ifeq ($(UNAME),Msys) -> Windows
|
||||
ifeq ($(OS),Windows_NT)
|
||||
PLATFORM_OS=WINDOWS
|
||||
LIBPATH=win32
|
||||
else
|
||||
UNAMEOS:=$(shell uname)
|
||||
ifeq ($(UNAMEOS),Linux)
|
||||
PLATFORM_OS=LINUX
|
||||
LIBPATH=linux
|
||||
else
|
||||
ifeq ($(UNAMEOS),Darwin)
|
||||
PLATFORM_OS=OSX
|
||||
LIBPATH=osx
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# define compiler: gcc for C program, define as g++ for C++
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
# define emscripten compiler
|
||||
CC = emcc
|
||||
else
|
||||
ifeq ($(PLATFORM_OS),OSX)
|
||||
# define llvm compiler for mac
|
||||
CC = clang
|
||||
else
|
||||
# define default gcc compiler
|
||||
CC = gcc
|
||||
endif
|
||||
endif
|
||||
|
||||
# define compiler flags:
|
||||
# -O2 defines optimization level
|
||||
# -Wall turns on most, but not all, compiler warnings
|
||||
# -std=c99 use standard C from 1999 revision
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
CFLAGS = -O2 -Wall -std=gnu99 -fgnu89-inline
|
||||
else
|
||||
CFLAGS = -O2 -Wall -std=c99
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
CFLAGS = -O1 -Wall -std=c99 -s USE_GLFW=3 -s ALLOW_MEMORY_GROWTH=1 --preload-file resources --shell-file C:/raylib/raylib/templates/web_shell/shell.html
|
||||
#-s ASSERTIONS=1 # to check for memory allocation errors (-O1 disables it)
|
||||
#-s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing
|
||||
#-s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB)
|
||||
endif
|
||||
|
||||
#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
|
||||
|
||||
# define any directories containing required header files
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
INCLUDES = -I. -I../../src -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
# add standard directories for GNU/Linux
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
INCLUDES = -I. -I../src -I/usr/local/include/raylib/
|
||||
else
|
||||
INCLUDES = -I. -I../../src -IC:/raylib/raylib/src
|
||||
# external libraries headers
|
||||
# GLFW3
|
||||
INCLUDES += -I../../external/glfw3/include
|
||||
# OpenAL Soft
|
||||
INCLUDES += -I../../external/openal_soft/include
|
||||
endif
|
||||
endif
|
||||
|
||||
# define library paths containing required libs
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
LFLAGS = -L. -L../../src -L/opt/vc/lib
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
# add standard directories for GNU/Linux
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
LFLAGS = -L. -L../../src
|
||||
else
|
||||
LFLAGS = -L. -L../../src
|
||||
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||
LFLAGS += -LC:/GitHub/raylib/src
|
||||
endif
|
||||
# external libraries to link with
|
||||
# GLFW3
|
||||
LFLAGS += -L../../external/glfw3/lib/$(LIBPATH)
|
||||
ifneq ($(PLATFORM_OS),OSX)
|
||||
# OpenAL Soft
|
||||
LFLAGS += -L../../external/openal_soft/lib/$(LIBPATH)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
INCLUDES = -I. -I..
|
||||
LFLAGS = -L. -L..
|
||||
endif
|
||||
|
||||
# define any libraries to link into executable
|
||||
# if you want to link libraries (libname.so or libname.a), use the -lname
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
# libraries for Debian GNU/Linux desktop compiling
|
||||
# requires the following packages:
|
||||
# libglfw3-dev libopenal-dev libegl1-mesa-dev
|
||||
LIBS = -lraylib -lglfw3 -lGL -lopenal -lm -pthread -ldl -lX11 \
|
||||
-lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
||||
else
|
||||
ifeq ($(PLATFORM_OS),OSX)
|
||||
# libraries for OS X 10.9 desktop compiling
|
||||
# requires the following packages:
|
||||
# libglfw3-dev libopenal-dev libegl1-mesa-dev
|
||||
LIBS = -lraylib -lglfw3 -framework OpenGL -framework OpenAl -framework Cocoa
|
||||
else
|
||||
# libraries for Windows desktop compiling
|
||||
# NOTE: GLFW3 and OpenAL Soft libraries should be installed
|
||||
LIBS = -lraylib -lglfw3 -lopengl32 -lopenal32 -lwinmm -lgdi32
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
# libraries for Raspberry Pi compiling
|
||||
# NOTE: OpenAL Soft library should be installed (libopenal1 package)
|
||||
LIBS = -lraylib -lGLESv2 -lEGL -lpthread -lrt -lm -lbcm_host -lopenal
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
# NOTE: Set the correct path to libraylib.bc
|
||||
LIBS = libraylib.bc
|
||||
endif
|
||||
|
||||
# define additional parameters and flags for windows
|
||||
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||
# resources file contains windows exe icon
|
||||
# -Wl,--subsystem,windows hides the console window
|
||||
WINFLAGS = C:/raylib/raylib/src/resources -Wl,-allow-multiple-definition
|
||||
# -Wl,--subsystem,windows
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
EXT = .html
|
||||
endif
|
||||
|
||||
# define all screen object files required
|
||||
SCREENS = \
|
||||
screens/screen_logo.o \
|
||||
screens/screen_title.o \
|
||||
screens/screen_gameplay.o \
|
||||
screens/screen_ending.o \
|
||||
|
||||
# typing 'make' will invoke the default target entry called 'all',
|
||||
# in this case, the 'default' target entry is advance_game
|
||||
default: wave_collector
|
||||
|
||||
# compile template - advance_game
|
||||
wave_collector: wave_collector.c $(SCREENS)
|
||||
$(CC) -o $@$(EXT) $< $(SCREENS) $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
|
||||
|
||||
# compile screen LOGO
|
||||
screens/screen_logo.o: screens/screen_logo.c
|
||||
$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
|
||||
|
||||
# compile screen TITLE
|
||||
screens/screen_title.o: screens/screen_title.c
|
||||
$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
|
||||
|
||||
# compile screen GAMEPLAY
|
||||
screens/screen_gameplay.o: screens/screen_gameplay.c
|
||||
$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
|
||||
|
||||
# compile screen ENDING
|
||||
screens/screen_ending.o: screens/screen_ending.c
|
||||
$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
|
||||
|
||||
# clean everything
|
||||
clean:
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),OSX)
|
||||
find . -type f -perm +ugo+x -delete
|
||||
rm -f screens/*.o
|
||||
else
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
find . -type f -executable -delete
|
||||
rm -f screens/*.o
|
||||
else
|
||||
del screens\*.o *.exe
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
find . -type f -executable -delete
|
||||
rm -f screens/*.o
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
del screens/*.o *.html *.js
|
||||
endif
|
||||
@echo Cleaning done
|
||||
|
||||
# instead of defining every module one by one, we can define a pattern
|
||||
# this pattern below will automatically compile every module defined on $(OBJS)
|
||||
#%.exe : %.c
|
||||
# $(CC) -o $@ $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM)
|
||||
BIN
games/wave_collector/resources/audio/pause.wav
Normal file
BIN
games/wave_collector/resources/audio/sample_off.wav
Normal file
BIN
games/wave_collector/resources/audio/sample_on.wav
Normal file
BIN
games/wave_collector/resources/audio/start.wav
Normal file
BIN
games/wave_collector/resources/audio/wave.ogg
Normal file
100
games/wave_collector/resources/font.fnt
Normal file
@ -0,0 +1,100 @@
|
||||
info face=font size=57 bold=0 italic=0 charset= unicode= stretchH=100 smooth=1 aa=1 padding=2,2,2,2 spacing=0,0 outline=0
|
||||
common lineHeight=68 base=55 scaleW=512 scaleH=1024 pages=1 packed=0
|
||||
page id=0 file="font.png"
|
||||
chars count=95
|
||||
char id=32 x=2 y=57 width=0 height=0 xoffset=0 yoffset=55 xadvance=29 page=0 chnl=15
|
||||
char id=33 x=4 y=5 width=16 height=61 xoffset=2 yoffset=4 xadvance=16 page=0 chnl=15
|
||||
char id=34 x=22 y=10 width=25 height=27 xoffset=0 yoffset=8 xadvance=23 page=0 chnl=15
|
||||
char id=35 x=49 y=26 width=41 height=27 xoffset=-3 yoffset=24 xadvance=34 page=0 chnl=15
|
||||
char id=36 x=92 y=26 width=41 height=27 xoffset=-3 yoffset=24 xadvance=34 page=0 chnl=15
|
||||
char id=37 x=135 y=13 width=34 height=49 xoffset=-1 yoffset=12 xadvance=30 page=0 chnl=15
|
||||
char id=38 x=171 y=16 width=51 height=46 xoffset=-1 yoffset=14 xadvance=47 page=0 chnl=15
|
||||
char id=39 x=224 y=10 width=16 height=27 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
|
||||
char id=40 x=242 y=8 width=18 height=60 xoffset=0 yoffset=6 xadvance=16 page=0 chnl=15
|
||||
char id=41 x=262 y=8 width=18 height=60 xoffset=-1 yoffset=6 xadvance=15 page=0 chnl=15
|
||||
char id=42 x=282 y=11 width=29 height=32 xoffset=-1 yoffset=10 xadvance=25 page=0 chnl=15
|
||||
char id=43 x=313 y=25 width=29 height=29 xoffset=-2 yoffset=24 xadvance=24 page=0 chnl=15
|
||||
char id=44 x=344 y=45 width=16 height=29 xoffset=0 yoffset=44 xadvance=13 page=0 chnl=15
|
||||
char id=45 x=362 y=33 width=29 height=15 xoffset=1 yoffset=31 xadvance=28 page=0 chnl=15
|
||||
char id=46 x=393 y=45 width=16 height=17 xoffset=-1 yoffset=44 xadvance=13 page=0 chnl=15
|
||||
char id=47 x=411 y=6 width=37 height=61 xoffset=-3 yoffset=4 xadvance=30 page=0 chnl=15
|
||||
char id=48 x=450 y=14 width=43 height=49 xoffset=-1 yoffset=12 xadvance=39 page=0 chnl=15
|
||||
char id=49 x=2 y=91 width=22 height=49 xoffset=-1 yoffset=12 xadvance=19 page=0 chnl=15
|
||||
char id=50 x=26 y=91 width=42 height=49 xoffset=-1 yoffset=12 xadvance=39 page=0 chnl=15
|
||||
char id=51 x=70 y=91 width=41 height=48 xoffset=-2 yoffset=12 xadvance=35 page=0 chnl=15
|
||||
char id=52 x=113 y=91 width=40 height=48 xoffset=-2 yoffset=12 xadvance=35 page=0 chnl=15
|
||||
char id=53 x=155 y=91 width=35 height=49 xoffset=-1 yoffset=12 xadvance=31 page=0 chnl=15
|
||||
char id=54 x=192 y=91 width=48 height=48 xoffset=-2 yoffset=13 xadvance=43 page=0 chnl=15
|
||||
char id=55 x=242 y=91 width=38 height=49 xoffset=-2 yoffset=12 xadvance=33 page=0 chnl=15
|
||||
char id=56 x=282 y=91 width=49 height=49 xoffset=-2 yoffset=12 xadvance=43 page=0 chnl=15
|
||||
char id=57 x=333 y=91 width=46 height=49 xoffset=-2 yoffset=12 xadvance=41 page=0 chnl=15
|
||||
char id=58 x=381 y=102 width=16 height=37 xoffset=0 yoffset=24 xadvance=14 page=0 chnl=15
|
||||
char id=59 x=399 y=102 width=16 height=48 xoffset=0 yoffset=24 xadvance=15 page=0 chnl=15
|
||||
char id=60 x=417 y=98 width=41 height=42 xoffset=-2 yoffset=19 xadvance=37 page=0 chnl=15
|
||||
char id=61 x=460 y=104 width=29 height=30 xoffset=0 yoffset=25 xadvance=27 page=0 chnl=15
|
||||
char id=62 x=2 y=173 width=42 height=42 xoffset=-1 yoffset=19 xadvance=36 page=0 chnl=15
|
||||
char id=63 x=46 y=155 width=39 height=61 xoffset=0 yoffset=0 xadvance=35 page=0 chnl=15
|
||||
char id=64 x=87 y=167 width=58 height=53 xoffset=-1 yoffset=12 xadvance=54 page=0 chnl=15
|
||||
char id=65 x=147 y=169 width=47 height=47 xoffset=-2 yoffset=14 xadvance=41 page=0 chnl=15
|
||||
char id=66 x=196 y=169 width=47 height=46 xoffset=0 yoffset=14 xadvance=42 page=0 chnl=15
|
||||
char id=67 x=245 y=169 width=41 height=47 xoffset=-1 yoffset=14 xadvance=37 page=0 chnl=15
|
||||
char id=68 x=288 y=169 width=43 height=47 xoffset=0 yoffset=14 xadvance=39 page=0 chnl=15
|
||||
char id=69 x=333 y=169 width=43 height=46 xoffset=-2 yoffset=14 xadvance=39 page=0 chnl=15
|
||||
char id=70 x=378 y=169 width=40 height=46 xoffset=-2 yoffset=14 xadvance=35 page=0 chnl=15
|
||||
char id=71 x=420 y=169 width=41 height=46 xoffset=-2 yoffset=14 xadvance=37 page=0 chnl=15
|
||||
char id=72 x=463 y=167 width=43 height=48 xoffset=1 yoffset=12 xadvance=43 page=0 chnl=15
|
||||
char id=73 x=2 y=237 width=16 height=48 xoffset=1 yoffset=12 xadvance=15 page=0 chnl=15
|
||||
char id=74 x=20 y=239 width=25 height=46 xoffset=-2 yoffset=14 xadvance=21 page=0 chnl=15
|
||||
char id=75 x=47 y=238 width=45 height=49 xoffset=1 yoffset=14 xadvance=41 page=0 chnl=15
|
||||
char id=76 x=94 y=237 width=31 height=48 xoffset=1 yoffset=13 xadvance=28 page=0 chnl=15
|
||||
char id=77 x=127 y=239 width=51 height=46 xoffset=0 yoffset=14 xadvance=49 page=0 chnl=15
|
||||
char id=78 x=180 y=239 width=40 height=46 xoffset=0 yoffset=14 xadvance=39 page=0 chnl=15
|
||||
char id=79 x=222 y=239 width=51 height=46 xoffset=-2 yoffset=14 xadvance=45 page=0 chnl=15
|
||||
char id=80 x=275 y=239 width=44 height=46 xoffset=0 yoffset=14 xadvance=40 page=0 chnl=15
|
||||
char id=81 x=321 y=239 width=51 height=46 xoffset=-2 yoffset=14 xadvance=45 page=0 chnl=15
|
||||
char id=82 x=374 y=239 width=45 height=48 xoffset=0 yoffset=15 xadvance=41 page=0 chnl=15
|
||||
char id=83 x=421 y=238 width=34 height=48 xoffset=-2 yoffset=13 xadvance=28 page=0 chnl=15
|
||||
char id=84 x=457 y=239 width=41 height=47 xoffset=-2 yoffset=14 xadvance=36 page=0 chnl=15
|
||||
char id=85 x=2 y=306 width=46 height=46 xoffset=0 yoffset=15 xadvance=43 page=0 chnl=15
|
||||
char id=86 x=50 y=305 width=44 height=48 xoffset=-2 yoffset=13 xadvance=38 page=0 chnl=15
|
||||
char id=87 x=96 y=305 width=55 height=47 xoffset=-2 yoffset=13 xadvance=49 page=0 chnl=15
|
||||
char id=88 x=153 y=306 width=43 height=46 xoffset=-2 yoffset=14 xadvance=38 page=0 chnl=15
|
||||
char id=89 x=198 y=305 width=38 height=47 xoffset=-2 yoffset=13 xadvance=31 page=0 chnl=15
|
||||
char id=90 x=238 y=306 width=40 height=47 xoffset=-2 yoffset=14 xadvance=35 page=0 chnl=15
|
||||
char id=91 x=280 y=295 width=26 height=66 xoffset=1 yoffset=4 xadvance=24 page=0 chnl=15
|
||||
char id=92 x=308 y=293 width=37 height=61 xoffset=-4 yoffset=2 xadvance=29 page=0 chnl=15
|
||||
char id=93 x=347 y=295 width=26 height=66 xoffset=-2 yoffset=4 xadvance=22 page=0 chnl=15
|
||||
char id=94 x=375 y=294 width=28 height=17 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=15
|
||||
char id=95 x=405 y=346 width=49 height=15 xoffset=-1 yoffset=55 xadvance=45 page=0 chnl=15
|
||||
char id=96 x=456 y=295 width=20 height=17 xoffset=1 yoffset=3 xadvance=18 page=0 chnl=15
|
||||
char id=97 x=2 y=387 width=38 height=39 xoffset=-2 yoffset=22 xadvance=35 page=0 chnl=15
|
||||
char id=98 x=42 y=375 width=41 height=52 xoffset=1 yoffset=9 xadvance=38 page=0 chnl=15
|
||||
char id=99 x=85 y=387 width=38 height=39 xoffset=-2 yoffset=22 xadvance=34 page=0 chnl=15
|
||||
char id=100 x=125 y=375 width=41 height=52 xoffset=-2 yoffset=9 xadvance=38 page=0 chnl=15
|
||||
char id=101 x=168 y=387 width=38 height=39 xoffset=1 yoffset=22 xadvance=34 page=0 chnl=15
|
||||
char id=102 x=208 y=375 width=27 height=52 xoffset=1 yoffset=9 xadvance=23 page=0 chnl=15
|
||||
char id=103 x=237 y=387 width=41 height=52 xoffset=-2 yoffset=21 xadvance=38 page=0 chnl=15
|
||||
char id=104 x=280 y=375 width=37 height=51 xoffset=1 yoffset=9 xadvance=34 page=0 chnl=15
|
||||
char id=105 x=319 y=380 width=15 height=47 xoffset=2 yoffset=14 xadvance=16 page=0 chnl=15
|
||||
char id=106 x=336 y=378 width=25 height=60 xoffset=-6 yoffset=12 xadvance=18 page=0 chnl=15
|
||||
char id=107 x=363 y=375 width=40 height=51 xoffset=2 yoffset=9 xadvance=38 page=0 chnl=15
|
||||
char id=108 x=405 y=379 width=15 height=48 xoffset=1 yoffset=13 xadvance=16 page=0 chnl=15
|
||||
char id=109 x=422 y=387 width=47 height=39 xoffset=0 yoffset=22 xadvance=46 page=0 chnl=15
|
||||
char id=110 x=2 y=465 width=37 height=39 xoffset=0 yoffset=22 xadvance=34 page=0 chnl=15
|
||||
char id=111 x=41 y=465 width=41 height=40 xoffset=-1 yoffset=21 xadvance=37 page=0 chnl=15
|
||||
char id=112 x=84 y=465 width=41 height=52 xoffset=1 yoffset=22 xadvance=37 page=0 chnl=15
|
||||
char id=113 x=127 y=465 width=41 height=51 xoffset=-2 yoffset=22 xadvance=38 page=0 chnl=15
|
||||
char id=114 x=170 y=465 width=34 height=39 xoffset=1 yoffset=22 xadvance=30 page=0 chnl=15
|
||||
char id=115 x=206 y=462 width=37 height=42 xoffset=-2 yoffset=19 xadvance=31 page=0 chnl=15
|
||||
char id=116 x=245 y=453 width=36 height=52 xoffset=0 yoffset=9 xadvance=31 page=0 chnl=15
|
||||
char id=117 x=283 y=465 width=37 height=39 xoffset=0 yoffset=22 xadvance=35 page=0 chnl=15
|
||||
char id=118 x=322 y=463 width=35 height=41 xoffset=-2 yoffset=19 xadvance=28 page=0 chnl=15
|
||||
char id=119 x=359 y=463 width=51 height=41 xoffset=-2 yoffset=19 xadvance=44 page=0 chnl=15
|
||||
char id=120 x=412 y=465 width=35 height=40 xoffset=-2 yoffset=21 xadvance=29 page=0 chnl=15
|
||||
char id=121 x=449 y=465 width=37 height=52 xoffset=0 yoffset=22 xadvance=35 page=0 chnl=15
|
||||
char id=122 x=2 y=543 width=38 height=40 xoffset=-3 yoffset=21 xadvance=31 page=0 chnl=15
|
||||
char id=123 x=42 y=527 width=24 height=61 xoffset=-3 yoffset=5 xadvance=18 page=0 chnl=15
|
||||
char id=124 x=68 y=522 width=16 height=66 xoffset=1 yoffset=1 xadvance=15 page=0 chnl=15
|
||||
char id=125 x=86 y=527 width=24 height=61 xoffset=-1 yoffset=5 xadvance=18 page=0 chnl=15
|
||||
char id=126 x=112 y=526 width=32 height=16 xoffset=0 yoffset=4 xadvance=29 page=0 chnl=15
|
||||
char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=4 xadvance=29 page=0 chnl=15
|
||||
BIN
games/wave_collector/resources/font.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
games/wave_collector/resources/textures/background.png
Normal file
|
After Width: | Height: | Size: 821 KiB |
BIN
games/wave_collector/resources/textures/background_gameplay.png
Normal file
|
After Width: | Height: | Size: 548 KiB |
BIN
games/wave_collector/resources/textures/background_title.png
Normal file
|
After Width: | Height: | Size: 593 KiB |
BIN
games/wave_collector/resources/textures/icon_synchro.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
games/wave_collector/resources/textures/icon_warp.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
games/wave_collector/resources/textures/line.png
Normal file
|
After Width: | Height: | Size: 977 B |
BIN
games/wave_collector/resources/textures/logo_raylib.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
games/wave_collector/resources/textures/lose.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
games/wave_collector/resources/textures/player.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
games/wave_collector/resources/textures/sample_big.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
games/wave_collector/resources/textures/sample_mid.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
games/wave_collector/resources/textures/sample_small.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
games/wave_collector/resources/textures/title.png
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
games/wave_collector/resources/textures/win.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
111
games/wave_collector/screens/screen_ending.c
Normal file
@ -0,0 +1,111 @@
|
||||
/**********************************************************************************************
|
||||
*
|
||||
* raylib - Advance Game template
|
||||
*
|
||||
* Ending Screen Functions Definitions (Init, Update, Draw, Unload)
|
||||
*
|
||||
* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
*
|
||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
||||
* will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose, including commercial
|
||||
* applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not claim that you
|
||||
* wrote the original software. If you use this software in a product, an acknowledgment
|
||||
* in the product documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
||||
* as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*
|
||||
**********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
#include "screens.h"
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Global Variables Definition (local to this module)
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Ending screen global variables
|
||||
static int framesCounter;
|
||||
static int finishScreen;
|
||||
|
||||
static Texture2D texBackground;
|
||||
static Texture2D texWin;
|
||||
static Texture2D texLose;
|
||||
static Texture2D texLogo;
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Ending Screen Functions Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Ending Screen Initialization logic
|
||||
void InitEndingScreen(void)
|
||||
{
|
||||
// TODO: Initialize ENDING screen variables here!
|
||||
framesCounter = 0;
|
||||
finishScreen = 0;
|
||||
|
||||
texBackground = LoadTexture("resources/textures/background.png");
|
||||
texWin = LoadTexture("resources/textures/win.png");
|
||||
texLose = LoadTexture("resources/textures/lose.png");
|
||||
texLogo = LoadTexture("resources/textures/logo_raylib.png");
|
||||
}
|
||||
|
||||
// Ending Screen Update logic
|
||||
void UpdateEndingScreen(void)
|
||||
{
|
||||
// TODO: Update ENDING screen variables here!
|
||||
framesCounter++;
|
||||
|
||||
// Press enter to return to TITLE screen
|
||||
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
|
||||
{
|
||||
finishScreen = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Ending Screen Draw logic
|
||||
void DrawEndingScreen(void)
|
||||
{
|
||||
DrawTexture(texBackground, 0, 0, WHITE);
|
||||
|
||||
if (endingStatus == 1) // Win
|
||||
{
|
||||
DrawTexture(texWin, GetScreenWidth()/2 - texWin.width/2, 90, WHITE);
|
||||
DrawTextEx(font, "congrats, you got the wave!", (Vector2){ 200, 335 }, font.size, 0, WHITE);
|
||||
}
|
||||
else if (endingStatus == 2) // Lose
|
||||
{
|
||||
DrawTexture(texLose, GetScreenWidth()/2 - texWin.width/2, 90, WHITE);
|
||||
DrawTextEx(font, "it seems you lose the wave...", (Vector2){ 205, 335 }, font.size, 0, WHITE);
|
||||
}
|
||||
|
||||
DrawRectangle(0, GetScreenHeight() - 70, 560, 40, Fade(RAYWHITE, 0.8f));
|
||||
DrawText("(c) Developed by Ramon Santamaria (@raysan5)", 36, GetScreenHeight() - 60, 20, DARKBLUE);
|
||||
|
||||
DrawText("powered by", GetScreenWidth() - 162, GetScreenHeight() - 190, 20, DARKGRAY);
|
||||
DrawTexture(texLogo, GetScreenWidth() - 128 - 34, GetScreenHeight() - 128 - 36, WHITE);
|
||||
|
||||
if ((framesCounter > 80) && ((framesCounter/40)%2)) DrawTextEx(font, "mouse click to return", (Vector2){ 300, 464 }, font.size, 0, SKYBLUE);
|
||||
}
|
||||
|
||||
// Ending Screen Unload logic
|
||||
void UnloadEndingScreen(void)
|
||||
{
|
||||
// TODO: Unload ENDING screen variables here!
|
||||
UnloadTexture(texBackground);
|
||||
UnloadTexture(texWin);
|
||||
UnloadTexture(texLose);
|
||||
UnloadTexture(texLogo);
|
||||
}
|
||||
|
||||
// Ending Screen should finish?
|
||||
int FinishEndingScreen(void)
|
||||
{
|
||||
return finishScreen;
|
||||
}
|
||||
490
games/wave_collector/screens/screen_gameplay.c
Normal file
@ -0,0 +1,490 @@
|
||||
/**********************************************************************************************
|
||||
*
|
||||
* raylib - Advance Game template
|
||||
*
|
||||
* Gameplay Screen Functions Definitions (Init, Update, Draw, Unload)
|
||||
*
|
||||
* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
*
|
||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
||||
* will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose, including commercial
|
||||
* applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not claim that you
|
||||
* wrote the original software. If you use this software in a product, an acknowledgment
|
||||
* in the product documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
||||
* as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*
|
||||
**********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
#include "screens.h"
|
||||
|
||||
#include <stdlib.h> // Required for: malloc(), free()
|
||||
#include <math.h> // Required for: sqrtf(), asinf()
|
||||
|
||||
#define MAX_SAMPLES_SPEED 7 // Max speed for samples movement
|
||||
#define MIN_SAMPLES_SPEED 3 // Min speed for samples movement
|
||||
#define SAMPLES_SPACING 100 // Separation between samples in pixels
|
||||
#define SAMPLES_MULTIPLIER 500 // Defines sample data scaling value (it would be adjusted to MAX_GAME_HEIGHT)
|
||||
#define MAX_GAME_HEIGHT 400 // Defines max possible amplitude between samples (game area)
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Types and Structures Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
typedef struct Player {
|
||||
Vector2 position;
|
||||
Vector2 speed;
|
||||
int width;
|
||||
int height;
|
||||
Color color;
|
||||
} Player;
|
||||
|
||||
typedef struct Sample {
|
||||
float value;
|
||||
Vector2 position;
|
||||
int radius;
|
||||
bool active; // Define if sample is active (can be collected)
|
||||
bool collected; // Define if sample has been collected
|
||||
bool renderable; // Define if sample should be rendered
|
||||
Color color;
|
||||
} Sample;
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Global Variables Definition (local to this module)
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Gameplay screen global variables
|
||||
static int framesCounter;
|
||||
static int finishScreen;
|
||||
static bool pause;
|
||||
|
||||
// Player variables
|
||||
static Player player;
|
||||
static Rectangle playerArea; // Define player movement area (and sample collection limits)
|
||||
|
||||
static float warpCounter; // Time warp counter
|
||||
static float synchro; // Calculates collected samples relation [0..1]
|
||||
|
||||
//static int combo;
|
||||
//static int maxCombo;
|
||||
|
||||
static Rectangle waveRec;
|
||||
|
||||
// Samples variables
|
||||
static Sample *samples; // Game samples
|
||||
static int totalSamples = 0; // Total game samples (proportional to waveData num samples)
|
||||
static int collectedSamples; // Samples collected by player
|
||||
static int currentSample; // Last sample to go through player collect area
|
||||
static float samplesSpeed; // All samples move at the same speed
|
||||
static float waveTime; // Total sample time in ms
|
||||
|
||||
// Resources variables
|
||||
static Texture2D texBackground;
|
||||
static Texture2D texPlayer;
|
||||
static Texture2D texSampleSmall;
|
||||
static Texture2D texSampleMid;
|
||||
static Texture2D texSampleBig;
|
||||
static Texture2D texLine;
|
||||
|
||||
//static RenderTexture2D waveTarget;
|
||||
|
||||
static Sound fxSampleOn; // Collected sample sound
|
||||
static Sound fxSampleOff; // Miss sample sound
|
||||
static Sound fxWave; // Sound from wave sample
|
||||
static Sound fxPause; // Pause sound
|
||||
// Debug variables
|
||||
|
||||
//------------------------------------------------------------------------------------
|
||||
// Module Functions Declaration (local)
|
||||
//------------------------------------------------------------------------------------
|
||||
//static void DrawWave(float *waveData, int sampleCount, Rectangle bounds, Color color);
|
||||
//static void DrawWaveEx(float *waveData, int sampleCount, int playedSamples, Rectangle bounds, Color color);
|
||||
static void DrawSamples(Sample *samples, int sampleCount, int playedSamples, Rectangle bounds, Color color);
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Gameplay Screen Functions Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Gameplay Screen Initialization logic
|
||||
void InitGameplayScreen(void)
|
||||
{
|
||||
framesCounter = 0;
|
||||
finishScreen = 0;
|
||||
pause = false;
|
||||
endingStatus = 0;
|
||||
|
||||
// Textures loading
|
||||
texBackground = LoadTexture("resources/textures/background_gameplay.png");
|
||||
texPlayer = LoadTexture("resources/textures/player.png");
|
||||
texSampleSmall = LoadTexture("resources/textures/sample_small.png");
|
||||
texSampleMid = LoadTexture("resources/textures/sample_mid.png");
|
||||
texSampleBig = LoadTexture("resources/textures/sample_big.png");
|
||||
texLine = LoadTexture("resources/textures/line.png");
|
||||
|
||||
waveRec = (Rectangle){ 32, 32, 1280 - 64, 105 };
|
||||
//RenderTexture2D waveTarget = LoadRenderTexture(waveRec.width, waveRec.height);
|
||||
|
||||
// Sound loading
|
||||
fxSampleOn = LoadSound("resources/audio/sample_on.wav");
|
||||
fxSampleOff = LoadSound("resources/audio/sample_off.wav");
|
||||
fxPause = LoadSound("resources/audio/pause.wav");
|
||||
|
||||
SetSoundVolume(fxSampleOn, 0.6f);
|
||||
SetSoundVolume(fxPause, 0.5f);
|
||||
|
||||
// Initialize player data
|
||||
playerArea = (Rectangle){ 200, 160, 80, 400 };
|
||||
|
||||
player.width = 20;
|
||||
player.height = 60;
|
||||
player.speed = (Vector2){ 15, 15 };
|
||||
player.color = GOLD;
|
||||
player.position = (Vector2){ playerArea.x + playerArea.width/2 - texPlayer.width/2,
|
||||
playerArea.y + playerArea.height/2 - texPlayer.height/2 };
|
||||
|
||||
warpCounter = 395;
|
||||
synchro = 0.2f;
|
||||
|
||||
// Initialize wave and samples data
|
||||
Wave wave = LoadWave("resources/audio/wave.ogg");
|
||||
float *waveData = GetWaveData(wave);
|
||||
//printf("Wave total samples: %i\n", wave.sampleCount);
|
||||
|
||||
// We calculate the required parameters to adjust audio time to gameplay time
|
||||
// that way samples collected correspond to audio playing
|
||||
// Synchonization is not perfect due to possible rounding issues (float to int)
|
||||
waveTime = wave.sampleCount/wave.sampleRate; // Total sample time in seconds
|
||||
float requiredSamples = (MAX_SAMPLES_SPEED*waveTime*60 - 1000)/SAMPLES_SPACING;
|
||||
int samplesDivision = (int)(wave.sampleCount/requiredSamples);
|
||||
|
||||
totalSamples = wave.sampleCount/samplesDivision;
|
||||
|
||||
fxWave = LoadSoundFromWave(wave);
|
||||
UnloadWave(wave);
|
||||
|
||||
collectedSamples = 0;
|
||||
|
||||
// Init samples
|
||||
samples = (Sample *)malloc(totalSamples*sizeof(Sample));
|
||||
|
||||
// Normalize wave data (min vs max values) to scale properly
|
||||
float minSampleValue = 0.0f;
|
||||
float maxSampleValue = 0.0f;
|
||||
|
||||
for (int i = 0; i < totalSamples; i++)
|
||||
{
|
||||
if (waveData[i*samplesDivision] < minSampleValue) minSampleValue = waveData[i*samplesDivision];
|
||||
if (waveData[i*samplesDivision] > maxSampleValue) maxSampleValue = waveData[i*samplesDivision];
|
||||
}
|
||||
|
||||
float sampleScaleFactor = 1.0f/(maxSampleValue - minSampleValue); // 400 pixels maximum size
|
||||
|
||||
// Initialize samples
|
||||
for (int i = 0; i < totalSamples; i++)
|
||||
{
|
||||
samples[i].value = waveData[i*samplesDivision]*sampleScaleFactor; // Normalized value [-1.0..1.0]
|
||||
samples[i].position.x = player.position.x + 1000 + i*SAMPLES_SPACING;
|
||||
|
||||
samples[i].position.y = GetScreenHeight()/2 + samples[i].value*SAMPLES_MULTIPLIER;
|
||||
|
||||
if (samples[i].position.y > GetScreenHeight()/2 + MAX_GAME_HEIGHT/2) samples[i].position.y = GetScreenHeight()/2 - MAX_GAME_HEIGHT/2;
|
||||
else if (samples[i].position.y < GetScreenHeight()/2 - MAX_GAME_HEIGHT/2) samples[i].position.y = GetScreenHeight()/2 + MAX_GAME_HEIGHT/2;
|
||||
|
||||
samples[i].radius = 6;
|
||||
samples[i].active = true;
|
||||
samples[i].collected = false;
|
||||
samples[i].color = RED;
|
||||
}
|
||||
|
||||
samplesSpeed = MAX_SAMPLES_SPEED;
|
||||
currentSample = 0;
|
||||
|
||||
// We already saved the samples we needed for the game, we can free waveData
|
||||
free(waveData);
|
||||
|
||||
// Load and start playing music
|
||||
// NOTE: Music is loaded in main code base
|
||||
PlayMusicStream(music);
|
||||
}
|
||||
|
||||
// Gameplay Screen Update logic
|
||||
void UpdateGameplayScreen(void)
|
||||
{
|
||||
if (IsKeyPressed('P'))
|
||||
{
|
||||
PlaySound(fxPause);
|
||||
pause = !pause;
|
||||
|
||||
if (pause) PauseMusicStream(music);
|
||||
else ResumeMusicStream(music);
|
||||
}
|
||||
|
||||
if (!pause)
|
||||
{
|
||||
framesCounter++; // Time starts counting to awake enemies
|
||||
|
||||
// Player movement logic (mouse)
|
||||
player.position.y = GetMousePosition().y;
|
||||
|
||||
// Player movement logic (keyboard)
|
||||
if (IsKeyDown(KEY_W)) player.position.y -= player.speed.y;
|
||||
else if (IsKeyDown(KEY_S)) player.position.y += player.speed.y;
|
||||
|
||||
// Player movement logic (gamepad)
|
||||
/*
|
||||
if (IsGamepadAvailable(GAMEPAD_PLAYER1))
|
||||
{
|
||||
Vector2 movement = { 0.0f };
|
||||
|
||||
movement.x = GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_LEFT_X);
|
||||
movement.y = GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_LEFT_Y);
|
||||
|
||||
player.position.x += movement.x*0.1f; // Scale gamepad movement value
|
||||
player.position.y += movement.y*0.1f; // Scale gamepad movement value
|
||||
}
|
||||
*/
|
||||
|
||||
// Player logic: check player area limits
|
||||
if (player.position.x < playerArea.x) player.position.x = playerArea.x;
|
||||
else if ((player.position.x + player.width) > (playerArea.x + playerArea.width)) player.position.x = playerArea.x + playerArea.width - player.width;
|
||||
|
||||
if (player.position.y < playerArea.y) player.position.y = playerArea.y;
|
||||
else if ((player.position.y + player.height) > (playerArea.y + playerArea.height)) player.position.y = playerArea.y + playerArea.height - player.height;
|
||||
|
||||
// Samples logic
|
||||
for (int i = 0; i < totalSamples; i++)
|
||||
{
|
||||
// Samples movement logic
|
||||
samples[i].position.x -= samplesSpeed;
|
||||
|
||||
if (((samples[i].position.x + samples[i].radius) > -SAMPLES_SPACING) &&
|
||||
((samples[i].position.x - samples[i].radius) < GetScreenWidth())) samples[i].renderable = true;
|
||||
else samples[i].renderable = false;
|
||||
|
||||
// Samples catch logic
|
||||
if (!samples[i].collected && CheckCollisionCircleRec(samples[i].position, samples[i].radius, (Rectangle){ (int)player.position.x, (int)player.position.y, player.width, player.height }))
|
||||
{
|
||||
samples[i].collected = true;
|
||||
collectedSamples++;
|
||||
synchro += 0.02;
|
||||
|
||||
if (synchro >= 1.0f) synchro = 1.0f;
|
||||
|
||||
// Set sound pitch depending on sample position (base pitch: 1.0f)
|
||||
// NOTE: waveData[i*WAVE_SAMPLES_DIV] is scaled to [0.3..1.7]
|
||||
SetSoundPitch(fxSampleOn, samples[i].value*1.4f + 0.7f);
|
||||
|
||||
PlaySound(fxSampleOn);
|
||||
}
|
||||
|
||||
if ((samples[i].position.x - samples[i].radius) < player.position.x)
|
||||
{
|
||||
currentSample = i; // Register last sample going out range
|
||||
|
||||
if (samples[i].active)
|
||||
{
|
||||
samples[i].active = false;
|
||||
|
||||
//PlaySound(fxSampleOff);
|
||||
|
||||
if (!samples[i].collected) synchro -= 0.05f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IsKeyDown(KEY_SPACE) && (warpCounter > 0))
|
||||
{
|
||||
warpCounter--;
|
||||
if (warpCounter < 0) warpCounter = 0;
|
||||
|
||||
samplesSpeed -= 0.1f;
|
||||
if (samplesSpeed <= MIN_SAMPLES_SPEED) samplesSpeed = MIN_SAMPLES_SPEED;
|
||||
|
||||
SetMusicPitch(music, samplesSpeed/MAX_SAMPLES_SPEED);
|
||||
}
|
||||
else
|
||||
{
|
||||
warpCounter++;
|
||||
if (warpCounter > 395) warpCounter = 395;
|
||||
|
||||
samplesSpeed += 0.1f;
|
||||
if (samplesSpeed >= MAX_SAMPLES_SPEED) samplesSpeed = MAX_SAMPLES_SPEED;
|
||||
|
||||
SetMusicPitch(music, samplesSpeed/MAX_SAMPLES_SPEED);
|
||||
}
|
||||
|
||||
// Check ending conditions
|
||||
if (currentSample >= totalSamples)
|
||||
{
|
||||
StopMusicStream(music);
|
||||
endingStatus = 1; // Win
|
||||
finishScreen = 1;
|
||||
}
|
||||
|
||||
if (synchro <= 0.0f)
|
||||
{
|
||||
synchro = 0.0f;
|
||||
StopMusicStream(music);
|
||||
endingStatus = 2; // Loose
|
||||
finishScreen = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Gameplay Screen Draw logic
|
||||
void DrawGameplayScreen(void)
|
||||
{
|
||||
// Draw background
|
||||
DrawTexture(texBackground, 0, 0, WHITE);
|
||||
|
||||
// Screen elements drawing
|
||||
//DrawRectangleLines(playerArea.x, playerArea.y, playerArea.width, playerArea.height, BLUE);
|
||||
DrawRectangle(0, GetScreenHeight()/2 - 1, GetScreenWidth(), 2, Fade(BLUE, 0.3f));
|
||||
//DrawRectangleLines(0, GetScreenHeight()/2 - MAX_GAME_HEIGHT/2, GetScreenWidth(), MAX_GAME_HEIGHT, GRAY);
|
||||
|
||||
// Draw samples
|
||||
for (int i = 0; i < totalSamples - 1; i++)
|
||||
{
|
||||
if (samples[i].renderable)
|
||||
{
|
||||
Color col = samples[i].color;
|
||||
|
||||
if (i < (currentSample + 1)) col = Fade(DARKGRAY, 0.5f);
|
||||
else col = WHITE;
|
||||
|
||||
//DrawCircleV(samples[i].position, samples[i].radius, col);
|
||||
if (!samples[i].collected)
|
||||
{
|
||||
// TODO: Draw differnt size samples
|
||||
DrawTexture(texSampleMid, samples[i].position.x - texSampleMid.width/2, samples[i].position.y - texSampleMid.height/2, col);
|
||||
|
||||
}
|
||||
|
||||
if (i < (currentSample + 1)) col = Fade(GRAY, 0.3f);
|
||||
else col = Fade(WHITE, 0.5f);
|
||||
|
||||
// Draw line between samples
|
||||
//DrawLine(samples[i].position.x, samples[i].position.y, samples[i + 1].position.x, samples[i + 1].position.y, col);
|
||||
|
||||
float dx = samples[i + 1].position.x - samples[i].position.x;
|
||||
float dy = samples[i + 1].position.y - samples[i].position.y;
|
||||
float d = sqrtf(dx*dx + dy*dy);
|
||||
float angle = asinf(dy/d);
|
||||
|
||||
// TODO: Draw lines using textures - IMPROVE!
|
||||
//DrawTextureEx(texLine, (Vector2){ samples[i].position.x - 2, samples[i].position.y - 2 }, -RAD2DEG*angle, d/SAMPLES_SPACING, col);
|
||||
|
||||
DrawTexturePro(texLine, (Rectangle){ 0, 0, texLine.width, texLine.height },
|
||||
(Rectangle){ samples[i].position.x, samples[i].position.y, (float)texLine.width*d/SAMPLES_SPACING, texLine.height },
|
||||
(Vector2){ 0, (float)texLine.height/2 }, -RAD2DEG*angle, col);
|
||||
}
|
||||
}
|
||||
|
||||
// Draw player
|
||||
//DrawRectangle((int)player.position.x, (int)player.position.y, player.width, player.height, player.color);
|
||||
DrawTexture(texPlayer, player.position.x - 32, player.position.y - 24, WHITE);
|
||||
|
||||
// Draw pause message
|
||||
if (pause) DrawTextEx(font, "WAVE PAUSED", (Vector2){ 235, 400 }, font.size*2, 0, WHITE);
|
||||
|
||||
// Draw number of samples
|
||||
//DrawText(FormatText("%05i", collectedSamples), 900, 200, 40, GRAY);
|
||||
//DrawText(FormatText("%05i", totalSamples), 900, 250, 40, GRAY);
|
||||
DrawTextEx(font, FormatText("%05i / %05i", collectedSamples, totalSamples), (Vector2){810, 170}, font.size, -2, SKYBLUE);
|
||||
|
||||
// Draw synchonicity level
|
||||
DrawRectangle(99, 622, 395, 32, Fade(RAYWHITE, 0.8f));
|
||||
|
||||
if (synchro <= 0.3f) DrawRectangle(99, 622, synchro*395, 32, Fade(RED, 0.8f));
|
||||
else if (synchro <= 0.8f) DrawRectangle(99, 622, synchro*395, 32, Fade(ORANGE,0.8f));
|
||||
else if (synchro < 1.0f) DrawRectangle(99, 622, synchro*395, 32, Fade(LIME,0.8f));
|
||||
else DrawRectangle(99, 622, synchro*395, 32, Fade(GREEN, 0.9f));
|
||||
|
||||
DrawRectangleLines(99, 622, 395, 32, MAROON);
|
||||
|
||||
if (synchro == 1.0f) DrawTextEx(font, FormatText("%02i%%", (int)(synchro*100)), (Vector2){99 + 390, 600}, font.size, -2, GREEN);
|
||||
else DrawTextEx(font, FormatText("%02i%%", (int)(synchro*100)), (Vector2){99 + 390, 600}, font.size, -2, SKYBLUE);
|
||||
|
||||
// Draw time warp coool-down bar
|
||||
DrawRectangle(754, 622, 395, 32, Fade(RAYWHITE, 0.8f));
|
||||
DrawRectangle(754, 622, warpCounter, 32, Fade(SKYBLUE, 0.8f));
|
||||
DrawRectangleLines(754, 622, 395, 32, DARKGRAY);
|
||||
//DrawText(FormatText("%02i%%", (int)(synchro*100)), 754 + 410, 628, 20, DARKGRAY);
|
||||
DrawTextEx(font, FormatText("%02i%%", (int)((float)warpCounter/395.0f*100.0f)), (Vector2){754 + 390, 600}, font.size, -2, SKYBLUE);
|
||||
|
||||
// Draw wave
|
||||
// NOTE: Old drawing method, replaced by rendertarget
|
||||
DrawSamples(samples, totalSamples, currentSample, waveRec, MAROON);
|
||||
DrawRectangle(waveRec.x + (int)currentSample*1240/totalSamples, waveRec.y, 2, 99, DARKGRAY);
|
||||
//DrawRectangleLines(20, 20, 1240, 140, DARKGRAY);
|
||||
//DrawRectangle(20, 150, (float)currentSample/totalSamples*1240, 10, GRAY);
|
||||
|
||||
// TODO: Draw wave using render target --> It FAILS! Need to review...
|
||||
/*
|
||||
BeginTextureMode(waveTarget);
|
||||
DrawSamples(samples, totalSamples, currentSample, (Rectangle){ 0, 0, waveTarget.texture.width, waveTarget.texture.height }, MAROON);
|
||||
EndTextureMode();
|
||||
|
||||
DrawTextureEx(waveTarget.texture, (Vector2){ waveRec.x, waveRec.y }, 0.0f, 1.0f, WHITE);
|
||||
*/
|
||||
}
|
||||
|
||||
// Gameplay Screen Unload logic
|
||||
void UnloadGameplayScreen(void)
|
||||
{
|
||||
// Unload textures
|
||||
UnloadTexture(texBackground);
|
||||
UnloadTexture(texPlayer);
|
||||
UnloadTexture(texSampleSmall);
|
||||
UnloadTexture(texSampleMid);
|
||||
UnloadTexture(texSampleBig);
|
||||
UnloadTexture(texLine);
|
||||
|
||||
//UnloadRenderTexture(waveTarget);
|
||||
|
||||
// Unload sounds
|
||||
UnloadSound(fxSampleOn);
|
||||
UnloadSound(fxSampleOff);
|
||||
UnloadSound(fxWave);
|
||||
UnloadSound(fxPause);
|
||||
|
||||
//free(samples); // Unload game samples (crashes game)
|
||||
}
|
||||
|
||||
// Gameplay Screen should finish?
|
||||
int FinishGameplayScreen(void)
|
||||
{
|
||||
return finishScreen;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------
|
||||
// Module Functions Definitions (local)
|
||||
//------------------------------------------------------------------------------------
|
||||
|
||||
// Draw samples in wave form (including already played samples in a different color!)
|
||||
// NOTE: For proper visualization, MSAA x4 is recommended, alternatively
|
||||
// it should be rendered to a bigger texture and then scaled down with
|
||||
// bilinear/trilinear texture filtering
|
||||
static void DrawSamples(Sample *samples, int sampleCount, int playedSamples, Rectangle bounds, Color color)
|
||||
{
|
||||
// NOTE: We just pick a sample to draw every increment
|
||||
float sampleIncrementX = (float)bounds.width/sampleCount;
|
||||
|
||||
Color col = color;
|
||||
|
||||
for (int i = 0; i < sampleCount - 1; i++)
|
||||
{
|
||||
if (i < playedSamples) col = GRAY;
|
||||
else col = color;
|
||||
|
||||
DrawLineV((Vector2){ (float)bounds.x + (float)i*sampleIncrementX, (float)(bounds.y + bounds.height/2) + samples[i].value*bounds.height },
|
||||
(Vector2){ (float)bounds.x + (float)(i + 1)*sampleIncrementX, (float)(bounds.y + bounds.height/2) + + samples[i + 1].value*bounds.height }, col);
|
||||
}
|
||||
}
|
||||
181
games/wave_collector/screens/screen_logo.c
Normal file
@ -0,0 +1,181 @@
|
||||
/**********************************************************************************************
|
||||
*
|
||||
* raylib - Advance Game template
|
||||
*
|
||||
* Logo Screen Functions Definitions (Init, Update, Draw, Unload)
|
||||
*
|
||||
* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
*
|
||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
||||
* will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose, including commercial
|
||||
* applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not claim that you
|
||||
* wrote the original software. If you use this software in a product, an acknowledgment
|
||||
* in the product documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
||||
* as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*
|
||||
**********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
#include "screens.h"
|
||||
|
||||
#define LOGO_RECS_SIDE 16
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Global Variables Definition (local to this module)
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Logo screen global variables
|
||||
static int framesCounter;
|
||||
static int finishScreen;
|
||||
|
||||
static int logoPositionX;
|
||||
static int logoPositionY;
|
||||
|
||||
static int lettersCount;
|
||||
|
||||
static int topSideRecWidth;
|
||||
static int leftSideRecHeight;
|
||||
|
||||
static int bottomSideRecWidth;
|
||||
static int rightSideRecHeight;
|
||||
|
||||
static int state; // Tracking animation states (State Machine)
|
||||
static float alpha = 1.0f; // Useful for fading
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Logo Screen Functions Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Logo Screen Initialization logic
|
||||
void InitLogoScreen(void)
|
||||
{
|
||||
// Initialize LOGO screen variables here!
|
||||
finishScreen = 0;
|
||||
framesCounter = 0;
|
||||
lettersCount = 0;
|
||||
|
||||
logoPositionX = GetScreenWidth()/2 - 128;
|
||||
logoPositionY = GetScreenHeight()/2 - 128;
|
||||
|
||||
topSideRecWidth = LOGO_RECS_SIDE;
|
||||
leftSideRecHeight = LOGO_RECS_SIDE;
|
||||
bottomSideRecWidth = LOGO_RECS_SIDE;
|
||||
rightSideRecHeight = LOGO_RECS_SIDE;
|
||||
|
||||
state = 0;
|
||||
alpha = 1.0f;
|
||||
}
|
||||
|
||||
// Logo Screen Update logic
|
||||
void UpdateLogoScreen(void)
|
||||
{
|
||||
// Update LOGO screen variables here!
|
||||
if (state == 0) // State 0: Small box blinking
|
||||
{
|
||||
framesCounter++;
|
||||
|
||||
if (framesCounter == 80)
|
||||
{
|
||||
state = 1;
|
||||
framesCounter = 0; // Reset counter... will be used later...
|
||||
|
||||
PlayMusicStream(music); // Start playing music... ;)
|
||||
}
|
||||
}
|
||||
else if (state == 1) // State 1: Top and left bars growing
|
||||
{
|
||||
topSideRecWidth += 8;
|
||||
leftSideRecHeight += 8;
|
||||
|
||||
if (topSideRecWidth == 256) state = 2;
|
||||
}
|
||||
else if (state == 2) // State 2: Bottom and right bars growing
|
||||
{
|
||||
bottomSideRecWidth += 8;
|
||||
rightSideRecHeight += 8;
|
||||
|
||||
if (bottomSideRecWidth == 256) state = 3;
|
||||
}
|
||||
else if (state == 3) // State 3: Letters appearing (one by one)
|
||||
{
|
||||
framesCounter++;
|
||||
|
||||
if (lettersCount < 10)
|
||||
{
|
||||
if (framesCounter/15) // Every 12 frames, one more letter!
|
||||
{
|
||||
lettersCount++;
|
||||
framesCounter = 0;
|
||||
}
|
||||
}
|
||||
else // When all letters have appeared, just fade out everything
|
||||
{
|
||||
if (framesCounter > 200)
|
||||
{
|
||||
alpha -= 0.02f;
|
||||
|
||||
if (alpha <= 0.0f)
|
||||
{
|
||||
alpha = 0.0f;
|
||||
finishScreen = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Logo Screen Draw logic
|
||||
void DrawLogoScreen(void)
|
||||
{
|
||||
if (state == 0)
|
||||
{
|
||||
if ((framesCounter/10)%2) DrawRectangle(logoPositionX, logoPositionY, 16, 16, BLACK);
|
||||
}
|
||||
else if (state == 1)
|
||||
{
|
||||
DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, BLACK);
|
||||
DrawRectangle(logoPositionX, logoPositionY, 16, leftSideRecHeight, BLACK);
|
||||
}
|
||||
else if (state == 2)
|
||||
{
|
||||
DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, BLACK);
|
||||
DrawRectangle(logoPositionX, logoPositionY, 16, leftSideRecHeight, BLACK);
|
||||
|
||||
DrawRectangle(logoPositionX + 240, logoPositionY, 16, rightSideRecHeight, BLACK);
|
||||
DrawRectangle(logoPositionX, logoPositionY + 240, bottomSideRecWidth, 16, BLACK);
|
||||
}
|
||||
else if (state == 3)
|
||||
{
|
||||
DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, Fade(BLACK, alpha));
|
||||
DrawRectangle(logoPositionX, logoPositionY + 16, 16, leftSideRecHeight - 32, Fade(BLACK, alpha));
|
||||
|
||||
DrawRectangle(logoPositionX + 240, logoPositionY + 16, 16, rightSideRecHeight - 32, Fade(BLACK, alpha));
|
||||
DrawRectangle(logoPositionX, logoPositionY + 240, bottomSideRecWidth, 16, Fade(BLACK, alpha));
|
||||
|
||||
DrawRectangle(GetScreenWidth()/2 - 112, GetScreenHeight()/2 - 112, 224, 224, Fade(RAYWHITE, alpha));
|
||||
|
||||
DrawText(SubText("raylib", 0, lettersCount), GetScreenWidth()/2 - 44, GetScreenHeight()/2 + 48, 50, Fade(BLACK, alpha));
|
||||
|
||||
if (framesCounter > 20) DrawText("powered by", logoPositionX, logoPositionY - 27, 20, Fade(DARKGRAY, alpha));
|
||||
}
|
||||
}
|
||||
|
||||
// Logo Screen Unload logic
|
||||
void UnloadLogoScreen(void)
|
||||
{
|
||||
// Unload LOGO screen variables here!
|
||||
}
|
||||
|
||||
// Logo Screen should finish?
|
||||
int FinishLogoScreen(void)
|
||||
{
|
||||
return finishScreen;
|
||||
}
|
||||
112
games/wave_collector/screens/screen_title.c
Normal file
@ -0,0 +1,112 @@
|
||||
/**********************************************************************************************
|
||||
*
|
||||
* raylib - Advance Game template
|
||||
*
|
||||
* Title Screen Functions Definitions (Init, Update, Draw, Unload)
|
||||
*
|
||||
* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
*
|
||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
||||
* will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose, including commercial
|
||||
* applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not claim that you
|
||||
* wrote the original software. If you use this software in a product, an acknowledgment
|
||||
* in the product documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
||||
* as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*
|
||||
**********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
#include "screens.h"
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Global Variables Definition (local to this module)
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Title screen global variables
|
||||
static int framesCounter;
|
||||
static int finishScreen;
|
||||
|
||||
static Texture2D texBackground;
|
||||
static Texture2D texTitle;
|
||||
static Texture2D texLogo;
|
||||
|
||||
static float titleAlpha = 0.0f;
|
||||
|
||||
static Sound fxStart;
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Title Screen Functions Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Title Screen Initialization logic
|
||||
void InitTitleScreen(void)
|
||||
{
|
||||
// Initialize TITLE screen variables here!
|
||||
framesCounter = 0;
|
||||
finishScreen = 0;
|
||||
|
||||
texBackground = LoadTexture("resources/textures/background_title.png");
|
||||
texTitle = LoadTexture("resources/textures/title.png");
|
||||
texLogo = LoadTexture("resources/textures/logo_raylib.png");
|
||||
|
||||
fxStart = LoadSound("resources/audio/start.wav");
|
||||
}
|
||||
|
||||
// Title Screen Update logic
|
||||
void UpdateTitleScreen(void)
|
||||
{
|
||||
// Update TITLE screen variables here!
|
||||
framesCounter++;
|
||||
|
||||
titleAlpha += 0.005f;
|
||||
|
||||
if (titleAlpha >= 1.0f) titleAlpha = 1.0f;
|
||||
|
||||
// Press enter to change to ATTIC screen
|
||||
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
|
||||
{
|
||||
PlaySound(fxStart);
|
||||
StopMusicStream(music);
|
||||
finishScreen = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Title Screen Draw logic
|
||||
void DrawTitleScreen(void)
|
||||
{
|
||||
DrawTexture(texBackground, 0, 0, WHITE);
|
||||
DrawTexture(texTitle, GetScreenWidth()/2 - texTitle.width/2, -25, Fade(WHITE, titleAlpha));
|
||||
|
||||
DrawRectangle(0, GetScreenHeight() - 70, 560, 40, Fade(RAYWHITE, 0.8f));
|
||||
DrawText("(c) Developed by Ramon Santamaria (@raysan5)", 36, GetScreenHeight() - 60, 20, DARKBLUE);
|
||||
|
||||
DrawText("powered by", GetScreenWidth() - 162, GetScreenHeight() - 190, 20, DARKGRAY);
|
||||
DrawTexture(texLogo, GetScreenWidth() - 128 - 34, GetScreenHeight() - 128 - 36, WHITE);
|
||||
|
||||
if ((framesCounter > 160) && ((framesCounter/40)%2)) DrawTextEx(font, "mouse click to start", (Vector2){ 325, 500 }, font.size, 0, SKYBLUE);
|
||||
}
|
||||
|
||||
// Title Screen Unload logic
|
||||
void UnloadTitleScreen(void)
|
||||
{
|
||||
// Unload TITLE screen variables here!
|
||||
UnloadTexture(texBackground);
|
||||
UnloadTexture(texTitle);
|
||||
UnloadTexture(texLogo);
|
||||
|
||||
UnloadSound(fxStart);
|
||||
}
|
||||
|
||||
// Title Screen should finish?
|
||||
int FinishTitleScreen(void)
|
||||
{
|
||||
return finishScreen;
|
||||
}
|
||||
87
games/wave_collector/screens/screens.h
Normal file
@ -0,0 +1,87 @@
|
||||
/**********************************************************************************************
|
||||
*
|
||||
* raylib - Advance Game template
|
||||
*
|
||||
* Screens Functions Declarations (Init, Update, Draw, Unload)
|
||||
*
|
||||
* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
*
|
||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
||||
* will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose, including commercial
|
||||
* applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not claim that you
|
||||
* wrote the original software. If you use this software in a product, an acknowledgment
|
||||
* in the product documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
||||
* as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*
|
||||
**********************************************************************************************/
|
||||
|
||||
#ifndef SCREENS_H
|
||||
#define SCREENS_H
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Types and Structures Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
typedef enum GameScreen { LOGO = 0, TITLE, GAMEPLAY, ENDING } GameScreen;
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Global Variables Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
GameScreen currentScreen;
|
||||
SpriteFont font;
|
||||
Music music;
|
||||
int endingStatus; // 1 - Win, 2 - Lose
|
||||
//char *sampleFilename;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" { // Prevents name mangling of functions
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Logo Screen Functions Declaration
|
||||
//----------------------------------------------------------------------------------
|
||||
void InitLogoScreen(void);
|
||||
void UpdateLogoScreen(void);
|
||||
void DrawLogoScreen(void);
|
||||
void UnloadLogoScreen(void);
|
||||
int FinishLogoScreen(void);
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Title Screen Functions Declaration
|
||||
//----------------------------------------------------------------------------------
|
||||
void InitTitleScreen(void);
|
||||
void UpdateTitleScreen(void);
|
||||
void DrawTitleScreen(void);
|
||||
void UnloadTitleScreen(void);
|
||||
int FinishTitleScreen(void);
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Gameplay Screen Functions Declaration
|
||||
//----------------------------------------------------------------------------------
|
||||
void InitGameplayScreen(void);
|
||||
void UpdateGameplayScreen(void);
|
||||
void DrawGameplayScreen(void);
|
||||
void UnloadGameplayScreen(void);
|
||||
int FinishGameplayScreen(void);
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Ending Screen Functions Declaration
|
||||
//----------------------------------------------------------------------------------
|
||||
void InitEndingScreen(void);
|
||||
void UpdateEndingScreen(void);
|
||||
void DrawEndingScreen(void);
|
||||
void UnloadEndingScreen(void);
|
||||
int FinishEndingScreen(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // SCREENS_H
|
||||
310
games/wave_collector/wave_collector.c
Normal file
@ -0,0 +1,310 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* GLOBAL GAME JAM 2017 - WAVE COLLECTOR
|
||||
*
|
||||
* The ultimate wave particles collector is here!
|
||||
* You must follow the wave and collect all the particles
|
||||
* The level is actually the wave and the wave is the level!
|
||||
* Be fast! Be smart! Be the best wave collector!
|
||||
*
|
||||
* This game has been created using raylib (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2017 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
#include "screens/screens.h" // NOTE: Defines global variable: currentScreen
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(PLATFORM_WEB)
|
||||
#include <emscripten/emscripten.h>
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Global Variables Definition (local to this module)
|
||||
//----------------------------------------------------------------------------------
|
||||
const int screenWidth = 1280;
|
||||
const int screenHeight = 720;
|
||||
|
||||
// Required variables to manage screen transitions (fade-in, fade-out)
|
||||
float transAlpha = 0;
|
||||
bool onTransition = false;
|
||||
bool transFadeOut = false;
|
||||
int transFromScreen = -1;
|
||||
int transToScreen = -1;
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Local Functions Declaration
|
||||
//----------------------------------------------------------------------------------
|
||||
void TransitionToScreen(int screen);
|
||||
void ChangeToScreen(int screen); // No transition effect
|
||||
void UpdateTransition(void);
|
||||
void DrawTransition(void);
|
||||
|
||||
void UpdateDrawFrame(void); // Update and Draw one frame
|
||||
|
||||
//static const char *GetExtension(const char *fileName);
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Main entry point
|
||||
//----------------------------------------------------------------------------------
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// Initialization
|
||||
//---------------------------------------------------------
|
||||
/*
|
||||
#if !defined(PLATFORM_WEB)
|
||||
// TODO: Add support for dropped files on the exe
|
||||
sampleFilename = (char *)malloc(256);
|
||||
if (argc > 1)
|
||||
{
|
||||
if ((strcmp(GetExtension(argv[1]), "ogg") == 0) ||
|
||||
(strcmp(GetExtension(argv[1]), "wav") == 0))
|
||||
{
|
||||
strcpy(sampleFilename, argv[1]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
*/
|
||||
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
||||
InitWindow(screenWidth, screenHeight, "GGJ17 - WAVE COLLECTOR");
|
||||
|
||||
// Global data loading (assets that must be available in all screens, i.e. fonts)
|
||||
InitAudioDevice();
|
||||
|
||||
font = LoadSpriteFont("resources/font.fnt");
|
||||
music = LoadMusicStream("resources/audio/wave.ogg");
|
||||
|
||||
SetMusicVolume(music, 1.0f);
|
||||
|
||||
// Setup and Init first screen
|
||||
currentScreen = LOGO;
|
||||
InitLogoScreen();
|
||||
//InitTitleScreen();
|
||||
//InitGameplayScreen();
|
||||
//InitEndingScreen();
|
||||
|
||||
#if defined(PLATFORM_WEB)
|
||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||
#else
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
UpdateDrawFrame();
|
||||
}
|
||||
#endif
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
switch (currentScreen)
|
||||
{
|
||||
case LOGO: UnloadLogoScreen(); break;
|
||||
case TITLE: UnloadTitleScreen(); break;
|
||||
case GAMEPLAY: UnloadGameplayScreen(); break;
|
||||
case ENDING: UnloadEndingScreen(); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
// Unload all global loaded data (i.e. fonts) here!
|
||||
UnloadSpriteFont(font);
|
||||
UnloadMusicStream(music);
|
||||
|
||||
CloseAudioDevice();
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void TransitionToScreen(int screen)
|
||||
{
|
||||
onTransition = true;
|
||||
transFromScreen = currentScreen;
|
||||
transToScreen = screen;
|
||||
}
|
||||
|
||||
void ChangeToScreen(int screen)
|
||||
{
|
||||
switch (currentScreen)
|
||||
{
|
||||
case LOGO: UnloadLogoScreen(); break;
|
||||
case TITLE: UnloadTitleScreen(); break;
|
||||
case GAMEPLAY: UnloadGameplayScreen(); break;
|
||||
case ENDING: UnloadEndingScreen(); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
switch (screen)
|
||||
{
|
||||
case LOGO: InitLogoScreen(); break;
|
||||
case TITLE: InitTitleScreen(); break;
|
||||
case GAMEPLAY: InitGameplayScreen(); break;
|
||||
case ENDING: InitEndingScreen(); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
currentScreen = screen;
|
||||
}
|
||||
|
||||
void UpdateTransition(void)
|
||||
{
|
||||
if (!transFadeOut)
|
||||
{
|
||||
transAlpha += 0.05f;
|
||||
|
||||
if (transAlpha >= 1.0)
|
||||
{
|
||||
transAlpha = 1.0;
|
||||
|
||||
switch (transFromScreen)
|
||||
{
|
||||
case LOGO: UnloadLogoScreen(); break;
|
||||
case TITLE: UnloadTitleScreen(); break;
|
||||
case GAMEPLAY: UnloadGameplayScreen(); break;
|
||||
case ENDING: UnloadEndingScreen(); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
switch (transToScreen)
|
||||
{
|
||||
case LOGO:
|
||||
{
|
||||
InitLogoScreen();
|
||||
currentScreen = LOGO;
|
||||
} break;
|
||||
case TITLE:
|
||||
{
|
||||
InitTitleScreen();
|
||||
currentScreen = TITLE;
|
||||
} break;
|
||||
case GAMEPLAY:
|
||||
{
|
||||
InitGameplayScreen();
|
||||
currentScreen = GAMEPLAY;
|
||||
} break;
|
||||
case ENDING:
|
||||
{
|
||||
InitEndingScreen();
|
||||
currentScreen = ENDING;
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
transFadeOut = true;
|
||||
}
|
||||
}
|
||||
else // Transition fade out logic
|
||||
{
|
||||
transAlpha -= 0.05f;
|
||||
|
||||
if (transAlpha <= 0)
|
||||
{
|
||||
transAlpha = 0;
|
||||
transFadeOut = false;
|
||||
onTransition = false;
|
||||
transFromScreen = -1;
|
||||
transToScreen = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DrawTransition(void)
|
||||
{
|
||||
DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, transAlpha));
|
||||
}
|
||||
|
||||
// Update and draw game frame
|
||||
void UpdateDrawFrame(void)
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
if (!onTransition)
|
||||
{
|
||||
switch(currentScreen)
|
||||
{
|
||||
case LOGO:
|
||||
{
|
||||
UpdateLogoScreen();
|
||||
|
||||
if (FinishLogoScreen()) TransitionToScreen(TITLE);
|
||||
|
||||
} break;
|
||||
case TITLE:
|
||||
{
|
||||
UpdateTitleScreen();
|
||||
|
||||
if (FinishTitleScreen() == 1)
|
||||
{
|
||||
StopMusicStream(music);
|
||||
TransitionToScreen(GAMEPLAY);
|
||||
}
|
||||
|
||||
} break;
|
||||
case GAMEPLAY:
|
||||
{
|
||||
UpdateGameplayScreen();
|
||||
|
||||
if (FinishGameplayScreen() == 1) TransitionToScreen(ENDING);
|
||||
//else if (FinishGameplayScreen() == 2) TransitionToScreen(TITLE);
|
||||
|
||||
} break;
|
||||
case ENDING:
|
||||
{
|
||||
UpdateEndingScreen();
|
||||
|
||||
if (FinishEndingScreen() == 1) TransitionToScreen(TITLE);
|
||||
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Update transition (fade-in, fade-out)
|
||||
UpdateTransition();
|
||||
}
|
||||
|
||||
if (currentScreen != ENDING) UpdateMusicStream(music);
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
switch(currentScreen)
|
||||
{
|
||||
case LOGO: DrawLogoScreen(); break;
|
||||
case TITLE: DrawTitleScreen(); break;
|
||||
case GAMEPLAY: DrawGameplayScreen(); break;
|
||||
case ENDING: DrawEndingScreen(); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
if (onTransition) DrawTransition();
|
||||
|
||||
//DrawFPS(10, 10);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
/*
|
||||
#if !defined(PLATFORM_WEB)
|
||||
// Get the extension for a filename
|
||||
static const char *GetExtension(const char *fileName)
|
||||
{
|
||||
const char *dot = strrchr(fileName, '.');
|
||||
if (!dot || dot == fileName) return "";
|
||||
return (dot + 1);
|
||||
}
|
||||
#endif
|
||||
*/
|
||||