/* * AIM obj_extractor * Copyright (C) 2015 lzwdgc * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "objects.h" Segment *Segment::create_segment(buffer &b) { ObjectType segment_type; READ(b, segment_type); Segment *segment = 0; switch (segment_type) { case ObjectType::ROAD: segment = new SegmentObjects; break; case ObjectType::BUILDING: segment = new SegmentObjects; break; case ObjectType::TREE: segment = new SegmentObjects; break; case ObjectType::STONE: segment = new SegmentObjects; break; case ObjectType::HELPER: segment = new SegmentObjects; break; case ObjectType::IMAGE: segment = new SegmentObjects; break; case ObjectType::LAMP: segment = new SegmentObjects; break; case ObjectType::SOUND: segment = new SegmentObjects; break; case ObjectType::ANOMALY: segment = new SegmentObjects; break; case ObjectType::TOWER: segment = new SegmentObjects; break; case ObjectType::BOUNDARY: segment = new SegmentObjects; break; case ObjectType::SOUND_ZONE: segment = new SegmentObjects; break; case ObjectType::unk0: segment = new SegmentObjects; break; case ObjectType::unk1: segment = new SegmentObjects; break; default: assert(false); break; } if (segment) { segment->segment_type = segment_type; READ(b, segment->segment_len); READ(b, segment->n_objects); } return segment; } void Objects::load(buffer &b) { READ(b, n_segments); for (int s = 0; s < n_segments; s++) { auto seg = Segment::create_segment(b); if (!seg) break; seg->load(buffer(b, seg->segment_len)); segments.push_back(seg); } }