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\olcPGEX_MiniAudio.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\util.cpp" />
|
||||
</ItemGroup>
|
||||
@ -346,6 +350,10 @@ if %errorlevel% neq 0 goto :VCEnd</Command>
|
||||
<Text Include="src\TODO.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\Border.h">
|
||||
<SubType>
|
||||
</SubType>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\Hamster.h" />
|
||||
<ClInclude Include="src\HamsterGame.h" />
|
||||
<ClInclude Include="src\miniaudio.h" />
|
||||
|
@ -16,6 +16,9 @@
|
||||
<ClCompile Include="src\util.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Border.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="C:\Users\sigon\source\repos\hamster\CMakeLists.txt" />
|
||||
@ -70,5 +73,8 @@
|
||||
<ClInclude Include="src\olcPGEX_TransformedView.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\Border.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</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{}){
|
||||
targetRot=aimingDir.norm().polar().y;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,8 @@ bool HamsterGame::OnUserCreate(){
|
||||
LoadGraphics();
|
||||
LoadAnimations();
|
||||
LoadLevel(); //THIS IS TEMPORARY.
|
||||
|
||||
border.ChangeBorder(Border::DEFAULT);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -64,12 +66,13 @@ void HamsterGame::UpdateGame(const float fElapsedTime){
|
||||
camera.Update(fElapsedTime);
|
||||
tv.SetWorldOffset(-SCREEN_FRAME.pos+camera.GetViewPosition());
|
||||
Hamster::UpdateHamsters(fElapsedTime);
|
||||
border.Update(fElapsedTime);
|
||||
}
|
||||
|
||||
void HamsterGame::DrawGame(){
|
||||
tv.FillRectDecal({10,10},{500.f,150.f},WHITE);
|
||||
Hamster::DrawHamsters(tv);
|
||||
DrawDecal({},GetGFX("border.png").Decal());
|
||||
border.Draw();
|
||||
}
|
||||
|
||||
bool HamsterGame::OnUserUpdate(float fElapsedTime){
|
||||
|
@ -41,6 +41,7 @@ All rights reserved.
|
||||
#include "olcUTIL_Animate2D.h"
|
||||
#include "olcPGEX_TransformedView.h"
|
||||
#include "olcUTIL_Camera2D.h"
|
||||
#include "Border.h"
|
||||
|
||||
class HamsterGame : public olc::PixelGameEngine
|
||||
{
|
||||
@ -72,4 +73,5 @@ private:
|
||||
static std::unordered_map<std::string,Renderable>GFX;
|
||||
static std::unordered_map<std::string,Animate2D::Animation<HamsterGame::AnimationState>>ANIMATIONS;
|
||||
static PixelGameEngine*self;
|
||||
Border border;
|
||||
};
|
@ -1,3 +1,4 @@
|
||||
#include "olcUTIL_Geometry2D.h"
|
||||
#pragma region license_and_help
|
||||
/*
|
||||
olcPixelGameEngine.h
|
||||
|
Loading…
x
Reference in New Issue
Block a user