-/*
- * Ikari.cpp
- *
- * Created on: Aug 10, 2012
- * Author: holy
- */
-
#include "Ikari.h"
+#include "TargetingMode.h"
+#include "../loader/Interpreter.h"
#include "../loader/TypeDescription.h"
using loader::FieldDescription;
+using loader::Interpreter;
using loader::TypeDescription;
namespace common {
void Ikari::CreateTypeDescription() {
Ikari i;
- TypeDescription &td(TypeDescription::CreateOrGet("Ikari"));
+ TypeDescription &td(TypeDescription::Create(TYPE_ID, "Ikari"));
+ td.SetDescription(
+ "Information of a single ikari attack.");
+ td.SetConstructor(&Construct);
td.SetSize(sizeof(Ikari));
- int boolId(TypeDescription::GetTypeId("Boolean"));
- int numberId(TypeDescription::GetTypeId("Number")); // FIXME: need small number type
- int stringId(TypeDescription::GetTypeId("String"));
- int targetsId(TypeDescription::GetTypeId("TargetingMode"));
+ td.AddField("name", FieldDescription(((char *)&i.name) - ((char *)&i), Interpreter::STRING_ID).SetReferenced().SetDescription("the attack's name"));
+ td.AddField("cost", FieldDescription(((char *)&i.cost) - ((char *)&i), Interpreter::NUMBER_ID).SetDescription("amount of ikari points needed and deducted for use"));
+ td.AddField("targets", FieldDescription(((char *)&i.targetingMode) - ((char *)&i), TargetingMode::TYPE_ID).SetDescription("how target selection is to be performed"));
+ td.AddField("type", FieldDescription(((char *)&i.isPhysical) - ((char *)&i), Interpreter::BOOLEAN_ID).SetDescription("if the attack is physical (true) or magical(false)"));
+}
- td.AddField("name", FieldDescription(((char *)&i.name) - ((char *)&i), stringId, true));
- td.AddField("cost", FieldDescription(((char *)&i.cost) - ((char *)&i), numberId, false));
- td.AddField("targets", FieldDescription(((char *)&i.targetingMode) - ((char *)&i), targetsId, false));
- td.AddField("physical", FieldDescription(((char *)&i.isPhysical) - ((char *)&i), boolId, true));
+void Ikari::Construct(void *data) {
+ new (data) Ikari;
}
}