//
// Created by koncord on 18.04.17.
//

#ifndef OPENMW_ACTORPROCESSOR_HPP
#define OPENMW_ACTORPROCESSOR_HPP

#include <boost/unordered_map.hpp>
#include <boost/shared_ptr.hpp>

#include <components/openmw-mp/Log.hpp>
#include <components/openmw-mp/NetworkMessages.hpp>
#include <components/openmw-mp/Packets/Actor/ActorPacket.hpp>
#include "WorldEvent.hpp"
#include "ActorList.hpp"
#include "BaseClientPacketProcessor.hpp"

namespace mwmp
{
    class ActorProcessor : public BaseClientPacketProcessor
    {
    public:
        virtual void Do(ActorPacket &packet, ActorList &actorList) = 0;

        static bool Process(RakNet::Packet &packet, ActorList &actorList);
        static void AddProcessor(ActorProcessor *processor);

        typedef boost::unordered_map<unsigned char, boost::shared_ptr<ActorProcessor> > processors_t;

    private:
        static processors_t processors;
    };
}


#endif //OPENMW_ACTORPROCESSOR_HPP