#pragma once #include "Utility.hpp" #include "Vector.hpp" enum class EntityType { Object, Mob, }; enum class ObjectType{ Boat=1, ItemStack, AreaEffectCloud, Minecart=10, ActivatedTNT=50, EnderCrystal, TippedArrow=60, Snowball, Egg, FireBall, FireCharge, ThrownEnderpearl, WitherSkull, ShulkerBullet, LlamaSpit, FallingObjects=70, Itemframes, EyeOfEnder, ThrownPotion, ThrownExpBottle=75, FireworkRocket, LeashKnot, ArmorStand, EvocationFangs, FishingHook=90, SpectralArrow, DragonFireball=93, }; enum MobType { Item = 1, XPOrb, AreaEffectCloud, ElderGuardian, WitherSkeleton, Stray, ThrownEgg, LeashKnot, Painting, Arrow, Snowball, Fireball, SmallFireball, ThrownEnderpearl, EyeOfEnderSignal, ThrownPotion, ThrownExpBottle, ItemFrame, WitherSkull, PrimedTnt, FallingSand, FireworksRocketEntity, Husk, SpectralArrow, ShulkerBullet, DragonFireball, ZombieVillager, SkeletonHorse, ZombieHorse, ArmorStand, Donkey, Mule, EvocationFangs, EvocationIllager, Vex, VindicationIllager, IllusionIllager, MinecartCommandBlock=40, Boat, MinecartRideable, MinecartChest, MinecartFurnace, MinecartTNT, MinecartHopper, MinecartSpawner, Creeper=50, Skeleton, Spider, Giant, Zombie, Slime, Ghast, PigZombie, Enderman, CaveSpider, Silverfish, Blaze, LavaSlime, EnderDragon, WitherBoss, Bat, Witch, Endermite, Guardian, Shulker, Pig=90, Sheep, Cow, Chicken, Squid, Wolf, MushroomCow, SnowMan, Ozelot, VillagerGolem, Horse, Rabbit, PolarBear, Llama, LlamaSpit, Parrot, Villager=120, EnderCrystal=200, }; struct Entity { Uuid uuid; VectorF pos = 0; VectorF vel = 0; unsigned int entityId = 0; double yaw = 0; double pitch = 0; double width = 1.0; double height = 1.0; glm::vec3 renderColor; int entityType=0; EntityType type = EntityType::Object; bool isSolid = true; double gravity = 32.0; // in m/s^2 double drag = 0.4; double terminalVelocity = 78.4; bool onGround = true; VectorF EyeOffset = VectorF(0,1.62,0); bool isFlying = false; static VectorF DecodeVelocity(short x, short y, short z); static VectorF DecodeDeltaPos(short deltaX, short deltaY, short deltaZ); static double DecodeYaw(double yaw); static double DecodePitch(double pitch); static double EncodeYaw(double yaw); static double EncodePitch(double pitch); }; Entity CreateObject(ObjectType type); Entity CreateMob(MobType type);