370 if (data.size() == 0)
376 size_t length = data.size();
380 const unsigned char index = ProtocolCraft::ReadData<unsigned char>(iter, length);
386 const int type = ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length);
389 enum EntityMetadataTypes
393#if PROTOCOL_VERSION > 760
399#if PROTOCOL_VERSION > 340
406 OptionalBlockPosition,
408#if PROTOCOL_VERSION > 769
409 OptionalLivingEntityReference,
414#if PROTOCOL_VERSION > 761
417#if PROTOCOL_VERSION < 773
420#if PROTOCOL_VERSION > 340
423#if PROTOCOL_VERSION > 765
426#if PROTOCOL_VERSION > 404
431#if PROTOCOL_VERSION > 758
434#if PROTOCOL_VERSION > 774
437#if PROTOCOL_VERSION > 769
440#if PROTOCOL_VERSION > 774
443#if PROTOCOL_VERSION > 765
446#if PROTOCOL_VERSION > 769
449#if PROTOCOL_VERSION > 758
452#if PROTOCOL_VERSION > 769
455#if PROTOCOL_VERSION > 774
458#if PROTOCOL_VERSION > 769
461#if PROTOCOL_VERSION > 774
464#if PROTOCOL_VERSION > 773
465 ZombieNautilusVariant,
467#if PROTOCOL_VERSION > 758
471#if PROTOCOL_VERSION > 761
473#if PROTOCOL_VERSION > 765
476#if PROTOCOL_VERSION > 772
478 WeatheringCopperState,
482#if PROTOCOL_VERSION > 772
486#if PROTOCOL_VERSION > 773
493 case EntityMetadataTypes::Char:
494 value = ProtocolCraft::ReadData<char>(iter, length);
496 case EntityMetadataTypes::Int:
497 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
499#if PROTOCOL_VERSION > 760
500 case EntityMetadataTypes::Long:
501 value =
static_cast<long long int>(ProtocolCraft::ReadData<ProtocolCraft::VarLong>(iter, length));
504 case EntityMetadataTypes::Float:
505 value = ProtocolCraft::ReadData<float>(iter, length);
507 case EntityMetadataTypes::String:
508 value = ProtocolCraft::ReadData<std::string>(iter, length);
510 case EntityMetadataTypes::Chat:
512 std::any_cast<ProtocolCraft::Chat&>(value).Read(iter, length);
514#if PROTOCOL_VERSION > 340
515 case EntityMetadataTypes::OptionalChat:
516 if (ProtocolCraft::ReadData<bool>(iter, length))
519 std::any_cast<std::optional<ProtocolCraft::Chat>&>(value).value().Read(iter, length);
523 value = std::optional<ProtocolCraft::Chat>();
527 case EntityMetadataTypes::Slot:
529 std::any_cast<ProtocolCraft::Slot&>(value).Read(iter, length);
531 case EntityMetadataTypes::Bool:
532 value = ProtocolCraft::ReadData<bool>(iter, length);
534 case EntityMetadataTypes::Rotations:
537 for (
int i = 0; i < 3; ++i)
539 rotation[i] = ProtocolCraft::ReadData<float>(iter, length);
544 case EntityMetadataTypes::BlockPosition:
551 case EntityMetadataTypes::OptionalBlockPosition:
552 if (ProtocolCraft::ReadData<bool>(iter, length))
556 value = std::optional<Position>(
position);
560 value = std::optional<Position>();
563 case EntityMetadataTypes::DirectionType:
564 value =
static_cast<Direction>(
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length)));
566#if PROTOCOL_VERSION > 769
567 case EntityMetadataTypes::OptionalLivingEntityReference:
569 case EntityMetadataTypes::OptionalUUID:
571 if (ProtocolCraft::ReadData<bool>(iter, length))
573 value = std::optional<ProtocolCraft::UUID>(ProtocolCraft::ReadData<ProtocolCraft::UUID>(iter, length));
577 value = std::optional<ProtocolCraft::UUID>();
580 case EntityMetadataTypes::BlockstateType:
581 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
583#if PROTOCOL_VERSION > 761
584 case EntityMetadataTypes::OptionalBlockstate:
585 if (
const int n = ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length))
587 value = std::optional<int>(n);
591 value = std::optional<int>();
595#if PROTOCOL_VERSION < 773
596 case EntityMetadataTypes::NBT:
599 unnamed_value.
Read(iter, length);
604#if PROTOCOL_VERSION > 340
605 case EntityMetadataTypes::Particle:
608 particle.
Read(iter, length);
613#if PROTOCOL_VERSION > 765
614 case EntityMetadataTypes::Particles:
615 value = ProtocolCraft::ReadData<std::vector<ProtocolCraft::Particle>>(iter, length);
618#if PROTOCOL_VERSION > 404
619 case EntityMetadataTypes::VillagerDataType:
621 ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length),
622 ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length),
623 ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length)
626 case EntityMetadataTypes::OptionalUint:
628 const int val = ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length);
629 value = val > 0 ? std::optional<int>(val - 1) : std::optional<int>();
632 case EntityMetadataTypes::PoseType:
633 value =
static_cast<Pose>(
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length)));
636#if PROTOCOL_VERSION > 758
637 case EntityMetadataTypes::CatVariant:
638 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
641#if PROTOCOL_VERSION > 774
642 case EntityMetadataTypes::CatSoundVariant:
643 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
646#if PROTOCOL_VERSION > 769
647 case EntityMetadataTypes::CowVariant:
648 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
651#if PROTOCOL_VERSION > 774
652 case EntityMetadataTypes::CowSoundVariant:
653 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
656#if PROTOCOL_VERSION > 765
657 case EntityMetadataTypes::WolfVariant:
658 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
661#if PROTOCOL_VERSION > 769
662 case EntityMetadataTypes::WolfSoundVariant:
663 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
666#if PROTOCOL_VERSION > 758
667 case EntityMetadataTypes::FrogVariant:
668 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
671#if PROTOCOL_VERSION > 769
672 case EntityMetadataTypes::PigVariant:
673 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
676#if PROTOCOL_VERSION > 774
677 case EntityMetadataTypes::PigSoundVariant:
678 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
681#if PROTOCOL_VERSION > 769
682 case EntityMetadataTypes::ChickenVariant:
683 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
686#if PROTOCOL_VERSION > 774
687 case EntityMetadataTypes::ChickenSoundVariant:
688 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
691#if PROTOCOL_VERSION > 773
692 case EntityMetadataTypes::ZombieNautilusVariant:
693 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
696#if PROTOCOL_VERSION > 758
697 case EntityMetadataTypes::OptionalGlobalPos:
698 if (ProtocolCraft::ReadData<bool>(iter, length))
701 dimension.
Read(iter, length);
703 pos.
Read(iter, length);
705 value = std::optional<GlobalPos>({
712 value = std::optional<GlobalPos>();
715 case EntityMetadataTypes::PaintingVariant:
716 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
719#if PROTOCOL_VERSION > 761
720 case EntityMetadataTypes::SnifferState:
721 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
723#if PROTOCOL_VERSION > 765
724 case EntityMetadataTypes::ArmadilloState:
725 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
728#if PROTOCOL_VERSION > 772
729 case EntityMetadataTypes::CopperGolemState:
730 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
732 case EntityMetadataTypes::WeatheringCopperState:
733 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
736 case EntityMetadataTypes::Vec3:
738 const float x = ProtocolCraft::ReadData<float>(iter, length);
739 const float y = ProtocolCraft::ReadData<float>(iter, length);
740 const float z = ProtocolCraft::ReadData<float>(iter, length);
744 case EntityMetadataTypes::Quaternion:
746 const float x = ProtocolCraft::ReadData<float>(iter, length);
747 const float y = ProtocolCraft::ReadData<float>(iter, length);
748 const float z = ProtocolCraft::ReadData<float>(iter, length);
749 const float w = ProtocolCraft::ReadData<float>(iter, length);
750 value = std::array<float, 4>{x, y, z, w};
754#if PROTOCOL_VERSION > 772
755 case EntityMetadataTypes::ResolvableProfile:
756 value = ProtocolCraft::ReadData<ProtocolCraft::Components::DataComponentTypeResolvableProfile>(iter, length);
759#if PROTOCOL_VERSION > 773
760 case EntityMetadataTypes::HumanoidArm:
761 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
765 LOG_ERROR(
"Unknown type in entity metadata : " << type <<
".Stopping current metadata parsing.");
1575#if PROTOCOL_VERSION > 758
1577 return std::make_shared<AllayEntity>();
1580 return std::make_shared<AreaEffectCloudEntity>();
1581#if PROTOCOL_VERSION > 765
1583 return std::make_shared<ArmadilloEntity>();
1586 return std::make_shared<ArmorStandEntity>();
1588 return std::make_shared<ArrowEntity>();
1589#if PROTOCOL_VERSION > 754
1591 return std::make_shared<AxolotlEntity>();
1594 return std::make_shared<BatEntity>();
1595#if PROTOCOL_VERSION > 498
1597 return std::make_shared<BeeEntity>();
1600 return std::make_shared<BlazeEntity>();
1601#if PROTOCOL_VERSION < 768
1602 case EntityType::Boat:
1603 return std::make_shared<BoatEntity>();
1614 return std::make_shared<BoatEntity>(type);
1616#if PROTOCOL_VERSION > 765
1618 return std::make_shared<BoggedEntity>();
1620#if PROTOCOL_VERSION > 764
1622 return std::make_shared<BreezeEntity>();
1624#if PROTOCOL_VERSION > 765
1626 return std::make_shared<BreezeWindChargeEntity>();
1628#if PROTOCOL_VERSION > 758
1629#if PROTOCOL_VERSION < 768
1630 case EntityType::ChestBoat:
1631 return std::make_shared<ChestBoatEntity>();
1642 return std::make_shared<ChestBoatEntity>(type);
1645#if PROTOCOL_VERSION > 767
1647 return std::make_shared<ChestRaftEntity>(type);
1649#if PROTOCOL_VERSION > 404
1651 return std::make_shared<CatEntity>();
1653#if PROTOCOL_VERSION > 760
1655 return std::make_shared<CamelEntity>();
1657#if PROTOCOL_VERSION > 773
1659 return std::make_shared<CamelHuskEntity>();
1662 return std::make_shared<CaveSpiderEntity>();
1664 return std::make_shared<ChickenEntity>();
1665#if PROTOCOL_VERSION > 340
1667 return std::make_shared<CodEntity>();
1669#if PROTOCOL_VERSION > 772
1671 return std::make_shared<CopperGolemEntity>();
1674 return std::make_shared<CowEntity>();
1675#if PROTOCOL_VERSION > 767
1677 return std::make_shared<CreakingEntity>();
1679#if PROTOCOL_VERSION > 767 && PROTOCOL_VERSION < 769
1680 case EntityType::CreakingTransient:
1681 return std::make_shared<CreakingTransientEntity>();
1684 return std::make_shared<CreeperEntity>();
1685#if PROTOCOL_VERSION > 761
1687 return std::make_shared<DisplayBlockDisplayEntity>();
1689 return std::make_shared<DisplayItemDisplayEntity>();
1691 return std::make_shared<DisplayTextDisplayEntity>();
1693#if PROTOCOL_VERSION > 340
1695 return std::make_shared<DolphinEntity>();
1698 return std::make_shared<DonkeyEntity>();
1700 return std::make_shared<DragonFireballEntity>();
1701#if PROTOCOL_VERSION > 340
1703 return std::make_shared<DrownedEntity>();
1706 return std::make_shared<ElderGuardianEntity>();
1708 return std::make_shared<EndCrystalEntity>();
1710 return std::make_shared<EnderDragonEntity>();
1712 return std::make_shared<EnderManEntity>();
1714 return std::make_shared<EndermiteEntity>();
1716 return std::make_shared<EvokerEntity>();
1718 return std::make_shared<EvokerFangsEntity>();
1720 return std::make_shared<ExperienceOrbEntity>();
1722 return std::make_shared<EyeOfEnderEntity>();
1724 return std::make_shared<FallingBlockEntity>();
1726 return std::make_shared<FireworkRocketEntity>();
1727#if PROTOCOL_VERSION > 404
1729 return std::make_shared<FoxEntity>();
1731#if PROTOCOL_VERSION > 758
1733 return std::make_shared<FrogEntity>();
1736 return std::make_shared<GhastEntity>();
1737#if PROTOCOL_VERSION > 770
1739 return std::make_shared<HappyGhastEntity>();
1742 return std::make_shared<GiantEntity>();
1743#if PROTOCOL_VERSION > 754
1745 return std::make_shared<GlowItemFrameEntity>();
1747 return std::make_shared<GlowSquidEntity>();
1749 return std::make_shared<GoatEntity>();
1752 return std::make_shared<GuardianEntity>();
1753#if PROTOCOL_VERSION > 578
1755 return std::make_shared<HoglinEntity>();
1758 return std::make_shared<HorseEntity>();
1760 return std::make_shared<HuskEntity>();
1762 return std::make_shared<IllusionerEntity>();
1763#if PROTOCOL_VERSION > 761
1765 return std::make_shared<InteractionEntity>();
1768 return std::make_shared<IronGolemEntity>();
1770 return std::make_shared<ItemEntity>();
1772 return std::make_shared<ItemFrameEntity>();
1773#if PROTOCOL_VERSION > 765
1775 return std::make_shared<OminousItemSpawnerEntity>();
1778 return std::make_shared<LargeFireballEntity>();
1780 return std::make_shared<LeashFenceKnotEntity>();
1781#if PROTOCOL_VERSION > 340
1783 return std::make_shared<LightningBoltEntity>();
1786 return std::make_shared<LlamaEntity>();
1788 return std::make_shared<LlamaSpitEntity>();
1790 return std::make_shared<MagmaCubeEntity>();
1791#if PROTOCOL_VERSION > 772
1793 return std::make_shared<MannequinEntity>();
1795#if PROTOCOL_VERSION > 754
1797 return std::make_shared<MarkerEntity>();
1800 return std::make_shared<MinecartEntity>();
1802 return std::make_shared<MinecartChestEntity>();
1804 return std::make_shared<MinecartCommandBlockEntity>();
1806 return std::make_shared<MinecartFurnaceEntity>();
1808 return std::make_shared<MinecartHopperEntity>();
1810 return std::make_shared<MinecartSpawnerEntity>();
1812 return std::make_shared<MinecartTNTEntity>();
1814 return std::make_shared<MuleEntity>();
1815#if PROTOCOL_VERSION > 773
1817 return std::make_shared<NautilusEntity>();
1820 return std::make_shared<MushroomCowEntity>();
1822 return std::make_shared<OcelotEntity>();
1824 return std::make_shared<PaintingEntity>();
1825#if PROTOCOL_VERSION > 404
1827 return std::make_shared<PandaEntity>();
1829#if PROTOCOL_VERSION > 773
1831 return std::make_shared<ParchedEntity>();
1834 return std::make_shared<ParrotEntity>();
1835#if PROTOCOL_VERSION > 340
1837 return std::make_shared<PhantomEntity>();
1840 return std::make_shared<PigEntity>();
1841#if PROTOCOL_VERSION > 578
1843 return std::make_shared<PiglinEntity>();
1845#if PROTOCOL_VERSION > 736
1847 return std::make_shared<PiglinBruteEntity>();
1849#if PROTOCOL_VERSION > 404
1851 return std::make_shared<PillagerEntity>();
1854 return std::make_shared<PolarBearEntity>();
1856 return std::make_shared<PrimedTntEntity>();
1857#if PROTOCOL_VERSION > 340
1859 return std::make_shared<PufferfishEntity>();
1862 return std::make_shared<RabbitEntity>();
1863#if PROTOCOL_VERSION > 767
1865 return std::make_shared<RaftEntity>(type);
1867#if PROTOCOL_VERSION > 404
1869 return std::make_shared<RavagerEntity>();
1871#if PROTOCOL_VERSION > 340
1873 return std::make_shared<SalmonEntity>();
1876 return std::make_shared<SheepEntity>();
1878 return std::make_shared<ShulkerEntity>();
1880 return std::make_shared<ShulkerBulletEntity>();
1882 return std::make_shared<SilverfishEntity>();
1884 return std::make_shared<SkeletonEntity>();
1886 return std::make_shared<SkeletonHorseEntity>();
1888 return std::make_shared<SlimeEntity>();
1890 return std::make_shared<SmallFireballEntity>();
1891#if PROTOCOL_VERSION > 761
1893 return std::make_shared<SnifferEntity>();
1896 return std::make_shared<SnowGolemEntity>();
1898 return std::make_shared<SnowballEntity>();
1900 return std::make_shared<SpectralArrowEntity>();
1902 return std::make_shared<SpiderEntity>();
1904 return std::make_shared<SquidEntity>();
1906 return std::make_shared<StrayEntity>();
1907#if PROTOCOL_VERSION > 578
1909 return std::make_shared<StriderEntity>();
1911#if PROTOCOL_VERSION > 775
1913 return std::make_shared<SulfurCubeEntity>();
1915#if PROTOCOL_VERSION > 758
1917 return std::make_shared<TadpoleEntity>();
1920 return std::make_shared<ThrownEggEntity>();
1922 return std::make_shared<ThrownEnderpearlEntity>();
1924 return std::make_shared<ThrownExperienceBottleEntity>();
1925#if PROTOCOL_VERSION < 770
1926 case EntityType::ThrownPotion:
1927 return std::make_shared<ThrownPotionEntity>();
1930 return std::make_shared<ThrownSplashPotionEntity>();
1932 return std::make_shared<ThrownLingeringPotionEntity>();
1934#if PROTOCOL_VERSION > 340
1936 return std::make_shared<ThrownTridentEntity>();
1938#if PROTOCOL_VERSION > 404
1940 return std::make_shared<TraderLlamaEntity>();
1942#if PROTOCOL_VERSION > 340
1944 return std::make_shared<TropicalFishEntity>();
1946#if PROTOCOL_VERSION > 340
1948 return std::make_shared<TurtleEntity>();
1951 return std::make_shared<VexEntity>();
1953 return std::make_shared<VillagerEntity>();
1955 return std::make_shared<VindicatorEntity>();
1956#if PROTOCOL_VERSION > 404
1958 return std::make_shared<WanderingTraderEntity>();
1960#if PROTOCOL_VERSION > 758
1962 return std::make_shared<WardenEntity>();
1964#if PROTOCOL_VERSION > 764
1966 return std::make_shared<WindChargeEntity>();
1969 return std::make_shared<WitchEntity>();
1971 return std::make_shared<WitherBossEntity>();
1973 return std::make_shared<WitherSkeletonEntity>();
1975 return std::make_shared<WitherSkullEntity>();
1977 return std::make_shared<WolfEntity>();
1978#if PROTOCOL_VERSION > 578
1980 return std::make_shared<ZoglinEntity>();
1983 return std::make_shared<ZombieEntity>();
1985 return std::make_shared<ZombieHorseEntity>();
1986#if PROTOCOL_VERSION > 773
1988 return std::make_shared<ZombieNautilusEntity>();
1991 return std::make_shared<ZombieVillagerEntity>();
1992#if PROTOCOL_VERSION > 578
1994 return std::make_shared<ZombifiedPiglinEntity>();
1996 case EntityType::PigZombie:
1997 return std::make_shared<PigZombieEntity>();
2000 return std::make_shared<PlayerEntity>();
2001#if PROTOCOL_VERSION > 340
2003 return std::make_shared<FishingHookEntity>();
2082 std::scoped_lock<std::shared_mutex> lock(
entity_mutex);
2087 faces = std::vector<Renderer::Face>(6);
2090 for (
int i = 0; i < 6; ++i)
2098 face_descriptors[i].transformations.scales.push_back(std::make_shared<Renderer::Scale>(
2099 static_cast<float>(half_width),
2100 static_cast<float>(half_height),
2101 static_cast<float>(half_width)
2104 face_descriptors[i].transformations.translations.push_back(std::make_shared<Renderer::Translation>(0.0f,
static_cast<float>(half_height), 0.0f));
2106 face_descriptors[i].transformations.translations.push_back(std::make_shared<Renderer::Translation>(
2112 face_descriptors[i].transformations.rotations.push_back(std::make_shared<Renderer::Rotation>(0.0f, 1.0f, 0.0f,
yaw));
2113 face_descriptors[i].transformations.rotations.push_back(std::make_shared<Renderer::Rotation>(1.0f, 0.0f, 0.0f,
pitch));
2118 faces[i].SetDisplayBackface(
false);
2119 faces[i].SetTextureMultipliers({ 0xFFFFFFFF, 0xFFFFFFFF });
2122 std::array<unsigned short, 4> texture_pos = { 0, 0, 0, 0 };
2123 std::array<unsigned short, 4> texture_size = { 0, 0, 0, 0 };
2127 for (
int j = 0; j < std::min(2, static_cast<int>(
face_descriptors[i].texture_names.size())); ++j)
2130 std::tie(texture_pos[2 * j + 0], texture_pos[2 * j + 1]) = texture_data.
position;
2131 std::tie(texture_size[2 * j + 0], texture_size[2 * j + 1]) = texture_data.
size;
2137 std::array<float, 4> coords =
faces[i].GetTextureCoords(
false);
2139 coords[0] = (texture_pos[0] + coords[0] / 16.0f * texture_size[0]) / atlas->
GetWidth();
2140 coords[1] = (texture_pos[1] + coords[1] / 16.0f * height_normalizer) / atlas->
GetHeight();
2141 coords[2] = (texture_pos[0] + coords[2] / 16.0f * texture_size[0]) / atlas->
GetWidth();
2142 coords[3] = (texture_pos[1] + coords[3] / 16.0f * height_normalizer) / atlas->
GetHeight();
2143 faces[i].SetTextureCoords(coords,
false);
2148 coords =
faces[i].GetTextureCoords(
true);
2150 coords[0] = (texture_pos[2] + coords[0] / 16.0f * texture_size[2]) / atlas->
GetWidth();
2151 coords[1] = (texture_pos[3] + coords[1] / 16.0f * height_normalizer) / atlas->
GetHeight();
2152 coords[2] = (texture_pos[2] + coords[2] / 16.0f * texture_size[2]) / atlas->
GetWidth();
2153 coords[3] = (texture_pos[3] + coords[3] / 16.0f * height_normalizer) / atlas->
GetHeight();
2154 faces[i].SetTextureCoords(coords,
true);
2157 faces[i].SetTransparencyData(transparencies[0]);