83 lines
2.3 KiB
C
83 lines
2.3 KiB
C
// openkknd - Unit Card System (SIMD Optimized)
|
|
// Header file for unit card implementation
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.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
|
|
|
|
/* Scalar batch helpers in unit_card.c; no AVX2 dependency. */
|
|
#define HAVE_AVX2 0
|
|
|
|
#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
|