KotORWidget::Text KotORWidget::createText(const Aurora::GFFStruct &gff) { Text text; if (gff.hasField("TEXT")) { const Aurora::GFFStruct &t = gff.getStruct("TEXT"); text.font = t.getString("FONT"); text.text = t.getString("TEXT"); text.strRef = t.getUint("STRREF", Aurora::kStrRefInvalid); const uint32 alignment = t.getUint("ALIGNMENT"); t.getVector("COLOR", text.r, text.g, text.b); text.pulsing = t.getBool("PULSING"); if (text.text == "(Unitialized)") text.text.clear(); if (text.strRef != Aurora::kStrRefInvalid) text.text = TalkMan.getString(text.strRef); // TODO: KotORWidget::getText(): Alignment if (alignment == 18) { text.halign = 0.5; text.valign = 0.5; } } return text; }
void Area::loadGIT(const Aurora::GFFStruct &git) { if (git.hasField("AreaProperties")) loadProperties(git.getStruct("AreaProperties")); if (git.hasField("Placeable List")) loadPlaceables(git.getList("Placeable List")); if (git.hasField("Door List")) loadDoors(git.getList("Door List")); if (git.hasField("Creature List")) loadCreatures(git.getList("Creature List")); }
KotORWidget::Extend KotORWidget::createExtend(const Aurora::GFFStruct &gff) { Extend extend; if (gff.hasField("EXTENT")) { const Aurora::GFFStruct &e = gff.getStruct("EXTENT"); extend.x = (float) e.getSint("LEFT"); extend.y = (float) e.getSint("TOP"); extend.w = (float) e.getSint("WIDTH"); extend.h = (float) e.getSint("HEIGHT"); } return extend; }
KotORWidget::Border KotORWidget::createBorder(const Aurora::GFFStruct &gff) { Border border; if (gff.hasField("BORDER")) { const Aurora::GFFStruct &b = gff.getStruct("BORDER"); border.corner = b.getString("CORNER"); border.edge = b.getString("EDGE"); border.fill = b.getString("FILL"); border.fillStyle = b.getUint("FILLSTYLE"); border.dimension = b.getUint("DIMENSION"); border.innerOffset = b.getUint("INNEROFFSET"); b.getVector("COLOR", border.r, border.g, border.b); border.pulsing = b.getBool("PULSING"); } return border; }
void Situated::load(const Aurora::GFFStruct &instance, const Aurora::GFFStruct *blueprint) { // General properties if (blueprint) loadProperties(*blueprint); // Blueprint loadProperties(instance); // Instance // Specialized object properties if (blueprint) loadObject(*blueprint); // Blueprint loadObject(instance); // Instance // Appearance if (_appearanceID == Aurora::kFieldIDInvalid) throw Common::Exception("Situated object without an appearance"); loadAppearance(); loadSounds(); // Position float posX = instance.getDouble("X"); float posY = instance.getDouble("Y"); float posZ = instance.getDouble("Z"); if (instance.hasField("Position")) { const Aurora::GFFStruct &pos = instance.getStruct("Position"); posX = pos.getDouble("x"); posY = pos.getDouble("y"); posZ = pos.getDouble("z"); } setPosition(posX, posY, posZ); // Orientation float bearing = instance.getDouble("Bearing"); float rotX = 0.0; float rotY = Common::rad2deg(bearing); float rotZ = 0.0; if (instance.hasField("Orientation")) { const Aurora::GFFStruct &o = instance.getStruct("Orientation"); float oX = o.getDouble("x"); float oY = o.getDouble("y"); float oZ = o.getDouble("z"); float oW = o.getDouble("w"); // Convert quaternions to roll/pitch/yaw rotY = 180.0f - Common::rad2deg(atan2(2 * (oX*oY + oZ*oW), 1 - 2 * (oY*oY + oZ*oZ))); rotX = 180.0f - Common::rad2deg(asin(2 * (oX*oZ - oW*oY))); rotZ = Common::rad2deg(atan2(2 * (oX*oW + oY*oZ), 1 - 2 * (oZ*oZ + oW*oW))); } setOrientation(rotX, rotY, rotZ); }