Add tokenizer
This commit is contained in:
@@ -10,6 +10,8 @@ add_subdirectory(libs/raylib-4.5.0)
|
||||
set(
|
||||
lib_sources
|
||||
libs/cute_tiled.c
|
||||
src/utils/tokenizer.c
|
||||
src/utils/tokenizer.h
|
||||
)
|
||||
|
||||
set(
|
||||
|
||||
16682
assets/maps/test.tmj
16682
assets/maps/test.tmj
File diff suppressed because it is too large
Load Diff
@@ -3,5 +3,6 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#endif //PIXELDEFENSE_COMMON_H
|
||||
|
||||
22
src/main.c
22
src/main.c
@@ -2,6 +2,13 @@
|
||||
#include <raylib.h>
|
||||
#include <cute_tiled.h>
|
||||
|
||||
|
||||
static void drawTile(Texture2D texture, int tid, int tileSetWidth, int size, Vector2 pos) {
|
||||
Rectangle rec = {(tid % tileSetWidth) * size, (tid / tileSetWidth) * size, size, size};
|
||||
|
||||
DrawTextureRec(texture, rec, pos, WHITE);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
|
||||
const int screenWidth = 1280;
|
||||
@@ -54,10 +61,10 @@ int main(void) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (IsKeyDown(KEY_W)) camera.target.y -= 1;
|
||||
if (IsKeyDown(KEY_S)) camera.target.y += 1;
|
||||
if (IsKeyDown(KEY_A)) camera.target.x -= 1;
|
||||
if (IsKeyDown(KEY_D)) camera.target.x += 1;
|
||||
if (IsKeyDown(KEY_W)) camera.target.y -= 20;
|
||||
if (IsKeyDown(KEY_S)) camera.target.y += 20;
|
||||
if (IsKeyDown(KEY_A)) camera.target.x -= 20;
|
||||
if (IsKeyDown(KEY_D)) camera.target.x += 20;
|
||||
|
||||
if (IsKeyDown(KEY_Q)) camera.rotation--;
|
||||
if (IsKeyDown(KEY_E)) camera.rotation++;
|
||||
@@ -72,9 +79,7 @@ int main(void) {
|
||||
for (int y = 0; y < layer->height; y++) {
|
||||
for (int x = 0; x < layer->width; x++) {
|
||||
int tile = layer->data[y * layer->width + x] - 1;
|
||||
Rectangle rec = {(tile % tileSetWidth) * 16, (tile / tileSetWidth) * 16, 16, 16};
|
||||
|
||||
DrawTextureRec(terrainTexture, rec, tilePos, WHITE);
|
||||
drawTile(terrainTexture, tile, tileSetWidth, 16, tilePos);
|
||||
tilePos.x += 16;
|
||||
}
|
||||
tilePos.y += 16;
|
||||
@@ -86,8 +91,7 @@ int main(void) {
|
||||
while (object) {
|
||||
Vector2 pos = {object->x, object->y};
|
||||
int gid = object->gid - 1;
|
||||
Rectangle rec = {(gid % tileSetWidth) * 16, (gid / tileSetWidth) * 16, 16, 16};
|
||||
DrawTextureRec(terrainTexture, rec, pos, WHITE);
|
||||
drawTile(terrainTexture, gid, tileSetWidth, 16, pos);
|
||||
object = object->next;
|
||||
}
|
||||
|
||||
|
||||
47
src/utils/tokenizer.c
Normal file
47
src/utils/tokenizer.c
Normal file
@@ -0,0 +1,47 @@
|
||||
#include "tokenizer.h"
|
||||
|
||||
Tokenizer initTokenizer(const char *source) {
|
||||
int line = source ? 1 : 0;
|
||||
return (Tokenizer) {source, line};
|
||||
}
|
||||
|
||||
static bool isWhitespace(char c) {
|
||||
switch (c) {
|
||||
case '\n':
|
||||
case ' ':
|
||||
case '\r':
|
||||
case '\t':
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static void skipWhitespace(Tokenizer *tokenizer) {
|
||||
while (1) {
|
||||
char c = *tokenizer->current;
|
||||
if (c == '\n') {
|
||||
tokenizer->line++;
|
||||
continue;
|
||||
}
|
||||
if (!isWhitespace(c))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Token scanToken(Tokenizer *tokenizer) {
|
||||
skipWhitespace(tokenizer);
|
||||
Token token = {tokenizer->current, 0, tokenizer->line};
|
||||
|
||||
if (*tokenizer->current == '\0') {
|
||||
token.start = NULL;
|
||||
return token;
|
||||
}
|
||||
|
||||
while (!isWhitespace(*tokenizer->current) || *tokenizer->current != '\0') {
|
||||
tokenizer->current++;
|
||||
}
|
||||
token.length = (int) (tokenizer->current - token.start);
|
||||
|
||||
return token;
|
||||
}
|
||||
20
src/utils/tokenizer.h
Normal file
20
src/utils/tokenizer.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef PIXELDEFENSE_TOKENIZER_H
|
||||
#define PIXELDEFENSE_TOKENIZER_H
|
||||
|
||||
#include "../common.h"
|
||||
|
||||
typedef struct Token {
|
||||
const char *start;
|
||||
int length;
|
||||
int line;
|
||||
} Token;
|
||||
|
||||
typedef struct Tokenizer {
|
||||
const char *current;
|
||||
int line;
|
||||
} Tokenizer;
|
||||
|
||||
Tokenizer initTokenizer(const char *source);
|
||||
Token scanToken(Tokenizer *tokenizer);
|
||||
|
||||
#endif //PIXELDEFENSE_TOKENIZER_H
|
||||
Reference in New Issue
Block a user