mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 04:57:00 -04:00
436c437189
add compiler directives
141 lines
4.5 KiB
C++
141 lines
4.5 KiB
C++
//+----------------------------------------------------------------------------+
|
|
//| Description: Magic Set Editor - Program to make card games |
|
|
//| Copyright: (C) Twan van Laarhoven and the other MSE developers |
|
|
//| License: GNU General Public License 2 or later (see file COPYING) |
|
|
//+----------------------------------------------------------------------------+
|
|
|
|
// ----------------------------------------------------------------------------- : Includes
|
|
|
|
#include <util/prec.hpp>
|
|
#include <data/statistics.hpp>
|
|
#include <data/field.hpp>
|
|
#include <data/field/choice.hpp>
|
|
|
|
extern ScriptValueP script_primary_choice;
|
|
|
|
// ----------------------------------------------------------------------------- : Statistics dimension
|
|
|
|
StatsDimension::StatsDimension()
|
|
: automatic (false)
|
|
, position_hint (0)
|
|
, numeric (false)
|
|
, bin_size (0)
|
|
, show_empty (false)
|
|
, split_list (false)
|
|
{}
|
|
|
|
StatsDimension::StatsDimension(const Field& field)
|
|
: automatic (true)
|
|
, name (field.name)
|
|
, description (field.description)
|
|
, position_hint (field.position_hint)
|
|
, icon_filename (field.icon_filename)
|
|
, dark_icon_filename (field.dark_icon_filename)
|
|
, numeric (false)
|
|
, show_empty (false)
|
|
, split_list (false)
|
|
{
|
|
// choice field?
|
|
const ChoiceField* choice_field = dynamic_cast<const ChoiceField*>(&field);
|
|
if (choice_field) {
|
|
colors = choice_field->choice_colors;
|
|
/*int count = choice_field->choices->lastId();
|
|
for (int i = 0 ; i < count ; ++i) {
|
|
groups.push_back(choice_field->choices->choiceName(i));
|
|
}*/
|
|
// only top level choices
|
|
FOR_EACH_CONST(g, choice_field->choices->choices) {
|
|
groups.push_back(g->name);
|
|
}
|
|
// initialize script: primary_choice(card.{field_name})
|
|
Script& s = script.getMutableScript();
|
|
s.addInstruction(I_PUSH_CONST, script_primary_choice);
|
|
s.addInstruction(I_GET_VAR, SCRIPT_VAR_card);
|
|
s.addInstruction(I_MEMBER_C, field.name);
|
|
s.addInstruction(I_CALL, 1);
|
|
s.addInstruction(I_NOP, SCRIPT_VAR_input);
|
|
} else {
|
|
// initialize script, card.{field_name}
|
|
Script& s = script.getMutableScript();
|
|
s.addInstruction(I_GET_VAR, SCRIPT_VAR_card);
|
|
s.addInstruction(I_MEMBER_C, field.name);
|
|
}
|
|
}
|
|
|
|
IMPLEMENT_REFLECTION_NO_GET_MEMBER(StatsDimension) {
|
|
if (!automatic) {
|
|
REFLECT(name);
|
|
REFLECT_LOCALIZED(description);
|
|
REFLECT(position_hint);
|
|
REFLECT_N("icon", icon_filename);
|
|
REFLECT_N("dark_icon", dark_icon_filename);
|
|
REFLECT(script);
|
|
REFLECT(global_script);
|
|
REFLECT(numeric);
|
|
REFLECT(bin_size);
|
|
REFLECT(show_empty);
|
|
REFLECT(split_list);
|
|
REFLECT(colors);
|
|
REFLECT(groups);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------- : Statistics category
|
|
|
|
StatsCategory::StatsCategory()
|
|
: automatic (false)
|
|
, position_hint (0)
|
|
, type (GRAPH_TYPE_BAR)
|
|
{}
|
|
|
|
StatsCategory::StatsCategory(const StatsDimensionP& dim)
|
|
: automatic (true)
|
|
, name (dim->name)
|
|
, description (dim->description)
|
|
, position_hint (dim->position_hint)
|
|
, icon_filename (dim->icon_filename)
|
|
, dark_icon_filename (dim->dark_icon_filename)
|
|
, dimensions (1, dim)
|
|
, type (GRAPH_TYPE_BAR)
|
|
{}
|
|
|
|
IMPLEMENT_REFLECTION_NO_GET_MEMBER(StatsCategory) {
|
|
if (!automatic) {
|
|
REFLECT(name);
|
|
REFLECT_LOCALIZED(description);
|
|
REFLECT(position_hint);
|
|
REFLECT_N("icon", icon_filename);
|
|
REFLECT_N("dark_icon", dark_icon_filename);
|
|
REFLECT(type);
|
|
REFLECT_N("dimensions", dimension_names);
|
|
}
|
|
}
|
|
|
|
void StatsCategory::find_dimensions(const vector<StatsDimensionP>& available) {
|
|
if (!dimensions.empty()) return;
|
|
FOR_EACH_CONST(n, dimension_names) {
|
|
StatsDimensionP dim;
|
|
FOR_EACH_CONST(d, available) {
|
|
if (d->name == n) {
|
|
dim = d;
|
|
break;
|
|
}
|
|
}
|
|
if (!dim) {
|
|
handle_error(_ERROR_1_("dimension not found",n));
|
|
} else {
|
|
dimensions.push_back(dim);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------- : GraphType (from graph_type.hpp)
|
|
|
|
IMPLEMENT_REFLECTION_ENUM(GraphType) {
|
|
VALUE_N("bar", GRAPH_TYPE_BAR);
|
|
VALUE_N("pie", GRAPH_TYPE_PIE);
|
|
VALUE_N("stack", GRAPH_TYPE_STACK);
|
|
VALUE_N("scatter", GRAPH_TYPE_SCATTER);
|
|
VALUE_N("scatter pie", GRAPH_TYPE_SCATTER_PIE);
|
|
}
|