home *** CD-ROM | disk | FTP | other *** search
/ Merciful 3 / Merciful_Release_3.bin / software / e / elanv1.00.lha / elan / src / elan.h < prev    next >
C/C++ Source or Header  |  1996-06-07  |  7KB  |  257 lines

  1.  
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5.  
  6. typedef enum zeta_factor
  7.     {
  8.     zeta_1,
  9.     zeta_solar,
  10.     zeta_temperature,
  11.     zeta_air,
  12.     zeta_water,
  13.     zeta_growth,
  14.     ZETA_FACTOR_NUMBER
  15.     } zeta_factor;
  16.  
  17. typedef enum request_mode
  18.     {
  19.     demand,
  20.     commit,
  21.     REQUEST_MODE_NUMBER
  22.     } request_mode;
  23.  
  24. typedef enum behaviour
  25.     {
  26.     ignore,
  27.     bump,
  28.     attack,
  29.     mate,
  30.     jump,
  31.     BEHAVIOURS_NUMBER
  32.     } behaviour;
  33.  
  34. typedef enum event
  35.     {
  36.     no_news,
  37.     extension_failure,
  38.     PRIMARY_EVENT_NUMBER,   /* Da qui in poi implicano il trascorrere del tempo */
  39.     time_passed,
  40.     shuttle_arrival,
  41.     shuttle_departure,
  42.     colony_end,
  43.     EVENT_NUMBER
  44.     } event;
  45.  
  46. typedef struct channel
  47.     {
  48.     /* I primi due fungono da id */
  49.     resource_type throughput_type;
  50.     int num;
  51.     struct cell *start_loc;
  52.     struct cell *end_loc;
  53.     struct cell *break_loc;
  54.     int length;
  55.     real current_throughput;
  56.     real target_throughput;
  57.     real demanded_throughput;
  58.     struct device *provider[MAX_PROVIDERS_NUMBER];
  59.     } channel;
  60.  
  61. typedef struct device_id
  62.     {
  63.     device_class class;
  64.     int num;
  65.     } device_id;
  66.  
  67. typedef struct device
  68.     {
  69.     device_id id;
  70.     struct cell *loc;
  71.     resource_type output_type;
  72.     real current_output;
  73.     real target_output;
  74.     real available_output;  /* >= 0 */
  75.     real surplus_output;    /* libero in segno (< 0 per output insufficiente) */
  76.     boolean demand_driven;
  77.     real eta;               /* 0 <= eta <= 1, eta = 1 per impianto ideale */
  78.     real current_state;
  79.     real max_state;
  80.     real kappa;             /* 0 < kappa < 1 */
  81.     real current_capacity;
  82.     real max_capacity;
  83.     real unit_consume[PRIMARY_RT_NUMBER];
  84.     channel *input[PRIMARY_RT_NUMBER];
  85.     zeta_factor zeta_f;     /* 0 <= calc_zeta(zeta_f, loc) <= 1, = 1 per ambiente ideale */
  86.     real sigma;             /* Coefficiente di usura */
  87.     real tau;               /* Break chance, 0 < tau < 1 */
  88.     boolean broken;
  89.     } device;
  90.  
  91. typedef struct program
  92.     {
  93.     program_tag tag;
  94.     real selection_wits;
  95.     real selection_bias;
  96.     real ground_tropism;
  97.     real unexplored_tropism;
  98.     real device_tropism;
  99.     real channel_tropism;
  100.     real mobile_tropism;
  101.     } program;
  102.  
  103. typedef struct mobile
  104.     {
  105.     mobile_class class;
  106.     struct cell *loc;
  107.     direction heading;
  108.     boolean active;
  109.     boolean remote_control;
  110.     program mcp;
  111.     behaviour device_reaction;
  112.     behaviour channel_reaction;
  113.     behaviour mobile_reaction[MOBILE_CLASS_NUMBER];
  114.     boolean explore_cell;
  115.     boolean can_breed;
  116.     int steps_to_breed;             /* Numero di movimenti, non tempo assoluto */
  117.     int time_to_remove;             /* Speranza di vita */
  118.     real eta;
  119.     } mobile;
  120.  
  121. typedef struct systems
  122.     {
  123.     device *plant[MAX_DEVICE_NUMBER];
  124.     channel *duct[MAX_CHANNEL_NUMBER];
  125.     mobile *turtle[MAX_MOBILE_NUMBER];
  126.     int num_plants[DEVICE_CLASS_NUMBER];
  127.     int num_ducts[PRIMARY_RT_NUMBER];
  128.     real demand[SECONDARY_RT_NUMBER];
  129.     real offer[SECONDARY_RT_NUMBER];
  130.     int tot_plants;
  131.     int tot_ducts;
  132.     int tot_turtles;
  133.     boolean sort_turtles;
  134.     } systems;
  135.  
  136. typedef struct position
  137.     {
  138.     signed char i;
  139.     signed char j;
  140.     } position;
  141.  
  142. typedef struct cell
  143.     {
  144.     position pos;
  145.     device *plant;
  146.     channel *alfa_duct;
  147.     channel *beta_duct;
  148.     struct cell *alfa_flow;
  149.     struct cell *beta_flow;
  150.     struct cell *break_flow;
  151.     int num_links;
  152.     mobile *turtle;
  153.     real ground_factor;
  154.     boolean explored;
  155.     symbol sym;
  156.     } cell;
  157.  
  158. typedef struct environment
  159.     {
  160.     int time;
  161.     cell map[MAP_ROWS][MAP_COLS];
  162.     real solar_factor;
  163.     real temperature_factor;
  164.     real air_factor;
  165.     real water_factor;
  166.     real growth_factor;
  167.     } environment;
  168.  
  169. typedef struct user
  170.     {
  171.     real money;
  172.     int humans;
  173.     int hybrids;
  174.     int pantropics;
  175.     int robots;
  176.     int hostiles;
  177.     real human_growing;
  178.     real hybrid_growing;
  179.     real pantropic_growing;
  180.     int device_storage[DEVICE_CLASS_NUMBER];
  181.     int mobile_storage[PRIMARY_MC_NUMBER];
  182.     boolean shuttle_landed;
  183.     boolean colony_dead;
  184.     real score;
  185.     } user;
  186.  
  187. extern const real device_price[DEVICE_CLASS_NUMBER];
  188. extern const real resource_unit_price[PRIMARY_RT_NUMBER];
  189. extern const real channel_unit_price[PRIMARY_RT_NUMBER];
  190. extern const real mobile_price[PRIMARY_MC_NUMBER];
  191. extern const int mobile_max_age[MOBILE_CLASS_NUMBER];
  192. extern const real csi[MOBILE_CLASS_NUMBER][MOBILE_CLASS_NUMBER];
  193.  
  194. extern environment env;
  195. extern systems sys;
  196. extern user usr;
  197.  
  198. /* Protos */
  199. device *init_device(device_id plant_id, cell *loc);
  200. device *install_device(device_class class, cell *loc);
  201. void remove_device(device *plant);
  202. channel *init_channel(device *source_plant, int num, direction dir);
  203. cell *extend_channel(channel *duct, cell *loc, direction dir);
  204. channel *install_channel(device *source_plant, direction dir);
  205. /* void remove_channel(channel *duct); */
  206. void swap_channels(cell *loc);
  207. mobile *init_mobile(mobile_class class, cell *loc);
  208. mobile *install_mobile(mobile_class class, cell *loc);
  209. void remove_mobile(mobile *turtle);
  210. cell *place_mobile(mobile_class class);
  211. cell *place_near(mobile_class class, cell *loc);
  212. int place_around_providers(int num, mobile_class class, resource_type output_type);
  213. boolean has_around_plants(cell *loc);
  214. boolean has_around_providers(cell *loc, resource_type output_type);
  215. boolean link_channel(channel *duct, device *plant);
  216. boolean link_device(device *plant, channel *duct);
  217. cell *neighbor(cell *loc, direction dir);
  218. void link_neighbors(cell *loc);
  219. void explore_neighbors(cell *loc);
  220. void clear_cell(cell *loc);
  221. void init_systems(void);
  222. void init_user(void);
  223. void init_environment(void);
  224. real update_device(device *plant);
  225. void damage_device(device *plant);
  226. void attack_device(device *plant);
  227. void attack_channel(channel *duct, cell *loc);
  228. void attack_mobile(mobile *attacker, mobile *defender);
  229. real poll_providers(device *plant, real request, request_mode mode);
  230. cell *update_mobile(mobile *turtle);
  231. cell *select_cell(program *mcp, cell *loc_1, cell *loc_2);
  232. real eval_cell(program *mcp, cell *loc);
  233. void upload_program(program_tag tag, mobile *turtle);
  234. void update_environment(void);
  235. void update_systems(boolean trace);
  236. event next_day(boolean trace);
  237. event next_year(boolean trace);
  238. void set_device_icon(device *plant);
  239. void update_device_icon(device *plant);
  240. void set_mobile_icon(mobile *turtle);
  241. void update_mobile_icon(mobile *turtle);
  242. real trade_resource(device *plant, real requested_capacity);
  243. void purchase_items(const char **name, const icon_type *icon, const real *price,
  244.     int *storage, int class_number);
  245. int device_priority(const device **plant_1, const device **plant_2);
  246. int mobile_priority(const mobile **turtle_1, const mobile **turtle_2);
  247. real calc_zeta(zeta_factor zeta_f, cell *loc);
  248. real delta_people(real people, real life_support);
  249. void move_mobile(mobile *turtle, cell *loc);
  250. void mate_mobile(mobile *father, mobile *mother);
  251. void breed_mobile(mobile *turtle, cell *loc);
  252. cell *jump_obstacle(mobile *turtle);
  253. void start_game(cell *loc);
  254. void end_game(void);
  255. void clean_exit(int rv);
  256.  
  257.