void Creature::load(const Aurora::GFFStruct &instance, const Aurora::GFFStruct *blueprint) { assert(!_loaded); // General properties if (blueprint) loadProperties(*blueprint); // Blueprint loadProperties(instance); // Instance // Appearance if (_appearance == Aurora::kFieldIDInvalid) throw Common::Exception("Creature without an appearance"); loadAppearance(); // Position setPosition(instance.getDouble("XPosition"), instance.getDouble("YPosition"), instance.getDouble("ZPosition")); // Orientation float bearingX = instance.getDouble("XOrientation"); float bearingY = instance.getDouble("YOrientation"); float o[3]; Common::vector2orientation(bearingX, bearingY, o[0], o[1], o[2]); setOrientation(o[0], o[1], o[2]); _loaded = true; }
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 Situated::loadPortrait(const Aurora::GFFStruct &gff) { uint32 portraitID = gff.getUint("PortraitId"); if (portraitID != 0) { const Aurora::TwoDAFile &twoda = TwoDAReg.get("portraits"); Common::UString portrait = twoda.getRow(portraitID).getString("BaseResRef"); if (!portrait.empty()) _portrait = "po_" + portrait; } _portrait = gff.getString("Portrait", _portrait); }
void Door::loadObject(const Aurora::GFFStruct &gff) { // Generic type _genericType = gff.getUint("GenericType", _genericType); // State _state = (State) gff.getUint("AnimationState", (uint) _state); // Linked to _linkedToFlag = (LinkedToFlag) gff.getUint("LinkedToFlags", (uint) _linkedToFlag); _linkedTo = gff.getString("LinkedTo"); }
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; }
void Creature::loadProperties(const Aurora::GFFStruct &gff) { // Tag _tag = gff.getString("Tag", _tag); // Name if (gff.hasField("LocName")) { Aurora::LocString name; gff.getLocString("LocName", name); _name = name.getString(); } // Description if (gff.hasField("Description")) { Aurora::LocString description; gff.getLocString("Description", description); _description = description.getString(); } // Portrait loadPortrait(gff); // Appearance _appearance = gff.getUint("Appearance_Type", _appearance); // Static _static = gff.getBool("Static", _static); // Usable _usable = gff.getBool("Useable", _usable); }
void Area::loadProperties(const Aurora::GFFStruct &props) { // Ambient sound const Aurora::TwoDAFile &ambientSound = TwoDAReg.get("ambientsound"); uint32 ambientDay = props.getUint("AmbientSndDay" , Aurora::kStrRefInvalid); uint32 ambientNight = props.getUint("AmbientSndNight", Aurora::kStrRefInvalid); _ambientDay = ambientSound.getRow(ambientDay ).getString("Resource"); _ambientNight = ambientSound.getRow(ambientNight).getString("Resource"); uint32 ambientDayVol = CLIP<uint32>(props.getUint("AmbientSndDayVol" , 127), 0, 127); uint32 ambientNightVol = CLIP<uint32>(props.getUint("AmbientSndNightVol", 127), 0, 127); _ambientDayVol = 1.25 * (1.0 - (1.0 / powf(5.0, ambientDayVol / 127.0))); _ambientNightVol = 1.25 * (1.0 - (1.0 / powf(5.0, ambientNightVol / 127.0))); // TODO: PresetInstance0 - PresetInstance7 // Ambient music const Aurora::TwoDAFile &ambientMusic = TwoDAReg.get("ambientmusic"); uint32 musicDay = props.getUint("MusicDay" , Aurora::kStrRefInvalid); uint32 musicNight = props.getUint("MusicNight" , Aurora::kStrRefInvalid); _musicDay = ambientMusic.getRow(musicDay ).getString("Resource"); _musicNight = ambientMusic.getRow(musicNight).getString("Resource"); // Battle music uint32 musicBattle = props.getUint("MusicBattle", Aurora::kStrRefInvalid); if (musicBattle != Aurora::kStrRefInvalid) { _musicBattle = ambientMusic.getRow(musicBattle).getString("Resource"); // Battle stingers Common::UString stinger[3]; stinger[0] = ambientMusic.getRow(musicBattle).getString("Stinger1"); stinger[1] = ambientMusic.getRow(musicBattle).getString("Stinger2"); stinger[2] = ambientMusic.getRow(musicBattle).getString("Stinger3"); for (int i = 0; i < 3; i++) if (!stinger[i].empty()) _musicBattleStinger.push_back(stinger[i]); } }
void Waypoint::loadProperties(const Aurora::GFFStruct &gff) { // Tag _tag = gff.getString("Tag", _tag); // Map note _hasMapNote = gff.getBool("MapNoteEnabled", _hasMapNote); if (gff.hasField("MapNote")) { Aurora::LocString mapNote; gff.getLocString("MapNote", mapNote); _mapNote = mapNote.getString(); } }
void Area::loadARE(const Aurora::GFFStruct &are) { // Name Aurora::LocString name; are.getLocString("Name", name); _name = name.getString(); }
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 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")); }
void Situated::loadProperties(const Aurora::GFFStruct &gff) { // Tag _tag = gff.getString("Tag", _tag); // Name if (gff.hasField("LocName")) { Aurora::LocString name; gff.getLocString("LocName", name); _name = name.getString(); } // Description if (gff.hasField("Description")) { Aurora::LocString description; gff.getLocString("Description", description); _description = description.getString(); } // Portrait loadPortrait(gff); // Appearance _appearanceID = gff.getUint("Appearance", _appearanceID); // Conversation _conversation = gff.getString("Conversation", _conversation); // Static _static = gff.getBool("Static", _static); // Usable _usable = gff.getBool("Useable", _usable); // Locked _locked = gff.getBool("Locked", _locked); // Scripts readScripts(gff); }
void KotORWidget::load(const Aurora::GFFStruct &gff) { gff.getVector("COLOR", _r, _g, _b); _a = gff.getDouble("ALPHA", 1.0); Extend extend = createExtend(gff); _width = extend.w; _height = extend.h; Widget::setPosition(extend.x, extend.y, 0.0); Border border = createBorder(gff); _quad = new Graphics::Aurora::GUIQuad(border.fill, 0.0, 0.0, extend.w, extend.h); _quad->setPosition(extend.x, extend.y, 0.0); _quad->setTag(getTag()); _quad->setClickable(true); if (border.fill.empty()) _quad->setColor(0.0, 0.0, 0.0, 0.0); Text text = createText(gff); if (!text.text.empty() && !text.font.empty()) { _text = new Graphics::Aurora::HighlightableText(FontMan.get(text.font), text.text, text.r, text.g, text.b, 1.0); const float hspan = extend.w - _text->getWidth(); const float vspan = extend.h - _text->getHeight(); const float x = extend.x + text.halign * hspan; const float y = extend.y + text.valign * vspan; _text->setPosition(x, y, -1.0); _text->setTag(getTag()); _text->setClickable(true); } }
void Waypoint::load(const Aurora::GFFStruct &instance, const Aurora::GFFStruct *blueprint) { // General properties if (blueprint) loadProperties(*blueprint); // Blueprint loadProperties(instance); // Instance // Position setPosition(instance.getDouble("XPosition"), instance.getDouble("YPosition"), instance.getDouble("ZPosition")); // Orientation float bearingX = instance.getDouble("XOrientation"); float bearingY = instance.getDouble("YOrientation"); float o[3]; Common::vector2orientation(bearingX, bearingY, o[0], o[1], o[2]); setOrientation(o[0], o[1], o[2]); }
void Placeable::load(const Aurora::GFFStruct &placeable) { Common::UString temp = placeable.getString("TemplateResRef"); Aurora::GFFFile *utp = 0; if (!temp.empty()) { try { utp = new Aurora::GFFFile(temp, Aurora::kFileTypeUTP, MKTAG('U', 'T', 'P', ' ')); } catch (...) { } } Situated::load(placeable, utp ? &utp->getTopLevel() : 0); delete utp; }
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 setPosition(instance.getDouble("X"), instance.getDouble("Y"), instance.getDouble("Z")); // Orientation float bearing = instance.getDouble("Bearing"); setOrientation(0.0, Common::rad2deg(bearing), 0.0); }
void Waypoint::load(const Aurora::GFFStruct &waypoint) { Common::UString temp = waypoint.getString("TemplateResRef"); Aurora::GFFFile *utw = 0; if (!temp.empty()) { try { utw = new Aurora::GFFFile(temp, Aurora::kFileTypeUTW, MKTAG('U', 'T', 'W', ' ')); } catch (...) { delete utw; } } load(waypoint, utw ? &utw->getTopLevel() : 0); delete utw; }
void Door::load(const Aurora::GFFStruct &door) { Common::UString temp = door.getString("TemplateResRef"); Aurora::GFFFile *utd = 0; if (!temp.empty()) { try { utd = new Aurora::GFFFile(temp, Aurora::kFileTypeUTD, MKTAG('U', 'T', 'D', ' ')); } catch (...) { } } Situated::load(door, utd ? &utd->getTopLevel() : 0); delete utd; setModelState(); }
void Door::load(const Aurora::GFFStruct &door) { Common::UString temp = door.getString("TemplateResRef"); Aurora::GFFFile *utd = 0; if (!temp.empty()) { try { utd = new Aurora::GFFFile(temp, Aurora::kFileTypeUTD, MKTAG('U', 'T', 'D', ' ')); } catch (...) { delete utd; } } Situated::load(door, utd ? &utd->getTopLevel() : 0); if (!utd) warning("Door \"%s\" has no blueprint", _tag.c_str()); delete utd; }
void Placeable::load(const Aurora::GFFStruct &placeable) { Common::UString temp = placeable.getString("TemplateResRef"); Aurora::GFFFile *utp = 0; if (!temp.empty()) { try { utp = new Aurora::GFFFile(temp, Aurora::kFileTypeUTP, MKID_BE('UTP ')); } catch (...) { delete utp; } } Situated::load(placeable, utp ? &utp->getTopLevel() : 0); if (!utp) warning("Placeable \"%s\" has no blueprint", _tag.c_str()); delete utp; }
void Creature::load(const Aurora::GFFStruct &creature) { Common::UString temp = creature.getString("TemplateResRef"); Aurora::GFFFile *utc = 0; if (!temp.empty()) { try { utc = new Aurora::GFFFile(temp, Aurora::kFileTypeUTC, MKTAG('U', 'T', 'C', ' ')); } catch (...) { delete utc; } } load(creature, utc ? &utc->getTopLevel() : 0); if (!utc) warning("Creature \"%s\" has no blueprint", _tag.c_str()); delete utc; }
void Door::loadObject(const Aurora::GFFStruct &gff) { _genericType = gff.getUint("GenericType", _genericType); }
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); }
void Placeable::loadObject(const Aurora::GFFStruct &gff) { // State _state = (State) gff.getUint("AnimationState", (uint) _state); }