Add in memory allocator popup.

CorrectiveAction
sigonasr2 1 year ago
parent 87c65f5e20
commit 18e6c68b75
  1. 3
      olcCodeJam2023Entry/Constant.cpp
  2. 2
      olcCodeJam2023Entry/Constant.h
  3. 1
      olcCodeJam2023Entry/Textbox.cpp
  4. 2
      olcCodeJam2023Entry/Textbox.h
  5. 15
      olcCodeJam2023Entry/Unit.cpp
  6. 6
      olcCodeJam2023Entry/Unit.h
  7. 9
      olcCodeJam2023Entry/VirusAttack.cpp
  8. 2
      olcCodeJam2023Entry/VirusAttack.h
  9. 8
      olcCodeJam2023Entry/olcPGEX_QuickGUI.h

@ -34,3 +34,6 @@ float CONSTANT::UNIT_BUILD_TIME=10;
int CONSTANT::STARTING_RESOURCE_COUNT=5;
Pixel CONSTANT::MESSAGE_BOX_DEFAULT_BACKCOL=VERY_DARK_GREEN;
std::string CONSTANT::MEMORY_ALLOCATOR_BOX_DISPLAY_STRING="Creates a memory allocator, which are used for making new units.\n\nCosts 5 resources.";
std::string CONSTANT::MEMORY_ALLOCATOR_BOX_HEADER_STRING="Memory Allocator";

@ -38,4 +38,6 @@ public:
static int STARTING_RESOURCE_COUNT;
static Pixel MESSAGE_BOX_DEFAULT_BACKCOL;
static std::string MEMORY_ALLOCATOR_BOX_DISPLAY_STRING;
static std::string MEMORY_ALLOCATOR_BOX_HEADER_STRING;
};

