mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 23:10:05 +00:00
Draw 4-bit encoded radial data
This commit is contained in:
parent
41b491314b
commit
8d1be0f54a
7 changed files with 158 additions and 25 deletions
37
wxdata/source/scwx/wsr88d/rpg/generic_radial_data_packet.cpp
Normal file
37
wxdata/source/scwx/wsr88d/rpg/generic_radial_data_packet.cpp
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
#include <scwx/wsr88d/rpg/generic_radial_data_packet.hpp>
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <boost/log/trivial.hpp>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace wsr88d
|
||||
{
|
||||
namespace rpg
|
||||
{
|
||||
|
||||
static const std::string logPrefix_ =
|
||||
"[scwx::wsr88d::rpg::generic_radial_data_packet] ";
|
||||
|
||||
class GenericRadialDataPacketImpl
|
||||
{
|
||||
public:
|
||||
explicit GenericRadialDataPacketImpl() = default;
|
||||
~GenericRadialDataPacketImpl() = default;
|
||||
};
|
||||
|
||||
GenericRadialDataPacket::GenericRadialDataPacket() :
|
||||
p(std::make_unique<GenericRadialDataPacketImpl>())
|
||||
{
|
||||
}
|
||||
GenericRadialDataPacket::~GenericRadialDataPacket() = default;
|
||||
|
||||
GenericRadialDataPacket::GenericRadialDataPacket(
|
||||
GenericRadialDataPacket&&) noexcept = default;
|
||||
GenericRadialDataPacket& GenericRadialDataPacket::operator=(
|
||||
GenericRadialDataPacket&&) noexcept = default;
|
||||
|
||||
} // namespace rpg
|
||||
} // namespace wsr88d
|
||||
} // namespace scwx
|
||||
|
|
@ -24,9 +24,14 @@ public:
|
|||
uint16_t startAngle_;
|
||||
uint16_t angleDelta_;
|
||||
std::vector<uint8_t> data_;
|
||||
std::vector<uint8_t> level_;
|
||||
|
||||
Radial() :
|
||||
numberOfRleHalfwords_ {0}, startAngle_ {0}, angleDelta_ {0}, data_ {}
|
||||
numberOfRleHalfwords_ {0},
|
||||
startAngle_ {0},
|
||||
angleDelta_ {0},
|
||||
data_ {},
|
||||
level_ {}
|
||||
{
|
||||
}
|
||||
};
|
||||
|
|
@ -103,6 +108,21 @@ uint16_t RadialDataPacket::number_of_radials() const
|
|||
return p->numberOfRadials_;
|
||||
}
|
||||
|
||||
float RadialDataPacket::start_angle(uint16_t r) const
|
||||
{
|
||||
return p->radial_[r].startAngle_ * 0.1f;
|
||||
}
|
||||
|
||||
float RadialDataPacket::delta_angle(uint16_t r) const
|
||||
{
|
||||
return p->radial_[r].angleDelta_ * 0.1f;
|
||||
}
|
||||
|
||||
const std::vector<uint8_t>& RadialDataPacket::level(uint16_t r) const
|
||||
{
|
||||
return p->radial_[r].level_;
|
||||
}
|
||||
|
||||
size_t RadialDataPacket::data_size() const
|
||||
{
|
||||
return p->dataSize_;
|
||||
|
|
@ -197,6 +217,14 @@ bool RadialDataPacket::Parse(std::istream& is)
|
|||
{
|
||||
radial.data_.pop_back();
|
||||
}
|
||||
|
||||
radial.level_.resize(radial.data_.size());
|
||||
|
||||
std::transform(std::execution::par_unseq,
|
||||
radial.data_.cbegin(),
|
||||
radial.data_.cend(),
|
||||
radial.level_.begin(),
|
||||
[](uint8_t data) -> uint8_t { return data & 0x0f; });
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue