/
Zamar_Terrier
/
TigorEngine
Обзор
Документация
Войти
/
Zamar_Terrier
/
TigorEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/Objects/sprite_object.c
132 строки
3 KB
Ilia Zamaruev
hot fix
17 ноя 2025, 17:55
17 ноя 2025, 17:55
732330d
Код
Авторство
О чём код?
#include "Objects/sprite_object.h" #include <vulkan/vulkan.h> #include "Variabels/engine_includes.h" #include "Core/pipeline.h" #include "Core/e_buffer.h" #include "Core/e_memory.h" #include "Core/e_blue_print.h" #include "Tools/e_shaders.h" #include "Tools/intersections2D.h" #include "Data/e_resource_data.h" #include "Data/e_resource_engine.h" void SpriteObjectCreateQuad(SpriteObject *so) { Vertex2D *verts = AllocateMemory(4, sizeof(Vertex2D)); verts[0].position.x = -1.0f; verts[0].position.y = -1.0f; verts[0].texCoord.x = 0; verts[0].texCoord.y = 0; verts[1].position.x = 1.0f; verts[1].position.y = -1.0f; verts[1].texCoord.x = 1.0f; verts[1].texCoord.y = 0; verts[2].position.x = 1.0f; verts[2].position.y = 1.0f; verts[2].texCoord.x = 1.0f; verts[2].texCoord.y = 1.0f; verts[3].position.x = -1.0f; verts[3].position.y = 1.0f; verts[3].texCoord.x = 0; verts[3].texCoord.y = 1.0f; for(int i=0;i < 4;i++) { verts[i].color = (vec4){ 1, 1, 1, 1}; } uint32_t *tIndx = AllocateMemory(6, sizeof(uint32_t)); uint32_t indx[] = { 0, 1, 2, 2, 3, 0 }; memcpy(tIndx, indx, 6 * sizeof(uint32_t)); VertextIterator vi = {0}; vi.i_index = 6; vi.v_index = 4; GraphicsObjectSetVertex(&so->go.graphObj, verts, sizeof(Vertex2D), tIndx, &vi); FreeMemory(verts); FreeMemory(tIndx); } int SpriteObjectInit(SpriteObject *so, DrawParam *dParam){ GameObject2DInit((GameObject2D *)so, TIGOR_GAME_OBJECT_TYPE_2D); SpriteObjectCreateQuad(so); if(dParam != NULL){ so->go.image = AllocateMemory(1, sizeof(GameObjectImage)); GameObject2DInitTextures((GameObject2D *)&so->go, dParam); } so->go.graphObj.num_shapes = 1; so->go.self.flags |= TIGOR_GAME_OBJECT_FLAG_PREINIT; return 1; } void SpriteObjectSetOffsetRect(SpriteObject *so, float x, float y, float width, float height) { Vertex2D *verts = so->go.graphObj.shapes[0].vParam.vertices; if(so->go.image->imgWidth == 0 || so->go.image->imgHeight == 0){ if(so->go.self.flags & TIGOR_GAME_OBJECT_FLAG_ERROR_IMAGE){ so->go.image->imgWidth = EMPTY_IMAGE_WIDTH; so->go.image->imgHeight = EMPTY_IMAGE_HEIGHT; return; } ImageFileData fileData; fileData.path = so->go.image->path; fileData.buffer = so->go.image->buffer; fileData.buff_size = so->go.image->size; ImageLoadFile(&fileData, 1); so->go.image->imgWidth = fileData.texWidth; so->go.image->imgHeight = fileData.texHeight; free(fileData.data); } float temp_x = x / so->go.image->imgWidth; float temp_y = y / so->go.image->imgHeight; width /= so->go.image->imgWidth; height /= so->go.image->imgHeight; verts[0].texCoord.x = temp_x; verts[0].texCoord.y = temp_y; verts[1].texCoord.x = temp_x + width; verts[1].texCoord.y = temp_y; verts[2].texCoord.x = temp_x + width; verts[2].texCoord.y = temp_y + height; verts[3].texCoord.x = temp_x; verts[3].texCoord.y = temp_y + height; BuffersUpdateVertex(&so->go.graphObj.shapes[0].vParam); } int SpriteObjectSpritesIsCollided(SpriteObject *sprite1, SpriteObject *sprite2){ return IntersectionSquareOOBSquareOOB(sprite1, sprite2).collisions.num_points > 0; }