#pragma once class Entity; //class ServerPlayer; #include "ServerPlayer.h" class Packet; using namespace std; class EntityTracker; #define TRACKED_ENTITY_MINIMUM_VIEW_DISTANCE 4 class TrackedEntity { private: static const int TOLERANCE_LEVEL = 4; public: std::shared_ptr e; int range, updateInterval; int xp, yp, zp, yRotp, xRotp, yHeadRotp; double xap, yap, zap; int tickCount; private: double xpu, ypu, zpu; bool updatedPlayerVisibility; bool trackDelta; int teleportDelay; std::shared_ptr wasRiding; public: bool moved; unordered_set , PlayerKeyHash, PlayerKeyEq > seenBy; TrackedEntity(std::shared_ptr e, int range, int updateInterval, bool trackDelta); void tick(EntityTracker *tracker, vector > *players); void broadcast(std::shared_ptr packet); void broadcastAndSend(std::shared_ptr packet); void broadcastRemoved(); void removePlayer(std::shared_ptr sp); private: bool canBySeenBy(std::shared_ptr player); enum eVisibility { eVisibility_NotVisible = 0, eVisibility_IsVisible = 1, eVisibility_SeenAndVisible = 2, }; eVisibility isVisible(EntityTracker *tracker, std::shared_ptr sp, bool forRider = false); // 4J Added forRider public: void updatePlayer(EntityTracker *tracker, std::shared_ptr sp); void updatePlayers(EntityTracker *tracker, vector > *players); private: void sendEntityData(std::shared_ptr conn); std::shared_ptr getAddEntityPacket(); public: void clear(std::shared_ptr sp); };