mirror of
https://github.com/sigonasr2/hamster.git
synced 2025-04-17 06:09:40 -05:00
Added a Border class and cycle timers for some cool color cycling.
This commit is contained in:
parent
7df7b5cbec
commit
3f9a30c16a
@ -324,6 +324,10 @@ if %errorlevel% neq 0 goto :VCEnd</Command>
|
|||||||
<ClCompile Include="C:\Users\sigon\source\repos\hamster\src\HamsterGame.cpp" />
|
<ClCompile Include="C:\Users\sigon\source\repos\hamster\src\HamsterGame.cpp" />
|
||||||
<ClCompile Include="C:\Users\sigon\source\repos\hamster\src\olcPGEX_MiniAudio.cpp" />
|
<ClCompile Include="C:\Users\sigon\source\repos\hamster\src\olcPGEX_MiniAudio.cpp" />
|
||||||
<ClCompile Include="C:\Users\sigon\source\repos\hamster\src\olcPixelGameEngine.cpp" />
|
<ClCompile Include="C:\Users\sigon\source\repos\hamster\src\olcPixelGameEngine.cpp" />
|
||||||
|
<ClCompile Include="src\Border.cpp">
|
||||||
|
<SubType>
|
||||||
|
</SubType>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="src\Hamster.cpp" />
|
<ClCompile Include="src\Hamster.cpp" />
|
||||||
<ClCompile Include="src\util.cpp" />
|
<ClCompile Include="src\util.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -346,6 +350,10 @@ if %errorlevel% neq 0 goto :VCEnd</Command>
|
|||||||
<Text Include="src\TODO.txt" />
|
<Text Include="src\TODO.txt" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="src\Border.h">
|
||||||
|
<SubType>
|
||||||
|
</SubType>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="src\Hamster.h" />
|
<ClInclude Include="src\Hamster.h" />
|
||||||
<ClInclude Include="src\HamsterGame.h" />
|
<ClInclude Include="src\HamsterGame.h" />
|
||||||
<ClInclude Include="src\miniaudio.h" />
|
<ClInclude Include="src\miniaudio.h" />
|
||||||
|
@ -16,6 +16,9 @@
|
|||||||
<ClCompile Include="src\util.cpp">
|
<ClCompile Include="src\util.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\Border.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CustomBuild Include="C:\Users\sigon\source\repos\hamster\CMakeLists.txt" />
|
<CustomBuild Include="C:\Users\sigon\source\repos\hamster\CMakeLists.txt" />
|
||||||
@ -70,5 +73,8 @@
|
|||||||
<ClInclude Include="src\olcPGEX_TransformedView.h">
|
<ClInclude Include="src\olcPGEX_TransformedView.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\Border.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
91
src/Border.cpp
Normal file
91
src/Border.cpp
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#pragma region License
|
||||||
|
/*
|
||||||
|
License (OLC-3)
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Copyright 2024 Joshua Sigona <sigonasr2@gmail.com>
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions or derivations of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions or derivative works in binary form must reproduce the above
|
||||||
|
copyright notice. This list of conditions and the following disclaimer must be
|
||||||
|
reproduced in the documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without specific
|
||||||
|
prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||||
|
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGE.
|
||||||
|
|
||||||
|
Portions of this software are copyright © 2024 The FreeType
|
||||||
|
Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
|
||||||
|
All rights reserved.
|
||||||
|
*/
|
||||||
|
#pragma endregion
|
||||||
|
#include "Border.h"
|
||||||
|
#include "HamsterGame.h"
|
||||||
|
#include <ranges>
|
||||||
|
|
||||||
|
const std::unordered_map<Border::BorderTemplate,std::tuple<std::string,Border::CycleTimer,Border::CycleTimer,Border::CycleTimer>>Border::BORDER_TEMPLATES{
|
||||||
|
{Border::DEFAULT,{"border.png",{{{170,97,124},{114,109,163}},0.6f},{{{252,119,144}},1.2f},{{{231,129,97}},3.6f}}},
|
||||||
|
};
|
||||||
|
|
||||||
|
Border::CycleTimer::CycleTimer(const std::vector<Pixel>cycle,const float repeatTime)
|
||||||
|
:cycle(cycle),repeatTime(repeatTime),currentTime(repeatTime),borderParent(nullptr){}
|
||||||
|
|
||||||
|
void Border::ChangeBorder(const Border::BorderTemplate borderTemplate){
|
||||||
|
const std::tuple<std::string,Border::CycleTimer,Border::CycleTimer,Border::CycleTimer>&borderData{BORDER_TEMPLATES.at(borderTemplate)};
|
||||||
|
decorative=std::get<1>(borderData);
|
||||||
|
highlight=std::get<2>(borderData);
|
||||||
|
background=std::get<3>(borderData);
|
||||||
|
decorative.borderParent=this;
|
||||||
|
highlight.borderParent=this;
|
||||||
|
background.borderParent=this;
|
||||||
|
img.Create(HamsterGame::GetGFX(std::get<0>(borderData)).Sprite()->width,HamsterGame::GetGFX(std::get<0>(borderData)).Sprite()->height);
|
||||||
|
for(int y:std::ranges::iota_view(0,img.Sprite()->height)){
|
||||||
|
for(int x:std::ranges::iota_view(0,img.Sprite()->width)){
|
||||||
|
img.Sprite()->SetPixel(x,y,HamsterGame::GetGFX(std::get<0>(borderData)).Sprite()->GetPixel(x,y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
img.Decal()->Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Border::CycleTimer::Update(const float fElapsedTime){
|
||||||
|
currentTime-=fElapsedTime;
|
||||||
|
if(currentTime<=0.f){
|
||||||
|
const Pixel currentCol{cycle[currentInd]};
|
||||||
|
currentInd=(currentInd+1)%cycle.size();
|
||||||
|
const Pixel newCol{cycle[currentInd]};
|
||||||
|
for(int y:std::ranges::iota_view(0,borderParent->img.Sprite()->height)){
|
||||||
|
for(int x:std::ranges::iota_view(0,borderParent->img.Sprite()->width)){
|
||||||
|
if(borderParent->img.Sprite()->GetPixel(x,y)==currentCol){
|
||||||
|
borderParent->img.Sprite()->SetPixel(x,y,newCol);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
borderParent->img.Decal()->Update();
|
||||||
|
currentTime+=repeatTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Border::Update(const float fElapsedTime){
|
||||||
|
decorative.Update(fElapsedTime);
|
||||||
|
highlight.Update(fElapsedTime);
|
||||||
|
background.Update(fElapsedTime);
|
||||||
|
}
|
||||||
|
void Border::Draw(){
|
||||||
|
HamsterGame::Game().DrawDecal({},img.Decal());
|
||||||
|
}
|
71
src/Border.h
Normal file
71
src/Border.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#pragma region License
|
||||||
|
/*
|
||||||
|
License (OLC-3)
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Copyright 2024 Joshua Sigona <sigonasr2@gmail.com>
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions or derivations of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions or derivative works in binary form must reproduce the above
|
||||||
|
copyright notice. This list of conditions and the following disclaimer must be
|
||||||
|
reproduced in the documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without specific
|
||||||
|
prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||||
|
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGE.
|
||||||
|
|
||||||
|
Portions of this software are copyright © 2024 The FreeType
|
||||||
|
Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
|
||||||
|
All rights reserved.
|
||||||
|
*/
|
||||||
|
#pragma endregion
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "olcPixelGameEngine.h"
|
||||||
|
|
||||||
|
class Border{
|
||||||
|
public:
|
||||||
|
enum BorderTemplate{
|
||||||
|
DEFAULT,
|
||||||
|
};
|
||||||
|
public:
|
||||||
|
class CycleTimer{
|
||||||
|
friend class Border;
|
||||||
|
float repeatTime;
|
||||||
|
float currentTime;
|
||||||
|
std::vector<Pixel>cycle;
|
||||||
|
size_t currentInd{};
|
||||||
|
Border*borderParent;
|
||||||
|
public:
|
||||||
|
CycleTimer()=default;
|
||||||
|
CycleTimer(const std::vector<Pixel>cycle,const float repeatTime);
|
||||||
|
void Update(const float fElapsedTime);
|
||||||
|
};
|
||||||
|
Renderable img;
|
||||||
|
CycleTimer decorative;
|
||||||
|
CycleTimer highlight;
|
||||||
|
CycleTimer background;
|
||||||
|
private:
|
||||||
|
static const std::unordered_map<BorderTemplate,std::tuple<std::string,Border::CycleTimer,Border::CycleTimer,Border::CycleTimer>>BORDER_TEMPLATES;
|
||||||
|
public:
|
||||||
|
Border()=default;
|
||||||
|
void ChangeBorder(const Border::BorderTemplate borderTemplate);
|
||||||
|
void Update(const float fElapsedTime);
|
||||||
|
void Draw();
|
||||||
|
};
|
@ -116,7 +116,7 @@ void Hamster::HandlePlayerControls(){
|
|||||||
if(aimingDir!=vf2d{}){
|
if(aimingDir!=vf2d{}){
|
||||||
targetRot=aimingDir.norm().polar().y;
|
targetRot=aimingDir.norm().polar().y;
|
||||||
const vf2d currentVel{vel};
|
const vf2d currentVel{vel};
|
||||||
vel=vf2d{std::min(maxSpd,currentVel.polar().x+(maxSpd*HamsterGame::Game().GetElapsedTime())/timeToMaxSpd),currentVel.polar().y}.cart();
|
vel=vf2d{std::min(maxSpd,currentVel.polar().x+(maxSpd*HamsterGame::Game().GetElapsedTime())/timeToMaxSpd),rot}.cart();
|
||||||
frictionEnabled=false;
|
frictionEnabled=false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@ bool HamsterGame::OnUserCreate(){
|
|||||||
LoadGraphics();
|
LoadGraphics();
|
||||||
LoadAnimations();
|
LoadAnimations();
|
||||||
LoadLevel(); //THIS IS TEMPORARY.
|
LoadLevel(); //THIS IS TEMPORARY.
|
||||||
|
|
||||||
|
border.ChangeBorder(Border::DEFAULT);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,12 +66,13 @@ void HamsterGame::UpdateGame(const float fElapsedTime){
|
|||||||
camera.Update(fElapsedTime);
|
camera.Update(fElapsedTime);
|
||||||
tv.SetWorldOffset(-SCREEN_FRAME.pos+camera.GetViewPosition());
|
tv.SetWorldOffset(-SCREEN_FRAME.pos+camera.GetViewPosition());
|
||||||
Hamster::UpdateHamsters(fElapsedTime);
|
Hamster::UpdateHamsters(fElapsedTime);
|
||||||
|
border.Update(fElapsedTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HamsterGame::DrawGame(){
|
void HamsterGame::DrawGame(){
|
||||||
tv.FillRectDecal({10,10},{500.f,150.f},WHITE);
|
tv.FillRectDecal({10,10},{500.f,150.f},WHITE);
|
||||||
Hamster::DrawHamsters(tv);
|
Hamster::DrawHamsters(tv);
|
||||||
DrawDecal({},GetGFX("border.png").Decal());
|
border.Draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HamsterGame::OnUserUpdate(float fElapsedTime){
|
bool HamsterGame::OnUserUpdate(float fElapsedTime){
|
||||||
|
@ -41,6 +41,7 @@ All rights reserved.
|
|||||||
#include "olcUTIL_Animate2D.h"
|
#include "olcUTIL_Animate2D.h"
|
||||||
#include "olcPGEX_TransformedView.h"
|
#include "olcPGEX_TransformedView.h"
|
||||||
#include "olcUTIL_Camera2D.h"
|
#include "olcUTIL_Camera2D.h"
|
||||||
|
#include "Border.h"
|
||||||
|
|
||||||
class HamsterGame : public olc::PixelGameEngine
|
class HamsterGame : public olc::PixelGameEngine
|
||||||
{
|
{
|
||||||
@ -72,4 +73,5 @@ private:
|
|||||||
static std::unordered_map<std::string,Renderable>GFX;
|
static std::unordered_map<std::string,Renderable>GFX;
|
||||||
static std::unordered_map<std::string,Animate2D::Animation<HamsterGame::AnimationState>>ANIMATIONS;
|
static std::unordered_map<std::string,Animate2D::Animation<HamsterGame::AnimationState>>ANIMATIONS;
|
||||||
static PixelGameEngine*self;
|
static PixelGameEngine*self;
|
||||||
|
Border border;
|
||||||
};
|
};
|
@ -1,3 +1,4 @@
|
|||||||
|
#include "olcUTIL_Geometry2D.h"
|
||||||
#pragma region license_and_help
|
#pragma region license_and_help
|
||||||
/*
|
/*
|
||||||
olcPixelGameEngine.h
|
olcPixelGameEngine.h
|
||||||
|
Loading…
x
Reference in New Issue
Block a user