@ -31,6 +31,7 @@ void Textbox::SetDefaults(){
}
void Textbox::Update(PixelGameEngine*pge){
if(!visible)return;
lastLetterTime-=pge->GetElapsedTime();
if(lastLetterTime<=0){
if(textboxMarker<int(text.length()-1)){

@ -1,8 +1,8 @@
#pragma once
#include "olcPixelGameEngine.h"
#include "Unit.h"
#include "olcPGEX_TransformedView.h"
#include "Resources.h"
#include "Unit.h"
class Textbox{
std::string headerText=""; //If a textbox has a header, it displays at the top in a special color.

@ -4,6 +4,7 @@
#include "util.h"
#include "DebuffIcon.h"
#include "olcPGEX_QuickGUI.h"
#include "Textbox.h"
std::string BasicUnit::unitName="";
std::string BasicUnit::unitDescription="";
@ -218,14 +219,22 @@ void RAMBank::OnDeath(std::map<Sound,std::unique_ptr<Audio>>&SOUNDS){
SOUNDS[Sound::HUM]->Stop(soundHandle);
}
void RAMBank::UpdateGUIState(TileTransformedView&game,Resources&player_resources){
void RAMBank::UpdateGUIState(TileTransformedView&game,Resources&player_resources,Textbox&displayBox,bool&hovered){
allocatorManager.Update(game);
auto TotalResources=[&](){
return player_resources.atkSpd+player_resources.health+player_resources.moveSpd+player_resources.procedure+player_resources.range;
};
allocatorButton->Enable(IsSelected()&&TotalResources()>=5);
bool buttonEnabled=IsSelected()&&TotalResources()>=5;
if(buttonEnabled&&allocatorButton->bHover){
displayBox.Initialize(CONSTANT::MEMORY_ALLOCATOR_BOX_DISPLAY_STRING,{},CONSTANT::MEMORY_ALLOCATOR_BOX_HEADER_STRING);
//displayBox.SetVisible(true);
hovered=true;
}
allocatorButton->Enable(buttonEnabled);
}
bool RAMBank::ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::map<Image,std::unique_ptr<Renderable>>&IMAGES){
@ -792,7 +801,7 @@ bool Unit::ClickHandled(TileTransformedView&game,Resources&player_resources,std:
return false;
};
void Unit::UpdateGUIState(TileTransformedView&game,Resources&player_resources){};
void Unit::UpdateGUIState(TileTransformedView&game,Resources&player_resources,Textbox&displayBox,bool&hovered){};
bool Unit::IsAllocator(){
return isAllocator&&attachedPoint.expired()&&buildTime<=0;

@ -12,6 +12,8 @@
#include "Resources.h"
#include "olcPGEX_QuickGUI.h"
class Textbox;
struct Marker{
size_t index;
size_t size;
@ -70,7 +72,7 @@ public:
bool CanMove();
void SetTargetCollectionPoint(std::weak_ptr<CollectionPoint>targetCP,std::weak_ptr<Unit>self_ptr);
Pixel GetUnitColor();
virtual void UpdateGUIState(TileTransformedView&game,Resources&player_resources);
virtual void UpdateGUIState(TileTransformedView&game,Resources&player_resources,Textbox&displayBox,bool&hovered);
virtual bool ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::map<Image,std::unique_ptr<Renderable>>&IMAGES); //If you return true here, then the left click does not pass back to the main Virus Attack class.
bool IsAllocator();
void SetBuildUnit(float buildTime,std::unique_ptr<Unit>finalUnit);
@ -222,7 +224,7 @@ struct RAMBank:Unit{
void Draw(TileTransformedView&game,std::map<Image,std::unique_ptr<Renderable>>&IMAGES)override;
void OnDeath(std::map<Sound,std::unique_ptr<Audio>>&SOUNDS)override;
bool ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::map<Image,std::unique_ptr<Renderable>>&IMAGES)override;
void UpdateGUIState(TileTransformedView&game,Resources&player_resources)override;
void UpdateGUIState(TileTransformedView&game,Resources&player_resources,Textbox&displayBox,bool&hovered)override;
void DrawHud(TileTransformedView&game,std::map<Image,std::unique_ptr<Renderable>>&IMAGES)override;
static std::vector<Memory> resourceCost;
static std::string unitName;

@ -63,6 +63,8 @@ bool VirusAttack::OnUserCreate(){
unitCreationBox.SetVisible(false);
testBox.Initialize("Hello world, this is a test of the textbox system.\nMaybe even with some newline characters snuck in there.",{});
testBox.SetVisible(false);
memoryAllocatorBox.Initialize(CONSTANT::MEMORY_ALLOCATOR_BOX_DISPLAY_STRING,{},CONSTANT::MEMORY_ALLOCATOR_BOX_HEADER_STRING);
memoryAllocatorBox.SetVisible(false);
IMAGES[MINIMAP_OUTLINE]=std::make_unique<Renderable>();
IMAGES[MINIMAP_OUTLINE]->Create(64,64);
@ -183,12 +185,14 @@ void VirusAttack::UpdateUnitCreationListGUI(bool allocatorSelected){
void VirusAttack::HandleDraggingSelection(){
auto NotClickingOnMinimap=[&](){return !(GetMouseX()>=ScreenWidth()-64&&GetMouseY()>=ScreenHeight()-64);};
bool allocatorSelected=false;
bool memoryAllocatorBoxHovered=false;
for(auto&u:units){
u->UpdateGUIState(game,player_resources);
u->UpdateGUIState(game,player_resources,memoryAllocatorBox,memoryAllocatorBoxHovered);
if(u->IsSelected()&&u->IsAllocator()){
allocatorSelected=true;
}
}
if(!memoryAllocatorBoxHovered)memoryAllocatorBox.SetVisible(false);
UpdateUnitCreationListGUI(allocatorSelected);
if(GetMouse(0).bPressed){
if(NotClickingOnMinimap()){
@ -540,8 +544,9 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){
DrawMinimap();
unitCreationBox.UpdateAndDraw(GetMousePos(),this,player_resources,IMAGES);
unitCreationBox.UpdateAndDraw(GetMousePos()+vi2d{8,-28},this,player_resources,IMAGES);
testBox.UpdateAndDraw(GetMousePos()-testBox.GetSize()/2,this,player_resources,IMAGES);
memoryAllocatorBox.UpdateAndDraw(GetMousePos()+vi2d{8,-28},this,player_resources,IMAGES);
std::sort(units.begin(),units.end(),[&](auto&u1,auto&u2){
float dist1=geom2d::line<float>(u1->GetGhostPos(),GetWorldMousePos()).length();

@ -38,7 +38,7 @@ private:
TileTransformedView game;
Textbox unitCreationBox,testBox;
Textbox unitCreationBox,testBox,memoryAllocatorBox;
QuickGUI::Manager unitCreationList;
QuickGUI::ImageButton*leftShifterButton;

@ -579,7 +579,7 @@ namespace olc::QuickGUI
{
olc::vf2d vMouse = pge.GetPGE()->GetMousePos();
bHover = vMouse.x >= vPos.x && vMouse.x < vPos.x + vSize.x &&
bHover = bVisible&&vMouse.x >= vPos.x && vMouse.x < vPos.x + vSize.x &&
vMouse.y >= vPos.y && vMouse.y < vPos.y + vSize.y;
if (m_state == State::Disabled || !bVisible)
return;
@ -700,7 +700,7 @@ namespace olc::QuickGUI
void Button::Update(TileTransformedView&pge)
{
olc::vf2d vMouse = pge.ScreenToWorld(pge.GetPGE()->GetMousePos());
bHover = vMouse.x >= vPos.x && vMouse.x < vPos.x + vSize.x &&
bHover = bVisible&&vMouse.x >= vPos.x && vMouse.x < vPos.x + vSize.x &&
vMouse.y >= vPos.y && vMouse.y < vPos.y + vSize.y;
bPressed = false;
bReleased = false;
@ -746,7 +746,7 @@ namespace olc::QuickGUI
void Button::Update(PixelGameEngine*pge)
{
olc::vf2d vMouse = pge->GetMousePos();
bHover = vMouse.x >= vPos.x && vMouse.x < vPos.x + vSize.x &&
bHover = bVisible&&vMouse.x >= vPos.x && vMouse.x < vPos.x + vSize.x &&
vMouse.y >= vPos.y && vMouse.y < vPos.y + vSize.y;
bPressed = false;
bReleased = false;
@ -994,7 +994,7 @@ namespace olc::QuickGUI
{
olc::vf2d vMouse = pge.GetPGE()->GetMousePos();
olc::vf2d vSliderPos = vPosMin + (vPosMax - vPosMin) * ((fValue - fMin) / (fMax - fMin));
bHover = (vMouse - vSliderPos).mag2() <= int32_t(m_manager.fGrabRad) * int32_t(m_manager.fGrabRad);
bHover = bVisible&&(vMouse - vSliderPos).mag2() <= int32_t(m_manager.fGrabRad) * int32_t(m_manager.fGrabRad);
if (m_state == State::Disabled || !bVisible)
return;

Loading…
Cancel
Save