Modul transform
Pembuat: Ikhsan Satriadi (241511080)
File: transform.h
Struktur Transform
Struktur Transform merepresentasikan posisi dan dimensi dari suatu objek dalam game. Struktur ini memiliki anggota sebagai berikut:
x: Koordinat x (horizontal) dari objek (dalam satuan pixel).y: Koordinat y (vertikal) dari objek (dalam satuan pixel).w: Lebar (width) dari objek (dalam satuan pixel).h: Tinggi (height) dari objek (dalam satuan pixel).
Interaksi dengan modul lain
Modul transform ini memiliki keterikatan yang erat dengan modul lain:
-
Bagian dari
EntityStruktur
Transformdigunakan sebagai salah satu anggota (subvariabel) di dalam strukturEntity. Contohnya, sebuah entity player akan memiliki variabelTransformuntuk menentukan lokasinya di layar.entity.htypedef struct { Transform transform; EntityRenderComponent render; Physics physics; } Entity;Modul
transformjuga berinteraksi erat dengan logika fisika entity & player di modulentity&physics. Informasi posisi (x,y) dan ukuran (w,h) dariTransformdigunakan untuk mengimplementasikan gravitasi (memperbarui posisiy) dan pergerakan player (memperbarui posisixdanyberdasarkan input dan kecepatan). -
Pengecekan collision dengan Tile Map
Informasi posisi dan ukuran dari struktur
Transformdigunakan di dalam modulentitydanleveluntuk melakukan pengecekan terhadap tile map. Ini penting untuk deteksi tabrakan antara objek game (yang memiliki komponenTransform) dengan tile map. Misalnya, untuk mencegah player berjalan menembus dinding atau platform.entity.cbool is_solid(Transform *transform) { int left = transform->x / TILE_SIZE; int right = (transform->x + transform->w - 1) / TILE_SIZE; int top = transform->y / TILE_SIZE; int bottom = (transform->y + transform->h - 1) / TILE_SIZE; for (int y = top; y <= bottom; y++) { for (int x = left; x <= right; x++) { if (x < 0 || x >= MAP_WIDTH || y < 0 || y >= MAP_HEIGHT) { return false; } for (size_t i = 0; i < sizeof(solid_tiles) / sizeof(solid_tiles[0]); i++) { if (current_level_map[y][x] == solid_tiles[i]) { return true; } } } } return false; }