/*
* 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 : OF_MARK.H
//Description : Header of FirmMarket
#ifndef __OF_MARK_H
#define __OF_MARK_H
#ifndef __OFIRM_H
#include
#endif
#ifndef __OINFO_H
#include
#endif
#ifndef __ORAWRES_H
#include
#endif
#ifndef __TOWN_H
#include
#endif
//---------- Define constant -----------//
#define PEASANT_GOODS_MONTH_DEMAND 0.5 // No. of unit of goods a peasant buys in a month
#define WORKER_GOODS_MONTH_DEMAND 1 // No. of unit of goods a worker buys in a month
#define MAX_MARKET_GOODS 3 // Maximum no. of types of goods the market trades for
#define MAX_MARKET_STOCK 500
//------- Define class MarketInfo --------//
#pragma pack(1)
struct MarketGoods
{
char raw_id;
char product_raw_id;
short input_firm_recno;
float stock_qty;
float cur_month_supply; // supply from direct linked firms only. One of its uses is determining whether we have enough supply to export
float last_month_supply;
float supply_30days() { return last_month_supply*(30-info.game_day)/30 +
cur_month_supply; }
float month_demand;
float cur_month_sale_qty;
float last_month_sale_qty;
float sale_qty_30days() { return last_month_sale_qty*(30-info.game_day)/30 +
cur_month_sale_qty; }
float cur_year_sales;
float last_year_sales;
float sales_365days() { return last_year_sales*(365-info.year_day)/365 +
cur_year_sales; }
};
#pragma pack()
//------- Define class FirmMarket --------//
#pragma pack(1)
class FirmMarket : public Firm
{
public:
float max_stock_qty; // maximum stock qty of each market goods
MarketGoods market_goods_array[MAX_MARKET_GOODS];
MarketGoods* market_raw_array[MAX_RAW];
MarketGoods* market_product_array[MAX_PRODUCT]; // pointers to market_goods_array
int free_slot_count();
int stock_value_index(); // for AI, a 0-100 index number telling the total value of the market's stock
short next_output_link_id;
short next_output_firm_recno;
//------------ ai vars -----------//
int no_linked_town_since_date;
int last_import_new_goods_date;
char is_retail_market; // if 1, then it sells consumer products only, if 0, it sells raw materials only
public:
FirmMarket();
~FirmMarket();
void init_derived();
void draw(int displayLayer=1);
void put_info(int refreshFlag);
void detect_info();
void next_day();
void next_month();
void next_year();
void sell_goods();
short hire_caravan(char remoteAction);
int can_hire_caravan();
void set_goods(int isRaw, int goodsId, int position);
void clear_market_goods(int position);
int is_market_linked_to_town(int ownBaseTownOnly=0);
virtual FirmMarket* cast_to_FirmMarket() { return this; };
void process_ai(); // ai process entry point
int read_derived_file(File* filePtr);
//-------------- multiplayer checking codes ---------------//
virtual UCHAR crc8();
virtual void clear_ptr();
private:
void put_market_info(int dispY1, int refreshFlag);
void disp_income(int dispY1, int refreshFlag);
void input_goods(int maxInputQty);
void set_next_output_firm();
void update_trade_link();
void free_unused_slot();
//------------------ AI actions --------------------//
int think_del();
void ai_update_link_status();
int think_import_new_product();
int think_increase_existing_product_supply();
int think_import_specific_product(int productId);
int think_mft_specific_product(int rawId);
int think_export_product();
int think_build_export_market(int townRecno);
void think_demand_trade_treaty();
void think_market_build_factory();
int ai_create_new_trade(Firm* firmPtr, int stop1PickUpType, int stop2PickUpType);
};
#pragma pack()
//--------------------------------------//
#endif