AppManager.h
AppManager.h
CPP1/* Copyright Statement:2 *3 * (C) 2021-2024 Cubios Inc. All rights reserved.4 */56#pragma once78#include "native.h"9#include <stdint.h>10#include <exception>11#include <memory>12#include <array>13#include "Scene.h"14#include "Screen.h"15#include "NetworkMessage.h"16#include "SaveMessage.h"1718namespace Cubios19{20 class AppManager;2122 struct Timer_t23 {24 bool suspended;25 uint32_t delay;26 uint32_t time;27 uint8_t id;28 };2930 class Application31 {32 public:33 friend AppManager;34 Application() : appMgr(nullptr), curTime(0), Module(Cubios::cubeN)35 {36 }37 virtual ~Application()38 {39 }4041 virtual void on_Message(uint32_t type, uint8_t *pkt, u32_t size) = 0;42 virtual void on_ExternalMessage(uint8_t *pkt, u32_t size) = 0;4344 virtual void on_PhysicsTick(const std::array<Screen, 3> &screens) = 0;45 virtual void on_Tick(uint32_t time, uint32_t dt) = 0;46 virtual void on_Render(std::array<Screen, 3> &screens) = 0;47 virtual void on_Twist(const TOPOLOGY_twistInfo_t &twist) = 0;48 virtual void on_Tap(uint32_t count) {};49 virtual void on_Pat(uint32_t count) {};50 virtual void on_Close() {}51 virtual void on_Timer(uint8_t timerID){};5253 uint32_t GetTime() const { return curTime; }54 uint32_t GetTimeSeconds() const { return curTime / 1000; }5556 void SendNetworkMessage(uint32_t type, NetworkMessage *msg) const;5758 void SendExternalMessage(uint32_t type, uint8_t *data, size_t size) const;5960 void SaveState(void *data, size_t size) const;61 i32_t LoadState(u32_t *id, void *data, size_t size) const;6263 void SaveState(SaveMessage* msg) const;64 i32_t LoadState(u32_t *id, SaveMessage* msg) const;6566 bool SetTimer(uint8_t id, uint32_t delay, bool suspended = false);67 bool StartTimer(uint8_t id);68 bool StopTimer(uint8_t id);69 void KillTimer(uint8_t id);7071 void ShowFPSCounter(bool b);7273 bool IsMasterModule()74 {75 if (this->Module == 0)76 return true;77 else78 return false;79 }8081 inline int GetImageAssetsCount() {return GFX_getAssetsCount();}82 inline int GetSoundAssetsCount() {return SND_getAssetsCount();}8384 private:85 void handleTimers();8687 public:88 Cubios::Scene Scene;89 uint32_t Module;9091 private:92 AppManager *appMgr;93 uint32_t curTime;9495 std::vector<Timer_t> timers;9697 uint8_t appUUID[10];98 };99100 class AppManager101 {102 private:103 friend Application;104 static const uint8_t m_sMaxRxPacketSize = 113;105 static const uint8_t m_sMaxPacketType = 31;106107 uint32_t prevTime;108 std::shared_ptr<Application> application;109110 uint8_t *sendBuffer;111112 void handleNetPacket();113114 void handleExternalData();115116 void handleTwist();117 void handlePat();118119 void SendNetworkMessage(uint32_t type, uint8_t *data, size_t size) const;120121 void SendExternalMessage(uint32_t type, uint8_t *, size_t size);122123 public:124 AppManager() : prevTime(0), sendBuffer(nullptr) {}125 int Main();126127 void SetApplication(Application *app, const std::string &appIdentifier = "");128 };129130}131132
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.