mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
105 lines
No EOL
2.7 KiB
C++
105 lines
No EOL
2.7 KiB
C++
#pragma once
|
|
#include "pch.h"
|
|
#include <chrono>
|
|
#include "Shared/SettingTypes.h"
|
|
#include "Shared/Emulator.h"
|
|
#include "Shared/EmuSettings.h"
|
|
#include "Shared/Interfaces/IMessageManager.h"
|
|
#include "Utilities/Timer.h"
|
|
#include "Utilities/SimpleLock.h"
|
|
|
|
class MessageInfo;
|
|
|
|
class SystemHud final : public IMessageManager
|
|
{
|
|
private:
|
|
Emulator* _emu = nullptr;
|
|
|
|
SimpleLock _msgLock;
|
|
list<unique_ptr<MessageInfo>> _messages;
|
|
|
|
Timer _fpsTimer;
|
|
Timer _animationTimer;
|
|
uint32_t _lastFrameCount = 0;
|
|
uint32_t _lastRenderedFrameCount = 0;
|
|
uint32_t _currentFPS = 0;
|
|
uint32_t _currentRenderedFPS = 0;
|
|
uint32_t _renderedFrameCount = 0;
|
|
|
|
void DrawMessages(DebugHud* hud, uint32_t screenWidth, uint32_t screenHeight) const;
|
|
void DrawBar(DebugHud* hud, int x, int y, int width, int height) const;
|
|
void DrawPauseIcon(DebugHud* hud) const;
|
|
void DrawPlayIcon(DebugHud* hud) const;
|
|
void DrawRecordIcon(DebugHud* hud) const;
|
|
void DrawTurboRewindIcon(DebugHud* hud, bool forRewind, int xOffset) const;
|
|
void DrawMessage(DebugHud* hud, MessageInfo& msg, uint32_t screenWidth, uint32_t screenHeight, int& lastHeight) const;
|
|
void DrawString(DebugHud* hud, uint32_t screenWidth, string msg, int x, int y, uint8_t opacity = 255) const;
|
|
void DisplayMessage(string title, string message) override;
|
|
|
|
void ShowFpsCounter(DebugHud* hud, uint32_t screenWidth, int lineNumber) const;
|
|
void ShowFrameCounter(DebugHud* hud, uint32_t screenWidth, int lineNumber) const;
|
|
void ShowLagCounter(DebugHud* hud, uint32_t screenWidth, int lineNumber) const;
|
|
void ShowGameTimer(DebugHud* hud, uint32_t screenWidth, int lineNumber) const;
|
|
|
|
void DrawCounters(DebugHud* hud, uint32_t screenWidth) const;
|
|
|
|
public:
|
|
SystemHud(Emulator* emu);
|
|
~SystemHud();
|
|
|
|
void Draw(DebugHud* hud, uint32_t width, uint32_t height) const;
|
|
void UpdateHud();
|
|
};
|
|
|
|
|
|
class MessageInfo
|
|
{
|
|
private:
|
|
string _title;
|
|
string _message;
|
|
uint64_t _endTime;
|
|
uint64_t _startTime;
|
|
|
|
uint64_t GetCurrentTime()
|
|
{
|
|
return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count();
|
|
}
|
|
|
|
public:
|
|
MessageInfo(string title, string message, int displayDuration)
|
|
{
|
|
_title = title;
|
|
_message = message;
|
|
_startTime = GetCurrentTime();
|
|
_endTime = _startTime + displayDuration;
|
|
}
|
|
|
|
string GetTitle()
|
|
{
|
|
return _title;
|
|
}
|
|
|
|
string GetMessage()
|
|
{
|
|
return _message;
|
|
}
|
|
|
|
float GetOpacity()
|
|
{
|
|
uint64_t currentTime = GetCurrentTime();
|
|
if(currentTime - _startTime < 100) {
|
|
return (currentTime - _startTime) * 10.0f / 1000.0f;
|
|
} else if(_endTime - currentTime < 200) {
|
|
return (_endTime - currentTime) * 5.0f / 1000.0f;
|
|
} else if(currentTime >= _endTime) {
|
|
return 0.0f;
|
|
} else {
|
|
return 1.0f;
|
|
}
|
|
}
|
|
|
|
bool IsExpired()
|
|
{
|
|
return _endTime < GetCurrentTime();
|
|
}
|
|
}; |