You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.2 KiB
103 lines
3.2 KiB
#include "raylib.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "sprite.h"
|
|
#include "Input/inputHandler.h"
|
|
#include "raymath.h"
|
|
#include "List/list.h"
|
|
#include "IsometricMap/isometricRenderer.h"
|
|
#include "IsometricMap/isometricMap.h"
|
|
#include "game.h"
|
|
|
|
int main(){
|
|
|
|
InitWindow(800, 450, "basic window");
|
|
|
|
Game *game = GameInit();
|
|
|
|
// Test of the IsometricMapUnproject Function
|
|
//Vector2 asdf = {500, 600};
|
|
//printf("unprojected %f %f\n",asdf.x, asdf.y);
|
|
//IsometricMapProject(layers[0], &camera, asdf.x, asdf.y, &asdf);
|
|
//printf("projected %f %f\n",asdf.x, asdf.y);
|
|
//IsometricMapUnproject(layers[0], &camera, asdf.x, asdf.y, &asdf);
|
|
//printf("unprojected %f %f\n",asdf.x, asdf.y);
|
|
|
|
// Hides the operating systems own cursor
|
|
HideCursor();
|
|
SetTargetFPS(60);
|
|
while(!WindowShouldClose()){
|
|
|
|
BeginDrawing();
|
|
|
|
ClearBackground(RAYWHITE);
|
|
|
|
BeginMode2D(*(game->camera));
|
|
|
|
IsometricRendererRenderIsometricMap(*game->layers, game->inputHandler);
|
|
|
|
ListDrawAllSprites(game->sprites, *game->layers[0], game->camera);
|
|
|
|
EndMode2D();
|
|
|
|
// Moving cursor Sprite to Mouse Pos and drawing it
|
|
game->cursorSprite->x = game->inputHandler->cursorPos.x;
|
|
game->cursorSprite->y = game->inputHandler->cursorPos.y;
|
|
DrawSpriteToScreen(game->cursorSprite);
|
|
|
|
// User Input Handling
|
|
mouseInput(game->inputHandler, game->sprites, game->worker+4, game->camera, *game->layers);
|
|
keyboardInput(game->inputHandler, game->camera);
|
|
|
|
//cursor Positions test
|
|
//printf("Cursor Pos: %f %f\n", inputHandler.cursorPos.x, inputHandler.cursorPos.y);
|
|
//printf("Cursor World Pos: %f %f\n", inputHandler.cursorWorldPos.x, inputHandler.cursorWorldPos.y);
|
|
|
|
// Sprites move towards their destination
|
|
float movementSpeed = 10.0f;
|
|
Node *current = game->sprites->head;
|
|
|
|
while (current != 0){
|
|
if(current->data.hasDestination == 1){
|
|
Vector2 movement = {
|
|
current->data.destX - current->data.x,
|
|
current->data.destY - current->data.y
|
|
};
|
|
|
|
if(Vector2Length(movement) < movementSpeed){
|
|
current->data.hasDestination = 0;
|
|
current->data.x = current->data.destX;
|
|
current->data.y = current->data.destY;
|
|
}
|
|
else{
|
|
movement = Vector2Normalize(movement);
|
|
movement = Vector2Scale(movement, movementSpeed);
|
|
current->data.x += movement.x;
|
|
current->data.y += movement.y;
|
|
|
|
// Change sprite according to direction
|
|
Vector2 nullvektor = {0,0};
|
|
float f = Vector2Angle(movement, nullvektor);
|
|
printf("Angle: %f\n", f);
|
|
f /= 3.14;
|
|
f *= 3.5;
|
|
f += 3.5;
|
|
int index = (int) f;
|
|
current->data.texture = game->worker + index;
|
|
}
|
|
}
|
|
|
|
current = current->next;
|
|
}
|
|
|
|
DrawFPS(GetScreenWidth() - 95, 10);
|
|
|
|
EndDrawing();
|
|
}
|
|
|
|
CloseWindow();
|
|
|
|
return 0;
|
|
|
|
}
|