-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsoldier_item.cpp
More file actions
101 lines (83 loc) · 2.59 KB
/
soldier_item.cpp
File metadata and controls
101 lines (83 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <string>
#include <cctype>
#include <math.h>
#include <strings.h>
#include <time.h>
#include <fstream>
#include "soldier_item.h"
#include "battle_scape_soldier.h"
#include "inventory_item.h"
#include "master_items.h"
#include "master_soldiers.h"
using namespace std;
SoldierItem::SoldierItem( unsigned char *data, unsigned char item_id, MasterItems *item_list, MasterSoldiers *soldier_list ) {
item_data = new unsigned char[BYTES_PER_SOLDIER_ITEM];
memcpy( item_data, data, BYTES_PER_SOLDIER_ITEM );
id = item_id;
if( item_data[ITEM_OWNER] != 255 ) {
owner = soldier_list->get_soldier( item_data[ITEM_OWNER] );
} else {
owner = NULL;
}
type = item_list->get_item( item_data[SOLDIER_ITEM_TYPE] );
}
unsigned char * SoldierItem::coordinates() {
unsigned char *coordinates_to_return = new unsigned char[3];
coordinates_to_return[0] = item_data[X_COORDINATE];
coordinates_to_return[1] = item_data[Y_COORDINATE];
coordinates_to_return[2] = item_data[Z_COORDINATE];
return coordinates_to_return;
}
bool SoldierItem::belongs_to_aliens() {
unsigned char alien_equipment_coordinates[3] = { 0, 0, 0 };
bool are_they_equal = memcmp( coordinates(), alien_equipment_coordinates, 3 ) == 0;
return are_they_equal;
}
bool SoldierItem::is_elerium() {
unsigned char elerium_name[20] = "ELERIUM-115";
bool they_are_equal = memcmp( type->get_name(), elerium_name, 20 ) == 0;
return they_are_equal;
}
bool SoldierItem::is_a_corpse() {
unsigned char type_id = get_type_id();
return type_id > 46 || type_id == 31 || type_id == 32 || type_id == 33;
}
bool SoldierItem::belongs_to_xcom() {
return !belongs_to_aliens() && !is_elerium() && !is_a_corpse();
}
void SoldierItem::set_owner( BattleScapeSoldier soldier ) {
item_data[ITEM_OWNER] = soldier.get_id();
owner = &soldier;
}
BattleScapeSoldier * SoldierItem::get_owner() {
return owner;
}
unsigned char SoldierItem::get_id() {
return id;
}
unsigned char SoldierItem::get_owner_id() {
return owner->get_id();
}
unsigned char SoldierItem::get_type_id() {
return item_data[SOLDIER_ITEM_TYPE];
}
InventoryItem * SoldierItem::get_type() {
return type;
}
void SoldierItem::set_inventory_slot( unsigned char slot ) {
item_data[INVENTORY_SLOT] = slot;
}
unsigned char SoldierItem::get_inventory_slot() {
return item_data[INVENTORY_SLOT];
}
void SoldierItem::load_into( SoldierItem item) {
loaded_into = &item;
item_data[OBJECT_ITEM_IS_LOADED_INTO] = item.get_id();
item_data[LOADED_OR_NOT_LOADED] = 0;
}
void SoldierItem::unload() {
item_data[LOADED_OR_NOT_LOADED] = 255;
}