git repos / blockattack-game

blame: source/code/puzzle_editor/PuzzleEditorState.cpp

normal view · raw

1873b078 Poul Sander 2025-02-06 22:01 1
/*
1873b078 Poul Sander 2025-02-06 22:01 2
===========================================================================
1873b078 Poul Sander 2025-02-06 22:01 3
blockattack - Block Attack - Rise of the Blocks
1873b078 Poul Sander 2025-02-06 22:01 4
Copyright (C) 2005-2025 Poul Sander
1873b078 Poul Sander 2025-02-06 22:01 5
1873b078 Poul Sander 2025-02-06 22:01 6
This program is free software: you can redistribute it and/or modify
1873b078 Poul Sander 2025-02-06 22:01 7
it under the terms of the GNU General Public License as published by
1873b078 Poul Sander 2025-02-06 22:01 8
the Free Software Foundation, either version 2 of the License, or
1873b078 Poul Sander 2025-02-06 22:01 9
(at your option) any later version.
1873b078 Poul Sander 2025-02-06 22:01 10
1873b078 Poul Sander 2025-02-06 22:01 11
This program is distributed in the hope that it will be useful,
1873b078 Poul Sander 2025-02-06 22:01 12
but WITHOUT ANY WARRANTY; without even the implied warranty of
1873b078 Poul Sander 2025-02-06 22:01 13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1873b078 Poul Sander 2025-02-06 22:01 14
GNU General Public License for more details.
1873b078 Poul Sander 2025-02-06 22:01 15
1873b078 Poul Sander 2025-02-06 22:01 16
You should have received a copy of the GNU General Public License
1873b078 Poul Sander 2025-02-06 22:01 17
along with this program.  If not, see http://www.gnu.org/licenses/
1873b078 Poul Sander 2025-02-06 22:01 18
1873b078 Poul Sander 2025-02-06 22:01 19
Source information and contacts persons can be found at
1873b078 Poul Sander 2025-02-06 22:01 20
https://blockattack.net
1873b078 Poul Sander 2025-02-06 22:01 21
===========================================================================
1873b078 Poul Sander 2025-02-06 22:01 22
*/
1873b078 Poul Sander 2025-02-06 22:01 23
1873b078 Poul Sander 2025-02-06 22:01 24
#include "PuzzleEditorState.hpp"
1873b078 Poul Sander 2025-02-06 22:01 25
#include "imgui.h"
1873b078 Poul Sander 2025-02-06 22:01 26
#include "backends/imgui_impl_sdl2.h"
1873b078 Poul Sander 2025-02-06 22:01 27
#include "backends/imgui_impl_sdlrenderer2.h"
a80f6a78 Poul Sander 2025-04-04 18:34 28
#include "../sago/SagoMisc.hpp"
a80f6a78 Poul Sander 2025-04-04 18:34 29
#include "../puzzlehandler.hpp"
1873b078 Poul Sander 2025-02-06 22:01 30
1873b078 Poul Sander 2025-02-06 22:01 31
636cde3b Poul Sander 2025-05-15 21:40 32
PuzzleEditorState::PuzzleEditorState() {
636cde3b Poul Sander 2025-05-15 21:40 33
	this->window_resize = sago::SagoLogicalResize(BOARD_WIDTH+5, BOARD_HEIGHT+5);
636cde3b Poul Sander 2025-05-15 21:40 34
}
636cde3b Poul Sander 2025-05-15 21:40 35
1873b078 Poul Sander 2025-02-06 22:01 36
bool PuzzleEditorState::IsActive() {
1873b078 Poul Sander 2025-02-06 22:01 37
	return isActive;
1873b078 Poul Sander 2025-02-06 22:01 38
}
1873b078 Poul Sander 2025-02-06 22:01 39
1873b078 Poul Sander 2025-02-06 22:01 40
void PuzzleEditorState::ProcessInput(const SDL_Event& event, bool& processed) {
1873b078 Poul Sander 2025-02-06 22:01 41
	ImGui_ImplSDL2_ProcessEvent(&event);
1873b078 Poul Sander 2025-02-06 22:01 42
}
1873b078 Poul Sander 2025-02-06 22:01 43
a80f6a78 Poul Sander 2025-04-04 18:34 44
void PuzzleEditorState::Init() {
a80f6a78 Poul Sander 2025-04-04 18:34 45
	this->selected_file = "";
a80f6a78 Poul Sander 2025-04-04 18:34 46
	this->puzzle_files = sago::GetFileList("puzzles");
a80f6a78 Poul Sander 2025-04-04 18:34 47
}
a80f6a78 Poul Sander 2025-04-04 18:34 48
a80f6a78 Poul Sander 2025-04-04 18:34 49
void PuzzleEditorState::SelectFile(const std::string& file) {
a80f6a78 Poul Sander 2025-04-04 18:34 50
	this->selected_file = file;
a80f6a78 Poul Sander 2025-04-04 18:34 51
	PuzzleSetName(file);
a80f6a78 Poul Sander 2025-04-04 18:34 52
	LoadPuzzleStages();
a80f6a78 Poul Sander 2025-04-04 18:34 53
}
a80f6a78 Poul Sander 2025-04-04 18:34 54
636cde3b Poul Sander 2025-05-15 21:40 55
static void LogicalToPhysical(const sago::SagoLogicalResize& resize, ImVec2& inout) {
636cde3b Poul Sander 2025-05-15 21:40 56
	int inx = inout.x;
636cde3b Poul Sander 2025-05-15 21:40 57
	int iny = inout.y;
636cde3b Poul Sander 2025-05-15 21:40 58
	int outx = inout.x;
636cde3b Poul Sander 2025-05-15 21:40 59
	int outy = inout.y;
636cde3b Poul Sander 2025-05-15 21:40 60
	resize.LogicalToPhysical(inx, iny, outx, outy);
636cde3b Poul Sander 2025-05-15 21:40 61
	inout.x = outx;
636cde3b Poul Sander 2025-05-15 21:40 62
	inout.y = outy;
636cde3b Poul Sander 2025-05-15 21:40 63
}
636cde3b Poul Sander 2025-05-15 21:40 64
1873b078 Poul Sander 2025-02-06 22:01 65
void PuzzleEditorState::Draw(SDL_Renderer* target) {
6046ca3f Poul Sander 2025-04-06 16:14 66
	DrawBackground(target);
1fcc8881 Poul Sander 2025-05-15 18:54 67
1fcc8881 Poul Sander 2025-05-15 18:54 68
	ImGui::Begin("Board area");
1fcc8881 Poul Sander 2025-05-15 18:54 69
	ImGui::BeginChild("Test");
1fcc8881 Poul Sander 2025-05-15 18:54 70
	ImVec2 p = ImGui::GetCursorScreenPos();
636cde3b Poul Sander 2025-05-15 21:40 71
	ImVec2 size = ImGui::GetContentRegionAvail();
636cde3b Poul Sander 2025-05-15 21:40 72
	int xoffset = p.x;
636cde3b Poul Sander 2025-05-15 21:40 73
	int yoffset = p.y;
636cde3b Poul Sander 2025-05-15 21:40 74
	int height = BOARD_HEIGHT;
636cde3b Poul Sander 2025-05-15 21:40 75
	int width = BOARD_WIDTH;
636cde3b Poul Sander 2025-05-15 21:40 76
	window_resize.SetPhysicalSize(size.x, size.y);
636cde3b Poul Sander 2025-05-15 21:40 77
636cde3b Poul Sander 2025-05-15 21:40 78
1fcc8881 Poul Sander 2025-05-15 18:54 79
	for (int i=0; i <= 6;++i) {
636cde3b Poul Sander 2025-05-15 21:40 80
		ImVec2 p1(i*50.0f, 0);
636cde3b Poul Sander 2025-05-15 21:40 81
		ImVec2 p2(i*50.0f, height);
636cde3b Poul Sander 2025-05-15 21:40 82
		LogicalToPhysical(window_resize, p1);
636cde3b Poul Sander 2025-05-15 21:40 83
		LogicalToPhysical(window_resize, p2);
636cde3b Poul Sander 2025-05-15 21:40 84
		p1.x += xoffset;
636cde3b Poul Sander 2025-05-15 21:40 85
		p1.y += yoffset;
636cde3b Poul Sander 2025-05-15 21:40 86
		p2.x += xoffset;
636cde3b Poul Sander 2025-05-15 21:40 87
		p2.y += yoffset;
636cde3b Poul Sander 2025-05-15 21:40 88
		ImGui::GetWindowDrawList()->AddLine(p1, p2, IM_COL32(255, 0, 0, 100));
1fcc8881 Poul Sander 2025-05-15 18:54 89
	}
1fcc8881 Poul Sander 2025-05-15 18:54 90
	for (int i=0; i <= 12;++i) {
636cde3b Poul Sander 2025-05-15 21:40 91
		ImVec2 p1(0,i*50.0f);
636cde3b Poul Sander 2025-05-15 21:40 92
		ImVec2 p2(width, i*50.0f);
636cde3b Poul Sander 2025-05-15 21:40 93
		LogicalToPhysical(window_resize, p1);
636cde3b Poul Sander 2025-05-15 21:40 94
		LogicalToPhysical(window_resize, p2);
636cde3b Poul Sander 2025-05-15 21:40 95
		p1.x += xoffset;
636cde3b Poul Sander 2025-05-15 21:40 96
		p1.y += yoffset;
636cde3b Poul Sander 2025-05-15 21:40 97
		p2.x += xoffset;
636cde3b Poul Sander 2025-05-15 21:40 98
		p2.y += yoffset;
636cde3b Poul Sander 2025-05-15 21:40 99
		ImGui::GetWindowDrawList()->AddLine(p1, p2, IM_COL32(255, 0, 0, 100));
6046ca3f Poul Sander 2025-04-06 16:14 100
	}
1fcc8881 Poul Sander 2025-05-15 18:54 101
	ImGui::EndChild();
1fcc8881 Poul Sander 2025-05-15 18:54 102
	ImGui::End();
1fcc8881 Poul Sander 2025-05-15 18:54 103
1873b078 Poul Sander 2025-02-06 22:01 104
	ImGui::Begin("File list", nullptr, ImGuiWindowFlags_NoCollapse);
a80f6a78 Poul Sander 2025-04-04 18:34 105
	for (const auto& file : this->puzzle_files) {
a80f6a78 Poul Sander 2025-04-04 18:34 106
		if (ImGui::Selectable(file.c_str(), this->selected_file == file)) {
a80f6a78 Poul Sander 2025-04-04 18:34 107
			SelectFile(file);
a80f6a78 Poul Sander 2025-04-04 18:34 108
		}
1873b078 Poul Sander 2025-02-06 22:01 109
	}
1873b078 Poul Sander 2025-02-06 22:01 110
a80f6a78 Poul Sander 2025-04-04 18:34 111
a80f6a78 Poul Sander 2025-04-04 18:34 112
	ImGui::End();
a80f6a78 Poul Sander 2025-04-04 18:34 113
	ImGui::Begin("Puzzles in file");
a80f6a78 Poul Sander 2025-04-04 18:34 114
	int puzzle_count = PuzzleGetNumberOfPuzzles();
a80f6a78 Poul Sander 2025-04-04 18:34 115
	for (int i = 0; i < puzzle_count; ++i) {
6046ca3f Poul Sander 2025-04-06 16:14 116
		if (ImGui::Selectable(std::to_string(i).c_str(), this->selected_puzzle == i)) {
6046ca3f Poul Sander 2025-04-06 16:14 117
			this->selected_puzzle = i;
a80f6a78 Poul Sander 2025-04-04 18:34 118
		}
a80f6a78 Poul Sander 2025-04-04 18:34 119
	}
1873b078 Poul Sander 2025-02-06 22:01 120
	ImGui::End();
1873b078 Poul Sander 2025-02-06 22:01 121
}
1873b078 Poul Sander 2025-02-06 22:01 122
1873b078 Poul Sander 2025-02-06 22:01 123
void PuzzleEditorState::Update() {
1873b078 Poul Sander 2025-02-06 22:01 124
}
1873b078 Poul Sander 2025-02-06 22:01 125
1970-01-01 00:00 126