diff --git a/gamedata.cpp b/gamedata.cpp index 1e2c074..a3364fc 100644 --- a/gamedata.cpp +++ b/gamedata.cpp @@ -71,6 +71,13 @@ void GameData::toggle_turn() } } + for (list::iterator cursor = vertices.begin(); + cursor != vertices.end(); cursor++) + { + GameVertex* v = dynamic_cast(*cursor); + v->attacked = false; + } + current = NULL; } @@ -246,16 +253,21 @@ int GameData::get_range(GameVertex* node) void GameData::attack_vertex(GameVertex* target) { - float atk = current->calculate_attack(); - float armor = target->calculate_armor(); - int damage = (int)(atk / armor); - target->score -= damage; - if (target->score <= 0) remove_vertex(target); - + if (!current->attacked) + { + float atk = current->calculate_attack(); + float armor = target->calculate_armor(); + int damage = (int)(atk / armor); + target->score -= damage; + if (target->score <= 0) remove_vertex(target); + current->attacked = true; + #ifdef DEBUG - fprintf(stderr, "debug: GameData::attack_vertex(): atk=%.2f, armor=%.2f, damage=%d\n", atk, armor, damage); + fprintf(stderr, "debug: GameData::attack_vertex(): atk=%.2f, armor=%.2f, damage=%d\n", atk, armor, damage); #endif + } + mode = MODE_SELECT; } diff --git a/gamevertex.h b/gamevertex.h index 314f9d4..ba597d5 100644 --- a/gamevertex.h +++ b/gamevertex.h @@ -23,6 +23,7 @@ class GameVertex : public Vertex VertexType type; Player* player; + bool attacked; // only applicable for a VERTEX_ATTACKER float calculate_attack(); float calculate_armor();