From 93850b0864b3c05b26877e47e1e85fdbaac01199 Mon Sep 17 00:00:00 2001 From: lzwdgc Date: Sat, 1 Aug 2015 00:59:06 +0300 Subject: [PATCH] Fix obj_extractor: angle, scale, Towers. --- src/obj_extractor/obj_extractor.cpp | 23 ++++++++++------------- src/obj_extractor/objects.cpp | 6 +++--- src/obj_extractor/objects.h | 11 +++++------ 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/obj_extractor/obj_extractor.cpp b/src/obj_extractor/obj_extractor.cpp index 78df06a..e5fe84b 100644 --- a/src/obj_extractor/obj_extractor.cpp +++ b/src/obj_extractor/obj_extractor.cpp @@ -129,7 +129,8 @@ void write_mmo(string db, const storage &s) for (auto &seg : s.objects.segments) { - if (seg->segment_type == SegmentType::SHELL) + if (seg->segment_type == SegmentType::SHELL || + seg->segment_type == SegmentType::TOWER) { SegmentObjects *segment = (SegmentObjects *)seg; set objs; @@ -160,13 +161,11 @@ void write_mmo(string db, const storage &s) mb.x = object.position.x; mb.y = object.position.y; mb.z = object.position.z; - mb.roll = atan2(object.m_rotate_z[2].y, object.m_rotate_z[2].z); - mb.pitch = atan2(-object.m_rotate_z[2].x, sqrt(object.m_rotate_z[2].y * object.m_rotate_z[2].y + object.m_rotate_z[2].z * object.m_rotate_z[2].z)); - mb.yaw = atan2(object.m_rotate_z[1].x, object.m_rotate_z[0].x); - // to grad - RAD2GRAD(mb.roll); - RAD2GRAD(mb.pitch); + mb.roll = 0; + mb.pitch = 0; + mb.yaw = acos(object.m_rotate_z[0].x); RAD2GRAD(mb.yaw); + mb.scale = object.m_rotate_z[2].z; auto i = find_if(storage->mapBuildings.begin(), storage->mapBuildings.end(), [&](const decltype(Storage::mapBuildings)::value_type &p) { return *p.second.get() == mb; @@ -212,13 +211,11 @@ void write_mmo(string db, const storage &s) mb.x = object.position.x; mb.y = object.position.y; mb.z = object.position.z; - mb.roll = atan2(object.m_rotate_z[2].y, object.m_rotate_z[2].z); - mb.pitch = atan2(-object.m_rotate_z[2].x, sqrt(object.m_rotate_z[2].y * object.m_rotate_z[2].y + object.m_rotate_z[2].z * object.m_rotate_z[2].z)); - mb.yaw = atan2(object.m_rotate_z[1].x, object.m_rotate_z[0].x); - // to grad - RAD2GRAD(mb.roll); - RAD2GRAD(mb.pitch); + mb.roll = 0; + mb.pitch = 0; + mb.yaw = acos(object.m_rotate_z[0].x); RAD2GRAD(mb.yaw); + mb.scale = object.m_rotate_z[2].z; auto i = find_if(storage->mapObjects.begin(), storage->mapObjects.end(), [&](const decltype(Storage::mapObjects)::value_type &p) { return *p.second.get() == mb; diff --git a/src/obj_extractor/objects.cpp b/src/obj_extractor/objects.cpp index 7a07e77..a1d6efd 100644 --- a/src/obj_extractor/objects.cpp +++ b/src/obj_extractor/objects.cpp @@ -53,9 +53,6 @@ Segment *Segment::create_segment(buffer &b) case SegmentType::SOUND: segment = new SegmentObjects; break; - case SegmentType::MUSIC: - segment = new SegmentObjects; - break; case SegmentType::ANOMALY: segment = new SegmentObjects; break; @@ -68,6 +65,9 @@ Segment *Segment::create_segment(buffer &b) case SegmentType::GOODS: segment = new SegmentObjects; break; + case SegmentType::SOUND_ZONE: + segment = new SegmentObjects; + break; case SegmentType::unk1: segment = new SegmentObjects; break; diff --git a/src/obj_extractor/objects.h b/src/obj_extractor/objects.h index 4183c21..ee9684e 100644 --- a/src/obj_extractor/objects.h +++ b/src/obj_extractor/objects.h @@ -52,9 +52,8 @@ enum class SegmentType : uint32_t LAMP, COVERING, SOUND, - MUSIC, - GOODS, + ANOMALY, TOWER, BOUNDARY, @@ -155,7 +154,7 @@ struct Sound : public Common }; struct Road : public MapObjectWithArray {}; -struct Tower : public MapObjectWithArray {}; +struct Boundary : public MapObjectWithArray {}; #define KNOWN_OBJECT(name) \ struct name : public MapObject {} @@ -166,15 +165,15 @@ KNOWN_OBJECT(Shell); KNOWN_OBJECT(Stone); KNOWN_OBJECT(Explosion); KNOWN_OBJECT(Image); -KNOWN_OBJECT(Music); +KNOWN_OBJECT(Goods); KNOWN_OBJECT(Anomaly); -KNOWN_OBJECT(Boundary); +KNOWN_OBJECT(Tower); +KNOWN_OBJECT(SoundZone); #define UNKNOWN_OBJECT(name) \ struct name : public MapObject { void load(buffer &b){ int pos = b.index(); assert(false); } } UNKNOWN_OBJECT(Building); -UNKNOWN_OBJECT(Goods); UNKNOWN_OBJECT(unk1); struct Objects