mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2024-12-23 20:36:53 +01:00
Cleaned up BrushPrefabs. Also started cleaning up actions.
This commit is contained in:
parent
d3c039be7e
commit
a3fc87a576
@ -24,33 +24,53 @@ SOFTWARE.
|
||||
|
||||
#include "brighten_action.h"
|
||||
|
||||
#include "../paint_canvas_layer.h"
|
||||
#include "../paint_canvas.h"
|
||||
#include "../paint_utilities.h"
|
||||
|
||||
void BrightenAction::do_action(PaintCanvas *canvas, const Array &data) {
|
||||
/*
|
||||
.do_action(canvas, data)
|
||||
PaintAction::do_action(canvas, data);
|
||||
/*
|
||||
PoolVector2iArray undo_cells = action_data_undo["cells"];
|
||||
PoolColorArray undo_colors = action_data_undo["colors"];
|
||||
PoolVector2iArray redo_cells = action_data_redo["cells"];
|
||||
PoolColorArray redo_colors = action_data_redo["colors"];
|
||||
|
||||
var pixels = GEUtils.get_pixels_in_line(data[0], data[1])
|
||||
for pixel in pixels:
|
||||
if canvas.get_pixel_v(pixel) == null:
|
||||
continue
|
||||
PoolVector2iArray pixels = PaintUtilities::get_pixels_in_line(data[0], data[1]);
|
||||
|
||||
if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent:
|
||||
continue
|
||||
for (int i = 0; i < pixels.size(); ++i) {
|
||||
Vector2i pixel = pixels[i];
|
||||
|
||||
Color col = canvas->get_pixel_v(pixel);
|
||||
|
||||
if (canvas->is_alpha_locked() && col.a < 0.00001) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if pixel in action_data.undo.cells:
|
||||
var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1)
|
||||
canvas.set_pixel_v(pixel, brightened_color)
|
||||
var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1);
|
||||
canvas.set_pixel_v(pixel, brightened_color);
|
||||
|
||||
action_data.redo.cells.append(pixel)
|
||||
action_data.redo.colors.append(brightened_color)
|
||||
continue
|
||||
action_data.redo.cells.append(pixel);
|
||||
action_data.redo.colors.append(brightened_color);
|
||||
continue;
|
||||
|
||||
action_data.undo.colors.append(canvas.get_pixel_v(pixel))
|
||||
action_data.undo.cells.append(pixel)
|
||||
var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1)
|
||||
canvas.set_pixel_v(pixel, brightened_color)
|
||||
action_data.undo.colors.append(canvas.get_pixel_v(pixel));
|
||||
action_data.undo.cells.append(pixel);
|
||||
Color brightened_color = canvas.get_pixel_v(pixel).lightened(0.1);
|
||||
canvas.set_pixel_v(pixel, brightened_color);
|
||||
|
||||
action_data.redo.cells.append(pixel);
|
||||
action_data.redo.colors.append(brightened_color);
|
||||
}
|
||||
|
||||
PoolVector2iArray undo_cells = action_data_undo["cells"] = undo_cells;
|
||||
PoolColorArray undo_colors = action_data_undo["colors"] = undo_colors;
|
||||
PoolVector2iArray redo_cells = action_data_redo["cells"] = redo_cells;
|
||||
PoolColorArray redo_colors = action_data_redo["colors"] = redo_colors;
|
||||
|
||||
action_data.redo.cells.append(pixel)
|
||||
action_data.redo.colors.append(brightened_color)
|
||||
*/
|
||||
}
|
||||
void BrightenAction::commit_action(PaintCanvas *canvas) {
|
||||
@ -61,20 +81,20 @@ void BrightenAction::commit_action(PaintCanvas *canvas) {
|
||||
}
|
||||
|
||||
void BrightenAction::undo_action(PaintCanvas *canvas) {
|
||||
/*
|
||||
var cells = action_data.undo.cells
|
||||
var colors = action_data.undo.colors
|
||||
for idx in range(cells.size()):
|
||||
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||
*/
|
||||
PoolVector2iArray cells = action_data_undo["cells"];
|
||||
PoolColorArray colors = action_data_undo["colors"];
|
||||
|
||||
for (int idx = 0; idx < cells.size(); ++idx) {
|
||||
canvas->_set_pixel_v(action_data["layer"], cells[idx], colors[idx]);
|
||||
}
|
||||
}
|
||||
void BrightenAction::redo_action(PaintCanvas *canvas) {
|
||||
/*
|
||||
var cells = action_data.redo.cells
|
||||
var colors = action_data.redo.colors
|
||||
for idx in range(cells.size()):
|
||||
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||
*/
|
||||
PoolVector2iArray cells = action_data_redo["cells"];
|
||||
PoolColorArray colors = action_data_redo["colors"];
|
||||
|
||||
for (int idx = 0; idx < cells.size(); ++idx) {
|
||||
canvas->_set_pixel_v(action_data["layer"], cells[idx], colors[idx]);
|
||||
}
|
||||
}
|
||||
|
||||
BrightenAction::BrightenAction() {
|
||||
|
@ -24,24 +24,27 @@ SOFTWARE.
|
||||
|
||||
#include "paint_action.h"
|
||||
|
||||
#include "../paint_canvas.h"
|
||||
#include "../paint_canvas_layer.h"
|
||||
|
||||
void PaintAction::do_action(PaintCanvas *canvas, const Array &data) {
|
||||
if (!action_data_redo.has("cells")) {
|
||||
action_data_redo["cells"] = Array();
|
||||
action_data_redo["colors"] = Array();
|
||||
action_data_redo["cells"] = PoolVector2iArray();
|
||||
action_data_redo["colors"] = PoolColorArray();
|
||||
}
|
||||
|
||||
if (!action_data_undo.has("cells")) {
|
||||
action_data_undo["cells"] = Array();
|
||||
action_data_undo["colors"] = Array();
|
||||
action_data_undo["cells"] = PoolVector2iArray();
|
||||
action_data_undo["colors"] = PoolColorArray();
|
||||
}
|
||||
|
||||
if (!action_data_preview.has("cells")) {
|
||||
action_data_preview["cells"] = Array();
|
||||
action_data_preview["colors"] = Array();
|
||||
action_data_preview["cells"] = PoolVector2iArray();
|
||||
action_data_preview["colors"] = PoolColorArray();
|
||||
}
|
||||
|
||||
if (!action_data.has("layer")) {
|
||||
//action_data["layer"] = canvas->get_active_layer();
|
||||
action_data["layer"] = canvas->get_active_layer();
|
||||
}
|
||||
}
|
||||
void PaintAction::commit_action(PaintCanvas *canvas) {
|
||||
|
@ -44,85 +44,107 @@ const list = [
|
||||
]
|
||||
*/
|
||||
|
||||
PoolVector2iArray BrushPrefabs::get_brush(const BrushPrefabs::Type type, const int size) {
|
||||
/*
|
||||
var pixels = []
|
||||
if size < 1:
|
||||
size = 1
|
||||
PoolVector2iArray BrushPrefabs::get_brush(const BrushPrefabs::Type type, int size) {
|
||||
PoolVector2iArray pixels;
|
||||
|
||||
match type:
|
||||
Type.CIRCLE:
|
||||
size += 1
|
||||
var center = Vector2.ZERO
|
||||
var last = center
|
||||
var radius = size / 2.0
|
||||
for x in range(size):
|
||||
for y in range(size):
|
||||
if Vector2(x - radius, y - radius).length() < size / 3.0:
|
||||
pixels.append(Vector2(x, y))
|
||||
if (size < 1) {
|
||||
size = 1;
|
||||
}
|
||||
|
||||
var avg = Vector2(size / 2, size / 2)
|
||||
avg = Vector2(floor(avg.x), floor(avg.y))
|
||||
switch (type) {
|
||||
case CIRCLE: {
|
||||
size += 1;
|
||||
Vector2 center;
|
||||
int radius = size / 2.0;
|
||||
|
||||
for i in range(pixels.size()):
|
||||
pixels[i] -= avg
|
||||
for (int x = 0; x < size; ++x) {
|
||||
for (int y = 0; y < size; ++y) {
|
||||
if (Vector2(x - radius, y - radius).length() < size / 3.0) {
|
||||
pixels.append(Vector2(x, y));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Type.RECT:
|
||||
var center = Vector2.ZERO
|
||||
var last = center
|
||||
for x in range(size):
|
||||
for y in range(size):
|
||||
pixels.append(Vector2(x, y))
|
||||
int av = static_cast<int>(size / 2);
|
||||
Vector2i avg = Vector2i(av, av);
|
||||
|
||||
var avg = Vector2.ZERO
|
||||
for cell in pixels:
|
||||
avg += cell
|
||||
for (int i = 0; i < pixels.size(); ++i) {
|
||||
Vector2i p = pixels[i];
|
||||
p -= avg;
|
||||
pixels.set(i, p);
|
||||
}
|
||||
} break;
|
||||
case RECT: {
|
||||
for (int x = 0; x < size; ++x) {
|
||||
for (int y = 0; y < size; ++y) {
|
||||
pixels.append(Vector2(x, y));
|
||||
}
|
||||
}
|
||||
|
||||
avg.x /= pixels.size()
|
||||
avg.y /= pixels.size()
|
||||
Vector2i avg;
|
||||
for (int i = 0; i < pixels.size(); ++i) {
|
||||
Vector2i p = pixels[i];
|
||||
avg += p;
|
||||
}
|
||||
|
||||
avg = Vector2(floor(avg.x), floor(avg.y))
|
||||
avg.x /= pixels.size();
|
||||
avg.y /= pixels.size();
|
||||
|
||||
for i in range(pixels.size()):
|
||||
pixels[i] -= avg
|
||||
for (int i = 0; i < pixels.size(); ++i) {
|
||||
Vector2i p = pixels[i];
|
||||
p -= avg;
|
||||
pixels.set(i, p);
|
||||
}
|
||||
} break;
|
||||
case V_LINE: {
|
||||
Vector2i center;
|
||||
Vector2i last = center;
|
||||
pixels.append(Vector2i());
|
||||
|
||||
Type.V_LINE:
|
||||
var center = Vector2.ZERO
|
||||
var last = center
|
||||
pixels.append(Vector2.ZERO)
|
||||
for (int i = 0; i < size - 1; ++i) {
|
||||
int sig = SGN(last.y);
|
||||
|
||||
for i in range(size - 1):
|
||||
var sig = sign(last.y)
|
||||
if sig == 0:
|
||||
sig = 1
|
||||
if (sig == 0) {
|
||||
sig = 1;
|
||||
}
|
||||
|
||||
if last.y < 0:
|
||||
center.y = abs(last.y) * -sig
|
||||
else:
|
||||
center.y = abs(last.y+1) * -sig
|
||||
last = center
|
||||
pixels.append(center)
|
||||
Type.H_LINE:
|
||||
var center = Vector2.ZERO
|
||||
var last = center
|
||||
pixels.append(Vector2.ZERO)
|
||||
if (last.y < 0) {
|
||||
center.y = abs(last.y) * -sig;
|
||||
} else {
|
||||
center.y = abs(last.y + 1) * -sig;
|
||||
}
|
||||
|
||||
for i in range(size - 1):
|
||||
var sig = sign(last.x)
|
||||
if sig == 0:
|
||||
sig = 1
|
||||
last = center;
|
||||
pixels.append(center);
|
||||
}
|
||||
|
||||
if last.x < 0:
|
||||
center.x = abs(last.x) * -sig
|
||||
else:
|
||||
center.x = abs(last.x+1) * -sig
|
||||
last = center
|
||||
pixels.append(center)
|
||||
} break;
|
||||
case H_LINE: {
|
||||
Vector2i center;
|
||||
Vector2i last = center;
|
||||
pixels.append(Vector2i());
|
||||
|
||||
return pixels
|
||||
*/
|
||||
for (int i = 0; i < size - 1; ++i) {
|
||||
int sig = SGN(last.x);
|
||||
|
||||
return PoolVector2iArray();
|
||||
if (sig == 0) {
|
||||
sig = 1;
|
||||
}
|
||||
|
||||
if (last.x < 0) {
|
||||
center.x = abs(last.x) * -sig;
|
||||
} else {
|
||||
center.x = abs(last.x + 1) * -sig;
|
||||
}
|
||||
|
||||
last = center;
|
||||
pixels.append(center);
|
||||
}
|
||||
|
||||
} break;
|
||||
}
|
||||
|
||||
return pixels;
|
||||
}
|
||||
|
||||
BrushPrefabs::BrushPrefabs() {
|
||||
|
@ -39,7 +39,7 @@ public:
|
||||
CIRCLE,
|
||||
};
|
||||
|
||||
static PoolVector2iArray get_brush(const Type type, const int size);
|
||||
static PoolVector2iArray get_brush(const Type type, int size);
|
||||
|
||||
BrushPrefabs();
|
||||
~BrushPrefabs();
|
||||
|
Loading…
Reference in New Issue
Block a user