OpenKKnD/engine-c/include/unit_card.h
2026-09-17 21:48:48 +02:00

83 lines
2.3 KiB
C

// openkknd - Unit Card System (SIMD Optimized)
// Header file for unit card implementation
#include <stdint.h>
#include <immintrin.h>
typedef struct {
char name[32];
char faction[16];
uint32_t cost;
uint32_t hp;
uint32_t max_hp;
uint32_t attack;
uint32_t defense;
uint32_t speed;
uint32_t range;
char description[256];
char image_path[128];
uint8_t unit_type;
uint8_t special_abilities_count;
char special_abilities[64][16];
} UnitCard;
typedef struct {
UnitCard **units;
size_t unit_count;
size_t capacity;
} UnitRegistry;
// Unit type constants
#define UNIT_INFANTRY 1
#define UNIT_VEHICLE 2
#define UNIT_SPECIAL 3
#define UNIT_ALL 0
// Flag for SIMD instructions
#define HAVE_AVX2 1
#ifdef __cplusplus
extern "C" {
#endif
// Core unit functions
UnitCard* create_unit_card(const char* name, const char* faction,
uint32_t cost, uint32_t hp, uint32_t attack,
uint32_t defense, uint32_t speed, uint32_t range,
const char* description, const char* image,
uint8_t unit_type);
void free_unit_card(UnitCard* unit);
// Registry functions
UnitRegistry* create_registry();
void destroy_registry(UnitRegistry* registry);
int add_unit(UnitRegistry* registry, UnitCard* unit);
UnitCard* get_unit_by_name(UnitRegistry* registry, const char* name);
UnitCard** get_units_by_faction(UnitRegistry* registry, const char* faction,
size_t* out_count);
UnitCard** get_units_by_type(UnitRegistry* registry, uint8_t unit_type,
size_t* out_count);
// SIMD optimized functions
void spread_damage_SIMD(const UnitCard* units[], size_t unit_count,
uint32_t damage, uint32_t* remaining_hp);
void apply_healing_SIMD(UnitCard** units, size_t unit_count,
uint32_t heal_amount);
// Serialization functions
int save_units_to_json(UnitRegistry* registry, const char* filepath);
int load_units_from_json(UnitRegistry* registry, const char* filepath);
// Memory management
void unit_card_to_json(UnitCard* unit, char* buffer, size_t buffer_size);
UnitCard* json_to_unit_card(const char* json_string);
// Performance statistics
void print_performance_stats(UnitRegistry* registry);
#ifdef __cplusplus
}
#endif