Skip to content

Commit

Permalink
Merge pull request #1233 from lairworks/addDuration
Browse files Browse the repository at this point in the history
Add `Duration` type
  • Loading branch information
DanRStevens authored Feb 20, 2025
2 parents cb4fcba + 8167fbc commit eef0dbc
Show file tree
Hide file tree
Showing 12 changed files with 49 additions and 32 deletions.
9 changes: 9 additions & 0 deletions NAS2D/Duration.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#pragma once

#include <cstdint>


struct Duration
{
uint32_t milliseconds;
};
2 changes: 1 addition & 1 deletion NAS2D/Mixer/Mixer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ using namespace NAS2D;

void Mixer::playMusic(const Music& music)
{
fadeInMusic(music, std::chrono::milliseconds{0});
fadeInMusic(music, Duration{0});
}


Expand Down
10 changes: 5 additions & 5 deletions NAS2D/Mixer/Mixer.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@

#pragma once

#include "../Duration.h"
#include "../Signal/Signal.h"

#include <chrono>

namespace NAS2D
{

class Sound;
class Music;


class Mixer
{
public:
static constexpr std::chrono::milliseconds DefaultFadeTime{500};
static constexpr Duration DefaultFadeTime{500};

public:
Mixer() = default;
Expand All @@ -49,9 +49,9 @@ namespace NAS2D
virtual void pauseMusic() = 0;
virtual void resumeMusic() = 0;

virtual void fadeInMusic(const Music& music, std::chrono::milliseconds fadeInTime = Mixer::DefaultFadeTime) = 0;
virtual void fadeInMusic(const Music& music, Duration fadeInTime = Mixer::DefaultFadeTime) = 0;

virtual void fadeOutMusic(std::chrono::milliseconds fadeOutTime = Mixer::DefaultFadeTime) = 0;
virtual void fadeOutMusic(Duration fadeOutTime = Mixer::DefaultFadeTime) = 0;

virtual bool musicPlaying() const = 0;

Expand Down
4 changes: 2 additions & 2 deletions NAS2D/Mixer/MixerNull.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ namespace NAS2D
void MixerNull::resumeMusic()
{}

void MixerNull::fadeInMusic(const Music& /*music*/, std::chrono::milliseconds /*fadeInTime*/ /*= Mixer::DefaultFadeTime*/)
void MixerNull::fadeInMusic(const Music& /*music*/, Duration /*fadeInTime*/ /*= Mixer::DefaultFadeTime*/)
{}

void MixerNull::fadeOutMusic(std::chrono::milliseconds /*fadeOutTime*/ /*= Mixer::DefaultFadeTime*/)
void MixerNull::fadeOutMusic(Duration /*fadeOutTime*/ /*= Mixer::DefaultFadeTime*/)
{}

bool MixerNull::musicPlaying() const
Expand Down
4 changes: 2 additions & 2 deletions NAS2D/Mixer/MixerNull.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ namespace NAS2D
void pauseMusic() override;
void resumeMusic() override;

void fadeInMusic(const Music& music, std::chrono::milliseconds fadeInTime = Mixer::DefaultFadeTime) override;
void fadeOutMusic(std::chrono::milliseconds fadeOutTime = Mixer::DefaultFadeTime) override;
void fadeInMusic(const Music& music, Duration fadeInTime = Mixer::DefaultFadeTime) override;
void fadeOutMusic(Duration fadeOutTime = Mixer::DefaultFadeTime) override;

bool musicPlaying() const override;

Expand Down
8 changes: 4 additions & 4 deletions NAS2D/Mixer/MixerSDL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,15 +183,15 @@ void MixerSDL::resumeMusic()
}


void MixerSDL::fadeInMusic(const Music& music, std::chrono::milliseconds fadeInTime)
void MixerSDL::fadeInMusic(const Music& music, Duration fadeInTime)
{
Mix_FadeInMusic(music.music(), 0, static_cast<int>(fadeInTime.count()));
Mix_FadeInMusic(music.music(), 0, static_cast<int>(fadeInTime.milliseconds));
}


void MixerSDL::fadeOutMusic(std::chrono::milliseconds fadeOutTime)
void MixerSDL::fadeOutMusic(Duration fadeOutTime)
{
Mix_FadeOutMusic(static_cast<int>(fadeOutTime.count()));
Mix_FadeOutMusic(static_cast<int>(fadeOutTime.milliseconds));
}


Expand Down
5 changes: 3 additions & 2 deletions NAS2D/Mixer/MixerSDL.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include "Mixer.h"


namespace NAS2D
{

Expand Down Expand Up @@ -56,8 +57,8 @@ namespace NAS2D
void pauseMusic() override;
void resumeMusic() override;

void fadeInMusic(const Music& music, std::chrono::milliseconds fadeInTime) override;
void fadeOutMusic(std::chrono::milliseconds fadeOutTime) override;
void fadeInMusic(const Music& music, Duration fadeInTime) override;
void fadeOutMusic(Duration fadeOutTime) override;

bool musicPlaying() const override;

Expand Down
1 change: 1 addition & 0 deletions NAS2D/NAS2D.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@
<ClInclude Include="ContainerUtils.h" />
<ClInclude Include="Dictionary.h" />
<ClInclude Include="Documentation.h" />
<ClInclude Include="Duration.h" />
<ClInclude Include="EnumKeyCode.h" />
<ClInclude Include="EnumKeyModifier.h" />
<ClInclude Include="EnumMouseButton.h" />
Expand Down
3 changes: 3 additions & 0 deletions NAS2D/NAS2D.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,9 @@
<ClInclude Include="Documentation.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Duration.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="EnumKeyCode.h">
<Filter>Header Files</Filter>
</ClInclude>
Expand Down
10 changes: 5 additions & 5 deletions NAS2D/Renderer/Fade.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,15 @@ SignalSource<>& Fade::fadeComplete()


// Fade in from fadeColor
void Fade::fadeIn(std::chrono::milliseconds fadeTime)
void Fade::fadeIn(Duration fadeTime)
{
setDuration(fadeTime);
mDirection = FadeDirection::In;
}


// Fade out to fadeColor
void Fade::fadeOut(std::chrono::milliseconds fadeTime)
void Fade::fadeOut(Duration fadeTime)
{
setDuration(fadeTime);
mDirection = FadeDirection::Out;
Expand All @@ -89,7 +89,7 @@ void Fade::update()
return;
}

const auto step = static_cast<uint8_t>(std::clamp(mFadeTimer.elapsedTicks() * 255u / static_cast<unsigned int>(mDuration.count()), 0u, 255u));
const auto step = static_cast<uint8_t>(std::clamp(mFadeTimer.elapsedTicks() * 255u / static_cast<unsigned int>(mDuration.milliseconds), 0u, 255u));
mFadeColor.alpha = (mDirection == FadeDirection::In) ? 255 - step : step;

if (step == 255)
Expand All @@ -110,9 +110,9 @@ void Fade::draw(Renderer& renderer) const
}


void Fade::setDuration(std::chrono::milliseconds newDuration)
void Fade::setDuration(Duration newDuration)
{
if (newDuration == decltype(newDuration)::zero())
if (newDuration.milliseconds == 0)
{
throw std::runtime_error("Fade duration must be positive");
}
Expand Down
10 changes: 5 additions & 5 deletions NAS2D/Renderer/Fade.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
#pragma once

#include "Color.h"
#include "../Duration.h"
#include "../Timer.h"
#include "../Signal/Signal.h"

#include <chrono>

namespace NAS2D
{
Expand All @@ -35,8 +35,8 @@ namespace NAS2D

FadeCompleteSignal::Source& fadeComplete();

void fadeIn(std::chrono::milliseconds fadeTime);
void fadeOut(std::chrono::milliseconds fadeTime);
void fadeIn(Duration fadeTime);
void fadeOut(Duration fadeTime);

bool isFading() const;
bool isFaded() const;
Expand All @@ -45,7 +45,7 @@ namespace NAS2D
void draw(Renderer& renderer) const;

private:
void setDuration(std::chrono::milliseconds newDuration);
void setDuration(Duration newDuration);

enum class FadeDirection
{
Expand All @@ -56,7 +56,7 @@ namespace NAS2D

Color mFadeColor;
FadeDirection mDirection;
std::chrono::milliseconds mDuration;
Duration mDuration;
Timer mFadeTimer;
FadeCompleteSignal mFadeComplete;
};
Expand Down
15 changes: 9 additions & 6 deletions NAS2D/Timer.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@

#pragma once

#include <cstdint>


namespace NAS2D
{

Expand All @@ -32,21 +35,21 @@ namespace NAS2D
class Timer
{
public:
static unsigned int tick();
static uint32_t tick();

Timer();
Timer(unsigned int startTick);
Timer(uint32_t startTick);

Timer(const Timer&) = default;
Timer& operator=(const Timer&) = default;

unsigned int elapsedTicks() const;
unsigned int delta();
void adjustStartTick(unsigned int ticksForward);
uint32_t elapsedTicks() const;
uint32_t delta();
void adjustStartTick(uint32_t ticksForward);
void reset();

private:
unsigned int mStartTick;
uint32_t mStartTick;
};

} // namespace

0 comments on commit eef0dbc

Please sign in to comment.