2023-11-26 01:27:40 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
#include <memory>
|
|
|
|
#include <vector>
|
|
|
|
|
2025-03-10 19:45:42 +01:00
|
|
|
//#include <solanaceae/contact/fwd.hpp>
|
|
|
|
//enum class Contact4 : uint32_t {};
|
2023-11-26 01:27:40 +01:00
|
|
|
|
|
|
|
// fwd
|
|
|
|
class ToxicGames;
|
|
|
|
|
|
|
|
// static state/info + dynamic factory
|
|
|
|
struct ToxicGameI {
|
|
|
|
ToxicGames& _tg;
|
|
|
|
|
|
|
|
ToxicGameI(ToxicGames& tg) : _tg(tg) {}
|
|
|
|
virtual ~ToxicGameI(void) {}
|
|
|
|
|
|
|
|
struct InstanceI {
|
|
|
|
uint32_t _id;
|
|
|
|
|
|
|
|
virtual ~InstanceI(void) {}
|
|
|
|
|
|
|
|
// TODO: just destructor?
|
|
|
|
// needs to send quit to peers?
|
|
|
|
virtual void quit(void) = 0;
|
|
|
|
|
|
|
|
// use state instead?
|
|
|
|
// toxic game states:
|
|
|
|
// - none
|
|
|
|
// - paused
|
|
|
|
// - running
|
|
|
|
// - finished
|
|
|
|
// - invalid
|
|
|
|
virtual bool allInvitesAccepted(void) = 0;
|
|
|
|
|
2025-03-10 19:45:42 +01:00
|
|
|
// TODO: contact
|
2023-11-26 01:27:40 +01:00
|
|
|
virtual void onPacket(uint32_t from, const uint8_t* data, const uint32_t data_size) = 0;
|
|
|
|
|
|
|
|
// ??
|
|
|
|
//virtual void tick();
|
|
|
|
};
|
|
|
|
|
|
|
|
virtual uint8_t getGameType(void) const = 0;
|
|
|
|
|
|
|
|
// with (contact list, (in turn order?))
|
|
|
|
// sends out invites
|
|
|
|
virtual std::unique_ptr<InstanceI> createGame(std::vector<uint32_t> with) = 0;
|
|
|
|
|
|
|
|
// from
|
|
|
|
// game id
|
|
|
|
// with (contact list)
|
|
|
|
virtual std::unique_ptr<InstanceI> acceptInvite(uint32_t from, uint32_t id) = 0;
|
|
|
|
};
|
|
|
|
|