Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Ghost/Ghost.cpp@2:eaf245af2aae, 2020-03-06 (annotated)
- Committer:
- el18gs
- Date:
- Fri Mar 06 19:27:12 2020 +0000
- Revision:
- 2:eaf245af2aae
Initial Commit
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| el18gs | 2:eaf245af2aae | 1 | #include "Ghost.h" |
| el18gs | 2:eaf245af2aae | 2 | #include "mbed.h" |
| el18gs | 2:eaf245af2aae | 3 | |
| el18gs | 2:eaf245af2aae | 4 | const string Ghost::_suffix = ".ghost"; |
| el18gs | 2:eaf245af2aae | 5 | |
| el18gs | 2:eaf245af2aae | 6 | Ghost::Ghost(const std::string path, const std::string root) |
| el18gs | 2:eaf245af2aae | 7 | { |
| el18gs | 2:eaf245af2aae | 8 | _root = root; |
| el18gs | 2:eaf245af2aae | 9 | // Connections to SD card holder on K64F (SPI interface) |
| el18gs | 2:eaf245af2aae | 10 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS |
| el18gs | 2:eaf245af2aae | 11 | |
| el18gs | 2:eaf245af2aae | 12 | FILE *fp; |
| el18gs | 2:eaf245af2aae | 13 | |
| el18gs | 2:eaf245af2aae | 14 | fp = fopen(path.c_str(), "r"); |
| el18gs | 2:eaf245af2aae | 15 | |
| el18gs | 2:eaf245af2aae | 16 | int lines=0; // going to store the number of lines in the file |
| el18gs | 2:eaf245af2aae | 17 | stringvec values; |
| el18gs | 2:eaf245af2aae | 18 | |
| el18gs | 2:eaf245af2aae | 19 | if (fp == NULL) { // if it can't open the file then print error message |
| el18gs | 2:eaf245af2aae | 20 | printf("Error! Unable to open file: %s\n", path.c_str()); |
| el18gs | 2:eaf245af2aae | 21 | //listdir(path); |
| el18gs | 2:eaf245af2aae | 22 | } else { |
| el18gs | 2:eaf245af2aae | 23 | //Since we may not know the |
| el18gs | 2:eaf245af2aae | 24 | // number of lines in the files ahead of time, we'll first count them |
| el18gs | 2:eaf245af2aae | 25 | // * means scan but don't save |
| el18gs | 2:eaf245af2aae | 26 | |
| el18gs | 2:eaf245af2aae | 27 | while (fscanf(fp, "%*s") != EOF) { |
| el18gs | 2:eaf245af2aae | 28 | lines++; // increment counter when read a line |
| el18gs | 2:eaf245af2aae | 29 | } |
| el18gs | 2:eaf245af2aae | 30 | |
| el18gs | 2:eaf245af2aae | 31 | rewind(fp); // 'scrolled' to end of file, so go back to beginning |
| el18gs | 2:eaf245af2aae | 32 | |
| el18gs | 2:eaf245af2aae | 33 | char buffer[15]; |
| el18gs | 2:eaf245af2aae | 34 | |
| el18gs | 2:eaf245af2aae | 35 | for(int i = 0; i < lines; i++) { |
| el18gs | 2:eaf245af2aae | 36 | fscanf(fp, "%s", buffer); |
| el18gs | 2:eaf245af2aae | 37 | if(buffer[0] != '\\') { |
| el18gs | 2:eaf245af2aae | 38 | values.push_back(buffer); |
| el18gs | 2:eaf245af2aae | 39 | } |
| el18gs | 2:eaf245af2aae | 40 | } |
| el18gs | 2:eaf245af2aae | 41 | |
| el18gs | 2:eaf245af2aae | 42 | for(int i = 0; i < values.size(); i++) { |
| el18gs | 2:eaf245af2aae | 43 | _type = string_to_type(values[0]); |
| el18gs | 2:eaf245af2aae | 44 | _name = values[1]; |
| el18gs | 2:eaf245af2aae | 45 | sscanf(values[2].c_str(), "%d", &_attack); |
| el18gs | 2:eaf245af2aae | 46 | sscanf(values[3].c_str(), "%d", &_defense); |
| el18gs | 2:eaf245af2aae | 47 | sscanf(values[4].c_str(), "%d", &_level); |
| el18gs | 2:eaf245af2aae | 48 | sscanf(values[5].c_str(), "%d", &_xp); |
| el18gs | 2:eaf245af2aae | 49 | sscanf(values[6].c_str(), "%d", &_value); |
| el18gs | 2:eaf245af2aae | 50 | sscanf(values[7].c_str(), "%d", &_hp_max); |
| el18gs | 2:eaf245af2aae | 51 | sscanf(values[8].c_str(), "%d", &_hp); |
| el18gs | 2:eaf245af2aae | 52 | sscanf(values[9].c_str(), "%d", &_uid); |
| el18gs | 2:eaf245af2aae | 53 | } |
| el18gs | 2:eaf245af2aae | 54 | } |
| el18gs | 2:eaf245af2aae | 55 | |
| el18gs | 2:eaf245af2aae | 56 | _name = "casper"; |
| el18gs | 2:eaf245af2aae | 57 | } |
| el18gs | 2:eaf245af2aae | 58 | |
| el18gs | 2:eaf245af2aae | 59 | Ghost::Ghost(int num, const std::string root) |
| el18gs | 2:eaf245af2aae | 60 | { |
| el18gs | 2:eaf245af2aae | 61 | _root = root; |
| el18gs | 2:eaf245af2aae | 62 | _uid = gen_uid(); |
| el18gs | 2:eaf245af2aae | 63 | int type = 0; |
| el18gs | 2:eaf245af2aae | 64 | if (num < 50) { |
| el18gs | 2:eaf245af2aae | 65 | type = 0; |
| el18gs | 2:eaf245af2aae | 66 | } else if (num < 65) { |
| el18gs | 2:eaf245af2aae | 67 | type = 1; |
| el18gs | 2:eaf245af2aae | 68 | } else if (num < 80) { |
| el18gs | 2:eaf245af2aae | 69 | type = 2; |
| el18gs | 2:eaf245af2aae | 70 | } else if (num < 95) { |
| el18gs | 2:eaf245af2aae | 71 | type = 3; |
| el18gs | 2:eaf245af2aae | 72 | } else { |
| el18gs | 2:eaf245af2aae | 73 | type = 4; |
| el18gs | 2:eaf245af2aae | 74 | } |
| el18gs | 2:eaf245af2aae | 75 | |
| el18gs | 2:eaf245af2aae | 76 | if(type == 0) { |
| el18gs | 2:eaf245af2aae | 77 | _attack = 10; |
| el18gs | 2:eaf245af2aae | 78 | _defense = 10; |
| el18gs | 2:eaf245af2aae | 79 | _level = 1; |
| el18gs | 2:eaf245af2aae | 80 | _xp = 0; |
| el18gs | 2:eaf245af2aae | 81 | _value = 10; |
| el18gs | 2:eaf245af2aae | 82 | _hp_max = 10; |
| el18gs | 2:eaf245af2aae | 83 | _hp = _hp_max; |
| el18gs | 2:eaf245af2aae | 84 | _type = BASIC; |
| el18gs | 2:eaf245af2aae | 85 | } else if(type == 1) { |
| el18gs | 2:eaf245af2aae | 86 | _attack = 15; |
| el18gs | 2:eaf245af2aae | 87 | _defense = 5; |
| el18gs | 2:eaf245af2aae | 88 | _level = 1; |
| el18gs | 2:eaf245af2aae | 89 | _xp = 0; |
| el18gs | 2:eaf245af2aae | 90 | _value = 15; |
| el18gs | 2:eaf245af2aae | 91 | _hp_max = 7; |
| el18gs | 2:eaf245af2aae | 92 | _hp = _hp_max; |
| el18gs | 2:eaf245af2aae | 93 | _type = ECTO; |
| el18gs | 2:eaf245af2aae | 94 | } else if(type == 2) { |
| el18gs | 2:eaf245af2aae | 95 | _attack = 5; |
| el18gs | 2:eaf245af2aae | 96 | _defense = 15; |
| el18gs | 2:eaf245af2aae | 97 | _level = 1; |
| el18gs | 2:eaf245af2aae | 98 | _xp = 0; |
| el18gs | 2:eaf245af2aae | 99 | _value = 15; |
| el18gs | 2:eaf245af2aae | 100 | _hp_max = 13; |
| el18gs | 2:eaf245af2aae | 101 | _hp = _hp_max; |
| el18gs | 2:eaf245af2aae | 102 | _type = POLTER; |
| el18gs | 2:eaf245af2aae | 103 | } else if(type == 3) { |
| el18gs | 2:eaf245af2aae | 104 | _attack = 15; |
| el18gs | 2:eaf245af2aae | 105 | _defense = 15; |
| el18gs | 2:eaf245af2aae | 106 | _level = 1; |
| el18gs | 2:eaf245af2aae | 107 | _xp = 0; |
| el18gs | 2:eaf245af2aae | 108 | _value = 20; |
| el18gs | 2:eaf245af2aae | 109 | _hp_max = 5; |
| el18gs | 2:eaf245af2aae | 110 | _hp = _hp_max; |
| el18gs | 2:eaf245af2aae | 111 | _type = ORB; |
| el18gs | 2:eaf245af2aae | 112 | } else if(type == 4) { |
| el18gs | 2:eaf245af2aae | 113 | _attack = 5; |
| el18gs | 2:eaf245af2aae | 114 | _defense = 5; |
| el18gs | 2:eaf245af2aae | 115 | _level = 10; |
| el18gs | 2:eaf245af2aae | 116 | _xp = 10; |
| el18gs | 2:eaf245af2aae | 117 | _value = 10; |
| el18gs | 2:eaf245af2aae | 118 | _hp_max = 20; |
| el18gs | 2:eaf245af2aae | 119 | _hp = _hp_max; |
| el18gs | 2:eaf245af2aae | 120 | _type = FUNNEL; |
| el18gs | 2:eaf245af2aae | 121 | } |
| el18gs | 2:eaf245af2aae | 122 | _name = "casper"; |
| el18gs | 2:eaf245af2aae | 123 | } |
| el18gs | 2:eaf245af2aae | 124 | |
| el18gs | 2:eaf245af2aae | 125 | void Ghost::listdir(std::string path) |
| el18gs | 2:eaf245af2aae | 126 | { |
| el18gs | 2:eaf245af2aae | 127 | // Connections to SD card holder on K64F (SPI interface) |
| el18gs | 2:eaf245af2aae | 128 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS |
| el18gs | 2:eaf245af2aae | 129 | |
| el18gs | 2:eaf245af2aae | 130 | printf("Listing directory: %s\n", path.c_str()); |
| el18gs | 2:eaf245af2aae | 131 | DIR *d; |
| el18gs | 2:eaf245af2aae | 132 | struct dirent *p; |
| el18gs | 2:eaf245af2aae | 133 | |
| el18gs | 2:eaf245af2aae | 134 | d = opendir(path.c_str()); |
| el18gs | 2:eaf245af2aae | 135 | if (d != NULL) { |
| el18gs | 2:eaf245af2aae | 136 | while ((p = readdir(d)) != NULL) { |
| el18gs | 2:eaf245af2aae | 137 | printf(" - %s\n", p->d_name); |
| el18gs | 2:eaf245af2aae | 138 | } |
| el18gs | 2:eaf245af2aae | 139 | } else { |
| el18gs | 2:eaf245af2aae | 140 | printf("Could not open directory!\n"); |
| el18gs | 2:eaf245af2aae | 141 | } |
| el18gs | 2:eaf245af2aae | 142 | closedir(d); |
| el18gs | 2:eaf245af2aae | 143 | } |
| el18gs | 2:eaf245af2aae | 144 | |
| el18gs | 2:eaf245af2aae | 145 | void Ghost::save(void) |
| el18gs | 2:eaf245af2aae | 146 | { |
| el18gs | 2:eaf245af2aae | 147 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS |
| el18gs | 2:eaf245af2aae | 148 | FILE *fp; // this is our file pointer |
| el18gs | 2:eaf245af2aae | 149 | |
| el18gs | 2:eaf245af2aae | 150 | std::string filepath = "/sd"; |
| el18gs | 2:eaf245af2aae | 151 | |
| el18gs | 2:eaf245af2aae | 152 | filepath.append(_root); |
| el18gs | 2:eaf245af2aae | 153 | |
| el18gs | 2:eaf245af2aae | 154 | char buf[10]; |
| el18gs | 2:eaf245af2aae | 155 | sprintf(buf, "%d", _uid); |
| el18gs | 2:eaf245af2aae | 156 | |
| el18gs | 2:eaf245af2aae | 157 | filepath.append(buf); |
| el18gs | 2:eaf245af2aae | 158 | filepath.append(_suffix); |
| el18gs | 2:eaf245af2aae | 159 | |
| el18gs | 2:eaf245af2aae | 160 | fp = fopen(filepath.c_str(), "w"); |
| el18gs | 2:eaf245af2aae | 161 | |
| el18gs | 2:eaf245af2aae | 162 | if (fp == NULL) { // if it can't open the file then print error message |
| el18gs | 2:eaf245af2aae | 163 | printf("Error! Unable to open file!\n"); |
| el18gs | 2:eaf245af2aae | 164 | } else { // opened file so can write |
| el18gs | 2:eaf245af2aae | 165 | fprintf(fp, "// Type\n"); |
| el18gs | 2:eaf245af2aae | 166 | fprintf(fp, "%s\n", get_type_string().c_str()); |
| el18gs | 2:eaf245af2aae | 167 | fprintf(fp, "// Name\n"); |
| el18gs | 2:eaf245af2aae | 168 | fprintf(fp, "%s\n", get_name().c_str()); |
| el18gs | 2:eaf245af2aae | 169 | fprintf(fp, "// Defense\n"); |
| el18gs | 2:eaf245af2aae | 170 | fprintf(fp, "%d\n", get_defense()); |
| el18gs | 2:eaf245af2aae | 171 | fprintf(fp, "// Level\n"); |
| el18gs | 2:eaf245af2aae | 172 | fprintf(fp, "%d\n", get_level()); |
| el18gs | 2:eaf245af2aae | 173 | fprintf(fp, "// XP\n"); |
| el18gs | 2:eaf245af2aae | 174 | fprintf(fp, "%d\n", get_xp()); |
| el18gs | 2:eaf245af2aae | 175 | fprintf(fp, "// Value\n"); |
| el18gs | 2:eaf245af2aae | 176 | fprintf(fp, "%d\n", get_value()); |
| el18gs | 2:eaf245af2aae | 177 | fprintf(fp, "// HP Max\n"); |
| el18gs | 2:eaf245af2aae | 178 | fprintf(fp, "%d\n", get_hp_max()); |
| el18gs | 2:eaf245af2aae | 179 | fprintf(fp, "// HP\n"); |
| el18gs | 2:eaf245af2aae | 180 | fprintf(fp, "%d\n", get_hp()); |
| el18gs | 2:eaf245af2aae | 181 | fprintf(fp, "// UID\n"); |
| el18gs | 2:eaf245af2aae | 182 | fprintf(fp, "%d\n", get_uid()); |
| el18gs | 2:eaf245af2aae | 183 | fclose(fp); // ensure you close the file after writing |
| el18gs | 2:eaf245af2aae | 184 | } |
| el18gs | 2:eaf245af2aae | 185 | } |
| el18gs | 2:eaf245af2aae | 186 | |
| el18gs | 2:eaf245af2aae | 187 | int Ghost::sell(void){ |
| el18gs | 2:eaf245af2aae | 188 | |
| el18gs | 2:eaf245af2aae | 189 | std::string filepath = "/sd"; |
| el18gs | 2:eaf245af2aae | 190 | |
| el18gs | 2:eaf245af2aae | 191 | filepath.append(_root); |
| el18gs | 2:eaf245af2aae | 192 | |
| el18gs | 2:eaf245af2aae | 193 | char buf[10]; |
| el18gs | 2:eaf245af2aae | 194 | sprintf(buf, "%d", _uid); |
| el18gs | 2:eaf245af2aae | 195 | |
| el18gs | 2:eaf245af2aae | 196 | filepath.append(buf); |
| el18gs | 2:eaf245af2aae | 197 | filepath.append(_suffix); |
| el18gs | 2:eaf245af2aae | 198 | |
| el18gs | 2:eaf245af2aae | 199 | delete_file(filepath.c_str()); |
| el18gs | 2:eaf245af2aae | 200 | |
| el18gs | 2:eaf245af2aae | 201 | return _value; |
| el18gs | 2:eaf245af2aae | 202 | }; |
| el18gs | 2:eaf245af2aae | 203 | |
| el18gs | 2:eaf245af2aae | 204 | void Ghost::feed(int ammount){ |
| el18gs | 2:eaf245af2aae | 205 | _xp = _xp + ammount; |
| el18gs | 2:eaf245af2aae | 206 | |
| el18gs | 2:eaf245af2aae | 207 | int new_level = 0; |
| el18gs | 2:eaf245af2aae | 208 | |
| el18gs | 2:eaf245af2aae | 209 | if(_xp > 1200){ |
| el18gs | 2:eaf245af2aae | 210 | new_level = 10; |
| el18gs | 2:eaf245af2aae | 211 | } else if(_xp > 600){ |
| el18gs | 2:eaf245af2aae | 212 | new_level = 9; |
| el18gs | 2:eaf245af2aae | 213 | } else if(_xp > 300){ |
| el18gs | 2:eaf245af2aae | 214 | new_level = 8; |
| el18gs | 2:eaf245af2aae | 215 | } else if(_xp > 150){ |
| el18gs | 2:eaf245af2aae | 216 | new_level = 7; |
| el18gs | 2:eaf245af2aae | 217 | } else if(_xp > 75){ |
| el18gs | 2:eaf245af2aae | 218 | new_level = 6; |
| el18gs | 2:eaf245af2aae | 219 | } else if(_xp > 38){ |
| el18gs | 2:eaf245af2aae | 220 | new_level = 5; |
| el18gs | 2:eaf245af2aae | 221 | } else if(_xp > 19){ |
| el18gs | 2:eaf245af2aae | 222 | new_level = 4; |
| el18gs | 2:eaf245af2aae | 223 | } else if(_xp > 10){ |
| el18gs | 2:eaf245af2aae | 224 | new_level = 3; |
| el18gs | 2:eaf245af2aae | 225 | } else if(_xp > 5){ |
| el18gs | 2:eaf245af2aae | 226 | new_level = 2; |
| el18gs | 2:eaf245af2aae | 227 | } else { |
| el18gs | 2:eaf245af2aae | 228 | new_level = 1; |
| el18gs | 2:eaf245af2aae | 229 | } |
| el18gs | 2:eaf245af2aae | 230 | |
| el18gs | 2:eaf245af2aae | 231 | if(new_level > _level){ |
| el18gs | 2:eaf245af2aae | 232 | int difference = new_level - _level; |
| el18gs | 2:eaf245af2aae | 233 | for(int i = 0; i < difference; i++){ |
| el18gs | 2:eaf245af2aae | 234 | _attack++; |
| el18gs | 2:eaf245af2aae | 235 | _defense++; |
| el18gs | 2:eaf245af2aae | 236 | _level++; |
| el18gs | 2:eaf245af2aae | 237 | _hp_max++; |
| el18gs | 2:eaf245af2aae | 238 | _hp = _hp_max; |
| el18gs | 2:eaf245af2aae | 239 | _value = _attack + _defense + _hp_max; |
| el18gs | 2:eaf245af2aae | 240 | } |
| el18gs | 2:eaf245af2aae | 241 | } |
| el18gs | 2:eaf245af2aae | 242 | |
| el18gs | 2:eaf245af2aae | 243 | save(); |
| el18gs | 2:eaf245af2aae | 244 | } |
| el18gs | 2:eaf245af2aae | 245 | |
| el18gs | 2:eaf245af2aae | 246 | void Ghost::print_all(void) |
| el18gs | 2:eaf245af2aae | 247 | { |
| el18gs | 2:eaf245af2aae | 248 | printf("\n Print out for Ghost: %s\n", get_name().c_str()); |
| el18gs | 2:eaf245af2aae | 249 | printf("--------------------"); |
| el18gs | 2:eaf245af2aae | 250 | printf("\n"); |
| el18gs | 2:eaf245af2aae | 251 | printf("Type: %s\n", get_type_string().c_str()); |
| el18gs | 2:eaf245af2aae | 252 | printf("Attack: %d\n", get_attack()); |
| el18gs | 2:eaf245af2aae | 253 | printf("Defense: %d\n", get_defense()); |
| el18gs | 2:eaf245af2aae | 254 | printf("Level: %d\n", get_level()); |
| el18gs | 2:eaf245af2aae | 255 | printf("XP: %d\n", get_xp()); |
| el18gs | 2:eaf245af2aae | 256 | printf("Value: %d\n", get_value()); |
| el18gs | 2:eaf245af2aae | 257 | printf("HP Max: %d\n", get_hp_max()); |
| el18gs | 2:eaf245af2aae | 258 | printf("HP: %d\n", get_hp()); |
| el18gs | 2:eaf245af2aae | 259 | printf("UID: %d\n", get_uid()); |
| el18gs | 2:eaf245af2aae | 260 | } |
| el18gs | 2:eaf245af2aae | 261 | |
| el18gs | 2:eaf245af2aae | 262 | Type Ghost::get_type_enum(void) |
| el18gs | 2:eaf245af2aae | 263 | { |
| el18gs | 2:eaf245af2aae | 264 | return _type; |
| el18gs | 2:eaf245af2aae | 265 | } |
| el18gs | 2:eaf245af2aae | 266 | |
| el18gs | 2:eaf245af2aae | 267 | std::string Ghost::get_type_string(void) |
| el18gs | 2:eaf245af2aae | 268 | { |
| el18gs | 2:eaf245af2aae | 269 | return type_to_string(_type); |
| el18gs | 2:eaf245af2aae | 270 | } |
| el18gs | 2:eaf245af2aae | 271 | |
| el18gs | 2:eaf245af2aae | 272 | std::string Ghost::get_name(void) |
| el18gs | 2:eaf245af2aae | 273 | { |
| el18gs | 2:eaf245af2aae | 274 | return _name; |
| el18gs | 2:eaf245af2aae | 275 | } |
| el18gs | 2:eaf245af2aae | 276 | |
| el18gs | 2:eaf245af2aae | 277 | int Ghost::get_attack(void) |
| el18gs | 2:eaf245af2aae | 278 | { |
| el18gs | 2:eaf245af2aae | 279 | return _attack; |
| el18gs | 2:eaf245af2aae | 280 | } |
| el18gs | 2:eaf245af2aae | 281 | |
| el18gs | 2:eaf245af2aae | 282 | int Ghost::get_defense(void) |
| el18gs | 2:eaf245af2aae | 283 | { |
| el18gs | 2:eaf245af2aae | 284 | return _defense; |
| el18gs | 2:eaf245af2aae | 285 | } |
| el18gs | 2:eaf245af2aae | 286 | |
| el18gs | 2:eaf245af2aae | 287 | int Ghost::get_level(void) |
| el18gs | 2:eaf245af2aae | 288 | { |
| el18gs | 2:eaf245af2aae | 289 | return _level; |
| el18gs | 2:eaf245af2aae | 290 | } |
| el18gs | 2:eaf245af2aae | 291 | |
| el18gs | 2:eaf245af2aae | 292 | int Ghost::get_xp(void) |
| el18gs | 2:eaf245af2aae | 293 | { |
| el18gs | 2:eaf245af2aae | 294 | return _xp; |
| el18gs | 2:eaf245af2aae | 295 | } |
| el18gs | 2:eaf245af2aae | 296 | |
| el18gs | 2:eaf245af2aae | 297 | int Ghost::get_value(void) |
| el18gs | 2:eaf245af2aae | 298 | { |
| el18gs | 2:eaf245af2aae | 299 | return _value; |
| el18gs | 2:eaf245af2aae | 300 | } |
| el18gs | 2:eaf245af2aae | 301 | |
| el18gs | 2:eaf245af2aae | 302 | int Ghost::get_hp_max(void) |
| el18gs | 2:eaf245af2aae | 303 | { |
| el18gs | 2:eaf245af2aae | 304 | return _hp_max; |
| el18gs | 2:eaf245af2aae | 305 | } |
| el18gs | 2:eaf245af2aae | 306 | |
| el18gs | 2:eaf245af2aae | 307 | int Ghost::get_hp(void) |
| el18gs | 2:eaf245af2aae | 308 | { |
| el18gs | 2:eaf245af2aae | 309 | return _hp; |
| el18gs | 2:eaf245af2aae | 310 | } |
| el18gs | 2:eaf245af2aae | 311 | |
| el18gs | 2:eaf245af2aae | 312 | int Ghost::get_uid(void) |
| el18gs | 2:eaf245af2aae | 313 | { |
| el18gs | 2:eaf245af2aae | 314 | return _uid; |
| el18gs | 2:eaf245af2aae | 315 | } |
| el18gs | 2:eaf245af2aae | 316 | |
| el18gs | 2:eaf245af2aae | 317 | int Ghost::gen_uid(void) |
| el18gs | 2:eaf245af2aae | 318 | { |
| el18gs | 2:eaf245af2aae | 319 | // Connections to SD card holder on K64F (SPI interface) |
| el18gs | 2:eaf245af2aae | 320 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS |
| el18gs | 2:eaf245af2aae | 321 | std::string path = "/sd/ghosts"; |
| el18gs | 2:eaf245af2aae | 322 | printf("Listing directory to generate UID: %s\n", path.c_str()); |
| el18gs | 2:eaf245af2aae | 323 | DIR *d; |
| el18gs | 2:eaf245af2aae | 324 | struct dirent *p; |
| el18gs | 2:eaf245af2aae | 325 | |
| el18gs | 2:eaf245af2aae | 326 | stringvec files; |
| el18gs | 2:eaf245af2aae | 327 | |
| el18gs | 2:eaf245af2aae | 328 | d = opendir(path.c_str()); |
| el18gs | 2:eaf245af2aae | 329 | if (d != NULL) { |
| el18gs | 2:eaf245af2aae | 330 | while ((p = readdir(d)) != NULL) { |
| el18gs | 2:eaf245af2aae | 331 | files.push_back(p->d_name); |
| el18gs | 2:eaf245af2aae | 332 | } |
| el18gs | 2:eaf245af2aae | 333 | } else { |
| el18gs | 2:eaf245af2aae | 334 | printf("Could not open directory!\n"); |
| el18gs | 2:eaf245af2aae | 335 | } |
| el18gs | 2:eaf245af2aae | 336 | closedir(d); |
| el18gs | 2:eaf245af2aae | 337 | |
| el18gs | 2:eaf245af2aae | 338 | stringvec correct_files; |
| el18gs | 2:eaf245af2aae | 339 | |
| el18gs | 2:eaf245af2aae | 340 | for(int i = 0; i < files.size(); i++){ |
| el18gs | 2:eaf245af2aae | 341 | if(hasEnding(files[i], ".ghost")){ |
| el18gs | 2:eaf245af2aae | 342 | correct_files.push_back(files[i]); |
| el18gs | 2:eaf245af2aae | 343 | } |
| el18gs | 2:eaf245af2aae | 344 | } |
| el18gs | 2:eaf245af2aae | 345 | |
| el18gs | 2:eaf245af2aae | 346 | std::vector<int> used_ids; |
| el18gs | 2:eaf245af2aae | 347 | |
| el18gs | 2:eaf245af2aae | 348 | for(int i = 0; i < correct_files.size(); i++){ |
| el18gs | 2:eaf245af2aae | 349 | std::string temp = correct_files[i].substr(0, correct_files[i].length() - 6); |
| el18gs | 2:eaf245af2aae | 350 | int x; |
| el18gs | 2:eaf245af2aae | 351 | sscanf(temp.c_str(), "%d", &x); |
| el18gs | 2:eaf245af2aae | 352 | used_ids.push_back(x); |
| el18gs | 2:eaf245af2aae | 353 | } |
| el18gs | 2:eaf245af2aae | 354 | int max = -1; |
| el18gs | 2:eaf245af2aae | 355 | for(int i = 0; i < used_ids.size(); i++){ |
| el18gs | 2:eaf245af2aae | 356 | if(used_ids[i] > max){ |
| el18gs | 2:eaf245af2aae | 357 | max = used_ids[i]; |
| el18gs | 2:eaf245af2aae | 358 | } |
| el18gs | 2:eaf245af2aae | 359 | } |
| el18gs | 2:eaf245af2aae | 360 | |
| el18gs | 2:eaf245af2aae | 361 | max++; |
| el18gs | 2:eaf245af2aae | 362 | return max; |
| el18gs | 2:eaf245af2aae | 363 | |
| el18gs | 2:eaf245af2aae | 364 | } |
| el18gs | 2:eaf245af2aae | 365 | |
| el18gs | 2:eaf245af2aae | 366 | bool Ghost::hasEnding (std::string const &fullString, std::string const &ending) { |
| el18gs | 2:eaf245af2aae | 367 | if (fullString.length() >= ending.length()) { |
| el18gs | 2:eaf245af2aae | 368 | return (0 == fullString.compare (fullString.length() - ending.length(), ending.length(), ending)); |
| el18gs | 2:eaf245af2aae | 369 | } else { |
| el18gs | 2:eaf245af2aae | 370 | return false; |
| el18gs | 2:eaf245af2aae | 371 | } |
| el18gs | 2:eaf245af2aae | 372 | } |
| el18gs | 2:eaf245af2aae | 373 | |
| el18gs | 2:eaf245af2aae | 374 | std::string Ghost::type_to_string(Type type) |
| el18gs | 2:eaf245af2aae | 375 | { |
| el18gs | 2:eaf245af2aae | 376 | if(type == BASIC) { |
| el18gs | 2:eaf245af2aae | 377 | return "BASIC"; |
| el18gs | 2:eaf245af2aae | 378 | } else if (type == ECTO) { |
| el18gs | 2:eaf245af2aae | 379 | return "ECTOPLASM"; |
| el18gs | 2:eaf245af2aae | 380 | } else if (type == POLTER) { |
| el18gs | 2:eaf245af2aae | 381 | return "POLTERGIEST"; |
| el18gs | 2:eaf245af2aae | 382 | } else if (type == ORB) { |
| el18gs | 2:eaf245af2aae | 383 | return "ORB"; |
| el18gs | 2:eaf245af2aae | 384 | } else if (type == FUNNEL) { |
| el18gs | 2:eaf245af2aae | 385 | return "FUNNEL"; |
| el18gs | 2:eaf245af2aae | 386 | } else { |
| el18gs | 2:eaf245af2aae | 387 | return "NULL"; |
| el18gs | 2:eaf245af2aae | 388 | } |
| el18gs | 2:eaf245af2aae | 389 | } |
| el18gs | 2:eaf245af2aae | 390 | |
| el18gs | 2:eaf245af2aae | 391 | Type Ghost::string_to_type(std::string type) |
| el18gs | 2:eaf245af2aae | 392 | { |
| el18gs | 2:eaf245af2aae | 393 | if(type == "BASIC") { |
| el18gs | 2:eaf245af2aae | 394 | return BASIC; |
| el18gs | 2:eaf245af2aae | 395 | } else if (type == "ECTOPLASM") { |
| el18gs | 2:eaf245af2aae | 396 | return ECTO; |
| el18gs | 2:eaf245af2aae | 397 | } else if (type == "POLTERGIEST") { |
| el18gs | 2:eaf245af2aae | 398 | return POLTER; |
| el18gs | 2:eaf245af2aae | 399 | } else if (type == "ORB") { |
| el18gs | 2:eaf245af2aae | 400 | return ORB; |
| el18gs | 2:eaf245af2aae | 401 | } else if (type == "FUNNEL") { |
| el18gs | 2:eaf245af2aae | 402 | return FUNNEL; |
| el18gs | 2:eaf245af2aae | 403 | } else { |
| el18gs | 2:eaf245af2aae | 404 | return BASIC; |
| el18gs | 2:eaf245af2aae | 405 | } |
| el18gs | 2:eaf245af2aae | 406 | } |
| el18gs | 2:eaf245af2aae | 407 | |
| el18gs | 2:eaf245af2aae | 408 | |
| el18gs | 2:eaf245af2aae | 409 | void Ghost::delete_file(const char filename[]) |
| el18gs | 2:eaf245af2aae | 410 | { |
| el18gs | 2:eaf245af2aae | 411 | printf("Deleting file '%s'...",filename); |
| el18gs | 2:eaf245af2aae | 412 | FILE *fp = fopen(filename, "r"); // try and open file |
| el18gs | 2:eaf245af2aae | 413 | if (fp != NULL) { // if it does open... |
| el18gs | 2:eaf245af2aae | 414 | fclose(fp); // close it |
| el18gs | 2:eaf245af2aae | 415 | remove(filename); // and then delete |
| el18gs | 2:eaf245af2aae | 416 | printf("Done!\n"); |
| el18gs | 2:eaf245af2aae | 417 | } |
| el18gs | 2:eaf245af2aae | 418 | // if we can't open it, it doesn't exist and so we can't delete it |
| el18gs | 2:eaf245af2aae | 419 | } |
| el18gs | 2:eaf245af2aae | 420 | |
| el18gs | 2:eaf245af2aae | 421 | |
| el18gs | 2:eaf245af2aae | 422 | |
| el18gs | 2:eaf245af2aae | 423 |