mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-12-01 13:52:19 -05:00
d24c8453db
subrepo: subdir: "libultraship" merged: "a484cda98" upstream: origin: "https://github.com/HarbourMasters/libultraship.git" branch: "main" commit: "a484cda98" git-subrepo: version: "0.4.1" origin: "???" commit: "???"
99 lines
2.6 KiB
C++
99 lines
2.6 KiB
C++
#include "CollisionHeader.h"
|
|
|
|
void Ship::CollisionHeaderV0::ParseFileBinary(BinaryReader* reader, Resource* res)
|
|
{
|
|
CollisionHeader* col = (CollisionHeader*)res;
|
|
|
|
ResourceFile::ParseFileBinary(reader, res);
|
|
|
|
col->absMinX = reader->ReadInt16();
|
|
col->absMinY = reader->ReadInt16();
|
|
col->absMinZ = reader->ReadInt16();
|
|
|
|
col->absMaxX = reader->ReadInt16();
|
|
col->absMaxY = reader->ReadInt16();
|
|
col->absMaxZ = reader->ReadInt16();
|
|
|
|
uint32_t vtxCnt = reader->ReadInt32();
|
|
col->vertices.reserve(vtxCnt);
|
|
|
|
for (uint32_t i = 0; i < vtxCnt; i++)
|
|
{
|
|
float x = reader->ReadInt16();
|
|
float y = reader->ReadInt16();
|
|
float z = reader->ReadInt16();
|
|
col->vertices.push_back(Vec3f(x, y, z));
|
|
}
|
|
|
|
uint32_t polyCnt = reader->ReadUInt32();
|
|
col->polygons.reserve(polyCnt);
|
|
|
|
for (uint32_t i = 0; i < polyCnt; i++)
|
|
col->polygons.push_back(Ship::PolygonEntry(reader));
|
|
|
|
uint32_t polyTypesCnt = reader->ReadUInt32();
|
|
col->polygonTypes.reserve(polyTypesCnt);
|
|
|
|
for (uint32_t i = 0; i < polyTypesCnt; i++)
|
|
col->polygonTypes.push_back(reader->ReadUInt64());
|
|
|
|
col->camData = new CameraDataList();
|
|
|
|
uint32_t camEntriesCnt = reader->ReadUInt32();
|
|
col->camData->entries.reserve(camEntriesCnt);
|
|
|
|
for (uint32_t i = 0; i < camEntriesCnt; i++)
|
|
{
|
|
Ship::CameraDataEntry* entry = new Ship::CameraDataEntry();
|
|
entry->cameraSType = reader->ReadUInt16();
|
|
entry->numData = reader->ReadInt16();
|
|
entry->cameraPosDataIdx = reader->ReadInt32();
|
|
col->camData->entries.push_back(entry);
|
|
}
|
|
|
|
uint32_t camPosCnt = reader->ReadInt32();
|
|
col->camData->cameraPositionData.reserve(camPosCnt);
|
|
|
|
for (uint32_t i = 0; i < camPosCnt; i++)
|
|
{
|
|
Ship::CameraPositionData* entry = new Ship::CameraPositionData();
|
|
entry->x = reader->ReadInt16();
|
|
entry->y = reader->ReadInt16();
|
|
entry->z = reader->ReadInt16();
|
|
col->camData->cameraPositionData.push_back(entry);
|
|
}
|
|
|
|
uint32_t waterBoxCnt = reader->ReadInt32();
|
|
col->waterBoxes.reserve(waterBoxCnt);
|
|
|
|
for (uint32_t i = 0; i < waterBoxCnt; i++)
|
|
{
|
|
Ship::WaterBoxHeader waterBox;
|
|
waterBox.xMin = reader->ReadInt16();
|
|
waterBox.ySurface = reader->ReadInt16();
|
|
waterBox.zMin = reader->ReadInt16();
|
|
waterBox.xLength = reader->ReadInt16();
|
|
waterBox.zLength = reader->ReadInt16();
|
|
waterBox.properties = reader->ReadInt32();
|
|
|
|
col->waterBoxes.push_back(waterBox);
|
|
}
|
|
}
|
|
|
|
Ship::PolygonEntry::PolygonEntry(BinaryReader* reader)
|
|
{
|
|
type = reader->ReadUInt16();
|
|
|
|
vtxA = reader->ReadUInt16();
|
|
vtxB = reader->ReadUInt16();
|
|
vtxC = reader->ReadUInt16();
|
|
|
|
a = reader->ReadUInt16();
|
|
b = reader->ReadUInt16();
|
|
c = reader->ReadUInt16();
|
|
d = reader->ReadUInt16();
|
|
}
|
|
|
|
Ship::WaterBoxHeader::WaterBoxHeader()
|
|
{
|
|
} |