| 2611 | } |
| 2612 | |
| 2613 | void TerrainPatch::Serialize(SerializeStream& stream, const void* otherObj) |
| 2614 | { |
| 2615 | SERIALIZE_GET_OTHER_OBJ(TerrainPatch); |
| 2616 | |
| 2617 | SERIALIZE_MEMBER(X, _x); |
| 2618 | SERIALIZE_MEMBER(Z, _z); |
| 2619 | SERIALIZE_MEMBER(Offset, _yOffset); |
| 2620 | SERIALIZE_MEMBER(Height, _yHeight); |
| 2621 | SERIALIZE_MEMBER(Heightmap, Heightmap); |
| 2622 | SERIALIZE_MEMBER(Splatmap0, Splatmap[0]); |
| 2623 | SERIALIZE_MEMBER(Splatmap1, Splatmap[1]); |
| 2624 | static_assert(ARRAY_COUNT(Splatmap) == 2, "Please update the code above to match the maximum terrain splatmaps amount."); |
| 2625 | SERIALIZE_MEMBER(Heightfield, _heightfield); |
| 2626 | |
| 2627 | stream.JKEY("Chunks"); |
| 2628 | stream.StartArray(); |
| 2629 | for (int32 i = 0; i < Terrain::ChunksCount; i++) |
| 2630 | { |
| 2631 | stream.StartObject(); |
| 2632 | Chunks[i].Serialize(stream, other ? &other->Chunks[i] : nullptr); |
| 2633 | stream.EndObject(); |
| 2634 | } |
| 2635 | stream.EndArray(); |
| 2636 | |
| 2637 | #if TERRAIN_EDITING |
| 2638 | SaveHeightData(); |
| 2639 | SaveSplatData(); |
| 2640 | #endif |
| 2641 | } |
| 2642 | |
| 2643 | void TerrainPatch::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) |
| 2644 | { |
nothing calls this directly
no test coverage detected