23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 * POSSIBILITY OF SUCH DAMAGE. |
25 * POSSIBILITY OF SUCH DAMAGE. |
26 */ |
26 */ |
27 |
27 |
28 #include "ascension/core.h" |
28 #include <ascension/core.h> |
29 #include <ascension/ui.h> |
29 #include <ascension/ui.h> |
30 |
30 |
31 #include <cx/printf.h> |
31 #include <cx/printf.h> |
|
32 |
|
33 enum Textures2d { |
|
34 TEX_SHIP = 0, |
|
35 TEX2D_COUNT |
|
36 }; |
|
37 static AscTexture tex2d[TEX2D_COUNT]; |
|
38 #define TEXTURE_SHIP &tex2d[TEX_SHIP] |
|
39 |
|
40 static void init_textures(void) { |
|
41 asc_texture_init_2d(tex2d, TEX2D_COUNT); |
|
42 asc_texture_from_file(TEXTURE_SHIP, "ship.png"); |
|
43 } |
|
44 |
|
45 static void destroy_textures(void) { |
|
46 asc_texture_destroy(tex2d, TEX2D_COUNT); |
|
47 } |
32 |
48 |
33 static void update_fps_counter(AscSceneNode *node) { |
49 static void update_fps_counter(AscSceneNode *node) { |
34 static uint64_t last_fps = 0; |
50 static uint64_t last_fps = 0; |
35 static uint64_t debounce = ASC_NANOS_SECOND - 1; |
51 static uint64_t debounce = ASC_NANOS_SECOND - 1; |
36 debounce += asc_context.frame_nanos; |
52 debounce += asc_context.frame_nanos; |
73 .text = "Score: 0" |
89 .text = "Score: 0" |
74 ); |
90 ); |
75 asc_add_ui_node(node); |
91 asc_add_ui_node(node); |
76 } |
92 } |
77 |
93 |
78 static void free_spaceship(AscSceneNode *node) { |
|
79 asc_texture_destroy(&((AscSprite*)node)->tex); |
|
80 free(node); |
|
81 } |
|
82 |
|
83 static void create_spaceship(void) { |
94 static void create_spaceship(void) { |
84 // TODO: textures should be passed by pointers (and probably ref-counted) |
|
85 AscTexture texture; |
|
86 asc_texture_init_2d(&texture); |
|
87 asc_texture_from_file(&texture, "ship.png"); |
|
88 AscSceneNode *sprite = asc_sprite( |
95 AscSceneNode *sprite = asc_sprite( |
89 .texture = texture, |
96 .texture = TEXTURE_SHIP, |
90 .x = 250, |
97 .x = 250, |
91 .y = 300, |
98 .y = 300, |
92 .width = 64, |
99 .width = 64, |
93 .height = 64 |
100 .height = 64 |
94 ); |
101 ); |
95 |
102 |
96 // TODO: add to 2D scene instead of UI scene, once we have one |
103 // TODO: add to 2D scene instead of UI scene, once we have one |
97 asc_add_ui_node(sprite); |
104 asc_add_ui_node(sprite); |
98 |
105 |
99 // TODO: remove this hack by refactoring how textures work |
|
100 sprite->free_func = free_spaceship; |
|
101 |
|
102 // TODO: return something |
106 // TODO: return something |
103 } |
107 } |
104 |
108 |
105 int main(int argc, char** argv) { |
109 int main(int argc, char** argv) { |
106 asc_context_initialize(); |
110 asc_context_initialize(); |
107 if (asc_has_error()) { |
111 if (asc_has_error()) { |
108 SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, |
112 SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, |
109 "Fatal Error",asc_get_error(),NULL); |
113 "Fatal Error",asc_get_error(), NULL); |
110 return 1; |
114 return 1; |
111 } |
115 } |
112 #ifdef TEST_BUILD |
116 #ifdef TEST_BUILD |
113 asc_set_font_path("../../fonts"); |
117 asc_set_font_path("../../fonts"); |
114 asc_set_shader_path("../../shader"); |
118 asc_set_shader_path("../../shader"); |
120 // create window |
124 // create window |
121 AscWindowSettings settings; |
125 AscWindowSettings settings; |
122 asc_window_settings_init_defaults(&settings); |
126 asc_window_settings_init_defaults(&settings); |
123 settings.title = "Snake"; |
127 settings.title = "Snake"; |
124 asc_window_initialize(0, &settings); |
128 asc_window_initialize(0, &settings); |
|
129 |
|
130 // load textures |
|
131 init_textures(); |
125 |
132 |
126 // create UI elements |
133 // create UI elements |
127 create_fps_counter(); |
134 create_fps_counter(); |
128 create_score_counter(); |
135 create_score_counter(); |
129 |
136 |