Files
starruler-linux/scripts/definitions/attributes.as
T
2018-07-17 14:15:37 +02:00

71 lines
1.7 KiB
ActionScript

import saving;
enum AttributeComp {
AC_Add,
AC_AddBase,
AC_AddFactor,
AC_Multiply,
AC_INVALID
};
AttributeComp getAttributeMode(const string& str) {
if(str.equals_nocase("add"))
return AC_Add;
if(str.equals_nocase("addbase"))
return AC_AddBase;
if(str.equals_nocase("addfactor"))
return AC_AddFactor;
if(str.equals_nocase("multiply"))
return AC_Multiply;
return AC_INVALID;
}
string getAttributeModeIdent(int id) {
switch(id) {
case AC_Add: return "Add";
case AC_AddBase: return "AddBase";
case AC_AddFactor: return "AddFactor";
case AC_Multiply: return "Multiply";
}
return "Invalid";
}
//Attributes are computed as:
// attrib = ((Base + AddBase) * (1 + AddFactor) + Add) * Multiply
// Modifies for anything but Multiply is additive, Multiply is multiplicative.
array<string> dynAttributes;
dictionary attribIdents;
uint getEmpAttributeCount() {
return dynAttributes.length + EA_COUNT;
}
int getEmpAttribute(const string& ident, bool create = true) {
int id = ::getEmpireAttribute(ident);
if(id != -1)
return id;
if(!attribIdents.get(ident, id) && create) {
id = int(dynAttributes.length) + EA_COUNT;
dynAttributes.insertLast(ident);
attribIdents.set(ident, id);
}
return id;
}
string getEmpAttributeIdent(int id) {
if(id < EA_COUNT)
return getEmpireAttributeName(id);
if(uint(id - EA_COUNT) >= dynAttributes.length)
return "";
return dynAttributes[id - EA_COUNT];
}
void saveIdentifiers(SaveFile& file) {
for(uint i = 0; i < EA_COUNT; ++i)
file.addIdentifier(SI_EmpAttribute, int(i), getEmpireAttributeName(i));
for(uint i = 0, cnt = dynAttributes.length; i < cnt; ++i)
file.addIdentifier(SI_EmpAttribute, int(EA_COUNT + i), dynAttributes[i]);
}