Sprites now stored in LinkedList

main
Jonathan Hager 3 years ago
parent e97e905c1e
commit da0e77d24a
Signed by: JonathanHager
GPG Key ID: 34881E488569708C

@ -4,6 +4,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "../List/list.h"
//TODO: Macht es Sinn ein einzelnes "Game" struct zu haben, das alle möglichen Pointer hat zu allen arrays, camera, textures etc?
// Man hat einen Übergabeparameter mit dem man dann alles verändern kann, man muss nicht alles was man verändern will einzeln übergeben
@ -51,7 +52,7 @@ Vector2 GetRectangle(Vector2 rectStart){
return rectStart;
}
void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera){
void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, Camera2D *camera){
inputHandler->cursorPos.x = GetMousePosition().x;
inputHandler->cursorPos.y = GetMousePosition().y;
@ -75,7 +76,8 @@ void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount,
// Add Sprite
if(width + height <= 1){
SpriteAdd(sprites, spriteAmount, texture, inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2, inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2);
//SpriteAdd(sprites, spriteAmount, texture, inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2, inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2);
ListInsertBack(sprites, SpriteCreate(texture, inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2, inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2));
}
// Berechnung, welche Sprites ausgewählt wurden
@ -85,33 +87,37 @@ void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount,
printf("Auswahl: x: %f, y: %f, w: %f, h: %f\n", rect.x, rect.y, width, height);
int k;
float deltaX;
float deltaY;
for(k = 0; k < *spriteAmount; k++){
deltaX = (sprites+k)->x - (rect.x + camera->target.x);
deltaY = (sprites+k)->y - (rect.y + camera->target.y);
Node *current = sprites->head;
while (current != 0){
deltaX = current->data.x + current->data.texture->width/2 - (rect.x + camera->target.x);
deltaY = current->data.y + current->data.texture->height/2 - (rect.y + camera->target.y);
printf("deltaX: %f, deltaY: %f\n", deltaX, deltaY);
if(deltaX > 0 && deltaX < width && deltaY > 0 && deltaY < height){
(sprites + k)->selected = 1;
printf("%d selected\n", k);
current->data.selected = 1;
}
else{
(sprites + k)->selected = 0;
current->data.selected = 0;
}
current = current->next;
}
}
if(IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)){
int i;
for(i=0;i<*spriteAmount;i++){
if((sprites+i)->selected){
(sprites+i)->hasDestination = 1;
(sprites+i)->destX = inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2;
(sprites+i)->destY = inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2;
Node *current = sprites->head;
while (current != 0){
if(current->data.selected){
current->data.hasDestination = 1;
current->data.destX = inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2;
current->data.destY = inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2;
}
current = current->next;
}
}
}

@ -2,6 +2,7 @@
#define INPUTHANDLER_H_
#include "raylib.h"
#include "../sprite.h"
#include "../List/list.h"
typedef struct InputHandler{
int pressed;
@ -9,7 +10,7 @@ typedef struct InputHandler{
Vector2 cursorPos;
} InputHandler;
void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera);
void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, Camera2D *camera);
void keyboardInput(InputHandler *inputHandler, Camera2D *camera);

@ -6,6 +6,8 @@
Node * ListCreateNode(Sprite *data){
Node *new = (Node *) malloc(sizeof(Node));
new->data = *data;
new->next = 0;
new->prev = 0;
return new;
}
@ -64,3 +66,12 @@ List * ListInit(){
newList->tail = 0;
return newList;
}
void ListDrawAllSprites(List *list){
Node *current = list->head;
while(current != 0){
DrawSprite(&current->data);
current = current->next;
}
}

@ -26,5 +26,6 @@ void ListPrintForward(List *list);
void ListInsertFront(List *list, Sprite *data);
void ListInsertBack(List *list, Sprite *data);
List * ListInit();
void ListDrawAllSprites(List *list);
#endif

@ -11,21 +11,16 @@
int main(){
InitWindow(800, 450, "basic window");
Sprite sprites[100];
int spriteAmount = 0;
Texture2D texture;
texture = LoadTexture("assets/amulet.png");
List *spritesL = ListInit();
ListInsertBack(spritesL, SpriteCreate(&texture, 0, 0));
List *sprites = ListInit();
//ListPrintForward(sprites);
Sprite cursorSprite = {&texture, 450, 225};
SpriteAdd(sprites, &spriteAmount, &texture, 0, 0);
InputHandler inputHandler;
Camera2D camera = { 0 };
@ -46,45 +41,44 @@ int main(){
IsometricRendererRenderIsometricMap(map);
int i;
/*
for(i=0; i < spriteAmount; i++){
DrawSprite(sprites + i);
}
*/
DrawAllSpritesInList(spritesL);
ListDrawAllSprites(sprites);
EndMode2D();
// Moving cursor Sprite to Mouse Pos and drawing it
cursorSprite.x = inputHandler.cursorPos.x - texture.width / 2;
cursorSprite.y = inputHandler.cursorPos.y - texture.height / 2;
DrawSprite(&cursorSprite);
// User Input Handling
mouseInput(&inputHandler, sprites, &spriteAmount, &texture, &camera);
mouseInput(&inputHandler, sprites, &texture, &camera);
keyboardInput(&inputHandler, &camera);
// Sprites move towards their destination
float movementSpeed = 10.0f;
for(i=0; i < spriteAmount; i++){
if(sprites[i].hasDestination == 1){
Vector2 movement = {sprites[i].destX - (sprites + i)->x, sprites[i].destY - (sprites + i)->y};
Node *current = 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){
(sprites + i)->hasDestination = 0;
(sprites + i)->x = (sprites + i)->destX;
(sprites + i)->y = (sprites + i)->destY;
current->data.hasDestination = 0;
current->data.x = current->data.destX;
current->data.y = current->data.destY;
}
else{
movement = Vector2Normalize(movement);
movement = Vector2Scale(movement, movementSpeed);
(sprites + i)->x += movement.x;
(sprites + i)->y += movement.y;
current->data.x += movement.x;
current->data.y += movement.y;
}
}
current = current->next;
}
EndDrawing();

@ -2,7 +2,6 @@
#include "raylib.h"
#include <stdio.h>
#include <stdlib.h>
#include "List/list.h"
void SpriteAdd(Sprite *sprites, int *spriteAmount, Texture2D *texture, int x, int y){
if(*spriteAmount < 100){
@ -30,22 +29,8 @@ void DrawSprite(Sprite *sprite){
}
}
void DrawAllSpritesInList(List *list){
Node *current = list->head;
while(current != 0){
if(current->data.selected){
DrawTexture(current->data.texture, current->data.x, current->data.y, BLACK);
}
else{
DrawTexture(current->data.texture, current->data.x, current->data.y, WHITE);
}
current = current->next;
}
}
Sprite * SpriteCreate(Texture2D *texture, int x, int y){
Sprite newSprite = (Sprite *) malloc(sizeof(Sprite));
Sprite *newSprite = (Sprite *) malloc(sizeof(Sprite));
newSprite->texture = texture;
newSprite->x = x;

@ -1,6 +1,5 @@
#ifndef SPRITE_H_
#define SPRITE_H_
#include "List/list.h"
#include "raylib.h"
typedef struct Sprite {
@ -17,8 +16,6 @@ void SpriteAdd(Sprite *sprites, int *spriteAmount, Texture2D *texture, int x, in
void DrawSprite(Sprite *sprite);
void DrawAllSpritesInList(List *list);
Sprite * SpriteCreate(Texture2D *texture, int x, int y);
#endif

Loading…
Cancel
Save