Skip to content

Commit

Permalink
Merge branch 'wowdev:default' into transform-speed
Browse files Browse the repository at this point in the history
  • Loading branch information
ihm-tswow authored Nov 24, 2021
2 parents b991176 + 58ee1dc commit 387c3c0
Show file tree
Hide file tree
Showing 7 changed files with 307 additions and 11 deletions.
116 changes: 116 additions & 0 deletions scripts/docs/api/classes/chunk.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,21 @@ Represents a chunk in the world
- [clear\_colors](chunk.md#clear_colors)
- [clear\_textures](chunk.md#clear_textures)
- [get\_area\_id](chunk.md#get_area_id)
- [get\_deep\_flag](chunk.md#get_deep_flag)
- [get\_deep\_flag\_high](chunk.md#get_deep_flag_high)
- [get\_effect](chunk.md#get_effect)
- [get\_fishable\_flag](chunk.md#get_fishable_flag)
- [get\_fishable\_flag\_high](chunk.md#get_fishable_flag_high)
- [get\_tex](chunk.md#get_tex)
- [get\_texture](chunk.md#get_texture)
- [get\_texture\_count](chunk.md#get_texture_count)
- [get\_vert](chunk.md#get_vert)
- [has\_render\_flags](chunk.md#has_render_flags)
- [remove\_texture](chunk.md#remove_texture)
- [set\_area\_id](chunk.md#set_area_id)
- [set\_deep\_flag](chunk.md#set_deep_flag)
- [set\_effect](chunk.md#set_effect)
- [set\_fishable\_flag](chunk.md#set_fishable_flag)
- [set\_hole](chunk.md#set_hole)
- [set\_impassable](chunk.md#set_impassable)
- [to\_selection](chunk.md#to_selection)
Expand Down Expand Up @@ -142,6 +149,35 @@ Returns the area id of a chunk

___

### get\_deep\_flag

**get_deep_flag**(): *number*

Returns the lower bits of the deep flag
for the water in this chunk.

If chunk has no render data, 0 is returned

**`note`** Only contains the lower 32 bits.
For the higher bits, use get_fishable_flag_high

**Returns:** *number*

___

### get\_deep\_flag\_high

**get_deep_flag_high**(): *number*

Returns the higher bits of the fishable flag
for the water in this chunk.

If chunk has no render data, 0 is returned

**Returns:** *number*

___

### get\_effect

**get_effect**(`layer`: *number*): *number*
Expand All @@ -158,6 +194,35 @@ Name | Type |

___

### get\_fishable\_flag

**get_fishable_flag**(): *number*

Returns the lower bits of the fishable flag
for the water in this chunk.

If chunk has no render data, 0xffffffff is returned

**`note`** Only contains the lower 32 bits.
For the higher bits, use get_fishable_flag_high

**Returns:** *number*

___

### get\_fishable\_flag\_high

**get_fishable_flag_high**(): *number*

Returns the higher bits of the fishable flag
for the water in this chunk.

If chunk has no render data, 0xffffffff is returned

**Returns:** *number*

___

### get\_tex

**get_tex**(`index`: *number*): [*tex*](tex.md)
Expand Down Expand Up @@ -216,6 +281,16 @@ Name | Type | Description |

___

### has\_render\_flags

**has_render_flags**(): *any*

Returns true if the water in this chunk has deep/fishable flag data.

**Returns:** *any*

___

### remove\_texture

**remove_texture**(`index`: *number*): *void*
Expand Down Expand Up @@ -249,6 +324,27 @@ Name | Type |

___

### set\_deep\_flag

**set_deep_flag**(`low`: *number*, `high?`: *number*): *void*

Sets the deep flags for the water in this chunk.
If the first bit is set (it is for value=1), emulators typically interpret this
to mean fatigue should be applied here.

-high is 0 by default.

#### Parameters:

Name | Type |
:------ | :------ |
`low` | *number* |
`high?` | *number* |

**Returns:** *void*

___

### set\_effect

**set_effect**(`layer`: *number*, `effect`: *number*): *any*
Expand All @@ -266,6 +362,26 @@ Name | Type | Description |

___

### set\_fishable\_flag

**set_fishable_flag**(`low`: *number*, `high?`: *number*): *void*

Sets the fishable flag for the water in this chunk.
If render flag data is not present, it is automatically created.

- high is 0 by default

#### Parameters:

Name | Type |
:------ | :------ |
`low` | *number* |
`high?` | *number* |

**Returns:** *void*

___

### set\_hole

**set_hole**(`hole`: *boolean*): *void*
Expand Down
60 changes: 60 additions & 0 deletions scripts/global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,66 @@ declare class chunk {
* @param index valid in range [0-144]
*/
get_vert(index: number): vert;

/**
* Returns true if the water in this chunk has deep/fishable flag data.
*/
has_render_flags(): bool

/**
* Sets the fishable flag for the water in this chunk.
* If render flag data is not present, it is automatically created.
*
* - high is 0 by default
*/
set_fishable_flag(low: number, high?: number): void;

/**
* Returns the lower bits of the fishable flag
* for the water in this chunk.
*
* If chunk has no render data, 0xffffffff is returned
*
* @note Only contains the lower 32 bits.
* For the higher bits, use get_fishable_flag_high
*/
get_fishable_flag(): number;

/**
* Returns the higher bits of the fishable flag
* for the water in this chunk.
*
* If chunk has no render data, 0xffffffff is returned
*/
get_fishable_flag_high(): number;

/**
* Sets the deep flags for the water in this chunk.
* If the first bit is set (it is for value=1), emulators typically interpret this
* to mean fatigue should be applied here.
*
* -high is 0 by default.
*/
set_deep_flag(low: number, high?: number): void;

/**
* Returns the lower bits of the deep flag
* for the water in this chunk.
*
* If chunk has no render data, 0 is returned
*
* @note Only contains the lower 32 bits.
* For the higher bits, use get_fishable_flag_high
*/
get_deep_flag(): number;

/**
* Returns the higher bits of the fishable flag
* for the water in this chunk.
*
* If chunk has no render data, 0 is returned
*/
get_deep_flag_high(): number;
}

/**
Expand Down
25 changes: 17 additions & 8 deletions src/noggit/ChunkWater.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ ChunkWater::ChunkWater(float x, float z, bool use_mclq_green_lava)
void ChunkWater::from_mclq(std::vector<mclq>& layers)
{
math::vector_3d pos(xbase, 0.0f, zbase);

if (!Render.has_value()) Render.emplace();
for (mclq& liquid : layers)
{
std::uint8_t mclq_liquid_type = 0;
Expand All @@ -29,8 +29,8 @@ void ChunkWater::from_mclq(std::vector<mclq>& layers)
{
mclq_tile const& tile = liquid.tiles[z * 8 + x];

misc::bit_or(Render.fishable, x, z, tile.fishable);
misc::bit_or(Render.fatigue, x, z, tile.fatigue);
misc::bit_or(Render.value().fishable, x, z, tile.fishable);
misc::bit_or(Render.value().fatigue, x, z, tile.fatigue);

if (!tile.dont_render)
{
Expand Down Expand Up @@ -66,8 +66,9 @@ void ChunkWater::fromFile(MPQFile &f, size_t basePos)
//render
if (header.ofsRenderMask)
{
f.seek(basePos + header.ofsRenderMask + sizeof(MH2O_Render));
f.read(&Render, sizeof(MH2O_Render));
Render.emplace();
f.seek(basePos + header.ofsRenderMask);
f.read(&Render.value(), sizeof(MH2O_Render));
}

for (std::size_t k = 0; k < header.nLayers; ++k)
Expand Down Expand Up @@ -107,9 +108,17 @@ void ChunkWater::save(sExtendableArray& adt, int base_pos, int& header_pos, int&
if (hasData(0))
{
header.nLayers = _layers.size();
header.ofsRenderMask = current_pos - base_pos;
adt.Insert(current_pos, sizeof(MH2O_Render), reinterpret_cast<char*>(&Render));
current_pos += sizeof(MH2O_Render);

if (Render.has_value())
{
header.ofsRenderMask = current_pos - base_pos;
adt.Insert(current_pos, sizeof(MH2O_Render), reinterpret_cast<char*>(&Render.value()));
current_pos += sizeof(MH2O_Render);
}
else
{
header.ofsRenderMask = 0;
}

header.ofsInformation = current_pos - base_pos;
int info_pos = current_pos;
Expand Down
12 changes: 10 additions & 2 deletions src/noggit/ChunkWater.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,18 @@

#include <vector>
#include <set>
#include <optional>

class MPQFile;
class sExtendableArray;
class MapChunk;

namespace noggit {
namespace scripting {
class chunk;
}
}

class ChunkWater
{
public:
Expand Down Expand Up @@ -84,8 +91,9 @@ class ChunkWater

void copy_height_to_layer(liquid_layer& target, math::vector_3d const& pos, float radius);


MH2O_Render Render;
std::optional<MH2O_Render> Render;

std::vector<liquid_layer> _layers;

friend class noggit::scripting::chunk;
};
8 changes: 8 additions & 0 deletions src/noggit/MapView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2182,6 +2182,10 @@ void MapView::tick (float dt)
<< "\nposition X/Y/Z: " << instance->pos.x << " / " << instance->pos.y << " / " << instance->pos.z
<< "\nrotation X/Y/Z: " << instance->dir.x << " / " << instance->dir.y << " / " << instance->dir.z
<< "\nscale: " << instance->scale

<< "\nServer-side position X: " << (ZEROPOINT - instance->pos.z) << " Y: " << (ZEROPOINT - instance->pos.x) << " Z: " << instance->pos.y
<< "\nServer-side orientation: " << fabs(2 * pi - pi / 180.0 * (float(instance->dir.y) < 0 ? fabs(float(instance->dir.y)) + 180.0 : fabs(float(instance->dir.y) - 180.0)))

<< "\ntextures Used: " << instance->model->header.nTextures
<< "\nsize category: " << instance->size_cat;

Expand All @@ -2205,6 +2209,10 @@ void MapView::tick (float dt)
<< "\nposition X/Y/Z: " << instance->pos.x << " / " << instance->pos.y << " / " << instance->pos.z
<< "\nrotation X/Y/Z: " << instance->dir.x << " / " << instance->dir.y << " / " << instance->dir.z
<< "\ndoodad set: " << instance->doodadset()

<< "\nServer-side position X: " << (ZEROPOINT - instance->pos.z) << " Y: " << (ZEROPOINT - instance->pos.x) << " Z: " << instance->pos.y
<< "\nServer-side orientation: " << fabs(2 * pi - pi / 180.0 * (float(instance->dir.y) < 0 ? fabs(float(instance->dir.y)) + 180.0 : fabs(float(instance->dir.y) - 180.0)))

<< "\ntextures used: " << instance->wmo->textures.size();


Expand Down
Loading

0 comments on commit 387c3c0

Please sign in to comment.