UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
cp_produce.h
Go to the documentation of this file.
1 
6 /*
7 Copyright (C) 2002-2020 UFO: Alien Invasion.
8 
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License
11 as published by the Free Software Foundation; either version 2
12 of the License, or (at your option) any later version.
13 
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17 
18 See the GNU General Public License for more details.
19 
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 */
24 
25 #pragma once
26 
28 #define MAX_PRODUCTIONS 40
29 
30 #define MAX_PRODUCTION_AMOUNT 500
31 
33 #define UGV_SIZE 300
34 
35 typedef enum {
39 
42 
46 typedef struct {
48  const objDef_t* item;
49  const struct aircraft_s* aircraft;
50  struct storedUFO_s* ufo;
51  const void* pointer;
52  } data;
55 
59 typedef struct production_s
60 {
61  int idx;
65  int frame;
66  signed int amount;
68 } production_t;
69 
70 #define PR_IsDisassemblyData(data) ((data)->type == PRODUCTION_TYPE_DISASSEMBLY)
71 #define PR_IsAircraftData(data) ((data)->type == PRODUCTION_TYPE_AIRCRAFT)
72 #define PR_IsItemData(data) ((data)->type == PRODUCTION_TYPE_ITEM)
73 #define PR_IsProductionData(data) (!PR_IsDisassemblyData(data))
74 
75 #define PR_IsDisassembly(prod) (PR_IsDisassemblyData(&(prod)->data))
76 #define PR_IsAircraft(prod) (PR_IsAircraftData(&(prod)->data))
77 #define PR_IsItem(prod) (PR_IsItemData(&(prod)->data))
78 #define PR_IsProduction(prod) (!PR_IsDisassembly(prod))
79 
80 #define PR_SetData(dataPtr, typeVal, ptr) do { assert(ptr); (dataPtr)->data.pointer = (ptr); (dataPtr)->type = (typeVal); } while (0);
81 #define PR_IsDataValid(dataPtr) ((dataPtr)->data.pointer != nullptr)
82 
83 #define PR_GetProgress(prod) ((double)(prod)->frame / (prod)->totalFrames)
84 #define PR_IsReady(prod) ((prod)->frame > (prod)->totalFrames)
85 
90 typedef struct production_queue_s
91 {
92  int numItems;
95 
96 #define PR_GetProductionForBase(base) (&((base)->productions))
97 
98 int PR_GetPrice(const int productionCost);
99 
100 void PR_ProductionInit(void);
101 void PR_ProductionRun(void);
102 
103 bool PR_ItemIsProduceable(const objDef_t* item);
104 
105 struct base_s* PR_ProductionBase(const production_t* production);
106 
107 int PR_IncreaseProduction(production_t* prod, int amount);
108 int PR_DecreaseProduction(production_t* prod, int amount);
109 
110 const char* PR_GetName(const productionData_t* data);
112 
113 void PR_UpdateProductionCap(struct base_s* base, int workerChange = 0);
114 
115 void PR_UpdateRequiredItemsInBasestorage(struct base_s* base, int amount, const requirements_t* reqs);
116 int PR_RequirementsMet(int amount, const requirements_t* reqs, struct base_s* base);
117 
118 int PR_WorkersAvailable(const struct base_s* base);
119 int PR_GetRemainingMinutes(const production_t* prod);
120 int PR_GetRemainingHours(const production_t* prod);
121 int PR_GetProductionHours(const struct base_s* base, const productionData_t* prodData);
122 
123 production_t* PR_QueueNew(struct base_s* base, const productionData_t* data, signed int amount);
124 void PR_QueueMove(production_queue_t* queue, int index, int dir);
125 void PR_QueueDelete(struct base_s* base, production_queue_t* queue, int index);
126 void PR_QueueNext(struct base_s* base);
productionType_t
Definition: cp_produce.h:35
void PR_UpdateRequiredItemsInBasestorage(struct base_s *base, int amount, const requirements_t *reqs)
Remove or add the required items from/to the a base.
Definition: cp_produce.cpp:110
bool PR_ItemIsProduceable(const objDef_t *item)
check if an item is producable.
Definition: cp_produce.cpp:639
int PR_GetRemainingMinutes(const production_t *prod)
Calculates the remaining time for a technology in minutes.
Definition: cp_produce.cpp:78
int PR_DecreaseProduction(production_t *prod, int amount)
decreases production amount
Definition: cp_produce.cpp:522
technology_t * PR_GetTech(const productionData_t *data)
Definition: cp_produce.cpp:198
int PR_RequirementsMet(int amount, const requirements_t *reqs, struct base_s *base)
Checks if the production requirements are met for a defined amount.
Definition: cp_produce.cpp:146
int PR_GetPrice(const int productionCost)
Used in production costs (to allow reducing prices below 1x).
Definition: cp_produce.cpp:666
Defines all attributes of objects used in the inventory.
Definition: inv_shared.h:264
void PR_ProductionInit(void)
A base with all it's data.
Definition: cp_base.h:84
A production queue. Lists all items to be produced.
Definition: cp_produce.h:90
signed int amount
Definition: cp_produce.h:66
struct production_s production_t
Holds all information for the production of one item-type.
int PR_GetRemainingHours(const production_t *prod)
Calculates the remaining hours for a technology.
Definition: cp_produce.cpp:89
void PR_ProductionRun(void)
Checks whether an item is finished.
Definition: cp_produce.cpp:555
struct production_queue_s production_queue_t
A production queue. Lists all items to be produced.
Structure for stored UFOs.
const char * PR_GetName(const productionData_t *data)
Definition: cp_produce.cpp:181
int PR_GetProductionHours(const struct base_s *base, const productionData_t *prodData)
int PR_IncreaseProduction(production_t *prod, int amount)
increases production amount if possible
Definition: cp_produce.cpp:489
This is the technology parsed from research.ufo.
Definition: cp_research.h:137
bool creditMessage
Definition: cp_produce.h:67
void PR_QueueDelete(struct base_s *base, production_queue_t *queue, int index)
Delete the selected entry from the queue.
Definition: cp_produce.cpp:280
void PR_QueueNext(struct base_s *base)
Queues the next production in the queue.
Definition: cp_produce.cpp:344
int PR_WorkersAvailable(const struct base_s *base)
production_t * PR_QueueNew(struct base_s *base, const productionData_t *data, signed int amount)
Add a new item to the bottom of the production queue.
Definition: cp_produce.cpp:233
QGL_EXTERN GLuint index
Definition: r_gl.h:110
void PR_QueueMove(production_queue_t *queue, int index, int dir)
Moves the given queue item in the given direction.
Definition: cp_produce.cpp:307
struct production_s items[MAX_PRODUCTIONS]
Definition: cp_produce.h:93
#define MAX_PRODUCTIONS
Maximum number of productions queued in any one base.
Definition: cp_produce.h:28
const struct aircraft_s * aircraft
Definition: cp_produce.h:49
productionType_t type
Definition: cp_produce.h:53
struct base_s * PR_ProductionBase(const production_t *production)
Returns the base pointer the production belongs to.
Definition: cp_produce.cpp:650
void PR_UpdateProductionCap(struct base_s *base, int workerChange=0)
Update the current capacity of Workshop.
Definition: cp_produce.cpp:606
productionData_t data
Definition: cp_produce.h:62
GLsizei const GLvoid * data
Definition: r_gl.h:152
An aircraft with all it's data.
Definition: cp_aircraft.h:114
int totalFrames
Definition: cp_produce.h:64
Holds all information for the production of one item-type.
Definition: cp_produce.h:59
struct storedUFO_s * ufo
Definition: cp_produce.h:50