/*
* Seven Kingdoms: Ancient Adversaries
*
* Copyright 1997,1998 Enlight Software Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
//Filename : OTECHRES.H
//Description : class Tech
#ifndef __OTECHRES_H
#define __OTECHRES_H
#ifndef __ORESX_H
#include
#endif
//--------- Define constant -----------//
enum { TECH_SMALL_ICON_WIDTH=24,
TECH_SMALL_ICON_HEIGHT=20,
TECH_LARGE_ICON_WIDTH=46,
TECH_LARGE_ICON_HEIGHT=38
};
//------ define tech classes ----------//
enum { TECH_CLASS_COUNT=2 };
enum { TECH_WEAPON=1,
TECH_SHIP,
};
//------ define struct TechClassRec ---------//
struct TechClassRec
{
enum { CODE_LEN=8, ICON_NAME_LEN=8 };
char class_code[CODE_LEN];
char icon_name[ICON_NAME_LEN];
};
//------ define struct TechRec ---------//
struct TechRec
{
enum { CODE_LEN=8, MAX_TECH_LEVEL_LEN=3, COMPLEX_LEVEL_LEN=3, ID_LEN=3, ICON_NAME_LEN=8 };
char class_code[CODE_LEN];
char max_tech_level[MAX_TECH_LEVEL_LEN];
char complex_level[COMPLEX_LEVEL_LEN];
char unit_code[CODE_LEN];
char firm_code[CODE_LEN];
char parent_unit_code[CODE_LEN];
char parent_firm_code[CODE_LEN];
char parent_level;
char icon_name[ICON_NAME_LEN];
char class_id[ID_LEN];
char unit_id[ID_LEN];
char firm_id[ID_LEN];
char parent_unit_id[ID_LEN];
char parent_firm_id[ID_LEN];
};
//-------- define struct TechClass ----------//
#pragma pack(1)
class TechClass
{
public:
short class_id;
short first_tech_id;
short tech_count;
short icon_index;
char* tech_icon();
//-------- dynamic game vars --------//
short nation_research_firm_recno_array[MAX_NATION]; // the recno of each nation's research firm currently researching this technology
public:
void set_nation_research_firm_recno(int nationRecno, int firmRecno) { nation_research_firm_recno_array[nationRecno-1] = firmRecno; }
int get_nation_research_firm_recno(int nationRecno) { return nation_research_firm_recno_array[nationRecno-1]; }
int is_nation_researching(int nationRecno) { return nation_research_firm_recno_array[nationRecno-1]; }
};
#pragma pack()
//-------- define struct TechInfo ----------//
#pragma pack(1)
class TechInfo
{
public:
short tech_id;
short class_id;
short max_tech_level; // maximum level for this technology
short complex_level;
short unit_id;
short firm_id;
short parent_unit_id;
short parent_firm_id;
char parent_level;
short icon_index;
char* tech_large_icon();
char* tech_small_icon();
char* tech_des(); // description of the technology
//-------- dynamic game vars --------//
char nation_tech_level_array[MAX_NATION]; // each nation's the technology level of this unit,
char nation_is_researching_array[MAX_NATION]; // whether the nation is researching this technology, it stores the number of firms of each nation researching on this technology.
float nation_research_progress_array[MAX_NATION]; // the progresses of each nation researching this technology, when it reaches complex_level, the research is done.
public:
void set_nation_tech_level(int nationRecno, int techLevel);
int get_nation_tech_level(int nationRecno) { return nation_tech_level_array[nationRecno-1]; }
void inc_nation_is_researching(int nationRecno);
void dec_nation_is_researching(int nationRecno);
int is_nation_researching(int nationRecno) { return nation_is_researching_array[nationRecno-1]; }
int is_parent_tech_invented(int nationRecno);
int can_research(int nationRecno);
int progress(int nationRecno, float progressPoint);
float get_progress(int nationRecno);
};
#pragma pack()
//------ define class TechRes ----------//
class TechRes
{
public:
char init_flag;
short tech_class_count;
short tech_count;
short total_tech_level; // the sum of research levels of all technology
TechClass* tech_class_array;
TechInfo* tech_info_array;
ResourceIdx res_bitmap;
public:
TechRes();
void init();
void deinit();
void init_nation_tech(int nationRecno);
void inc_all_tech_level(int nationRecno);
int write_file(File*);
int read_file(File*);
#ifdef DEBUG
TechInfo* operator[](int techId); // pass techId as recno
TechClass* tech_class(int techClassId);
#else
TechInfo* operator[](int techId) { return tech_info_array+techId-1; }
TechClass* tech_class(int techClassId) { return tech_class_array+techClassId-1; }
#endif
private:
void load_tech_class();
void load_tech_info();
};
extern TechRes tech_res;
//------------------------------------//
#endif