Skip to content

Commit

Permalink
Some refactoring and speed improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
markusmoenig committed Mar 22, 2024
1 parent ce412d8 commit ef01738
Show file tree
Hide file tree
Showing 9 changed files with 210 additions and 107 deletions.
2 changes: 1 addition & 1 deletion StarterProject.eldiron

Large diffs are not rendered by default.

104 changes: 73 additions & 31 deletions creator/src/modelfxeditor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,31 +53,50 @@ impl ModelFXEditor {

canvas.set_top(toolbar_canvas);

// Left FX List
/*
let mut list_canvas = TheCanvas::default();
let mut list_layout = TheListLayout::new(TheId::named("ModelFX List"));
// RGBA Stack

let mut item = TheListItem::new(TheId::named("ModelFX Cube"));
item.set_text(str!("Cube"));
list_layout.add_item(item, ctx);
let mut stack_canvas = TheCanvas::new();
let mut stack_layout = TheStackLayout::new(TheId::named("ModelFX Stack Layout"));

let mut item = TheListItem::new(TheId::named("ModelFX Wall Horizontal"));
item.set_text(str!("Wall Horizontal"));
list_layout.add_item(item, ctx);
let mut item = TheListItem::new(TheId::named("ModelFX Wall Vertical"));
item.set_text(str!("Wall Vertical"));
list_layout.add_item(item, ctx);
let mut rgba_canvas = TheCanvas::default();
let mut rgba_layout = TheRGBALayout::new(TheId::named("ModelFX Ground RGBA Layout"));
rgba_layout.limiter_mut().set_max_width(130);

list_layout.limiter_mut().set_max_width(130);
list_layout.select_first_item(ctx);
list_canvas.set_layout(list_layout);
*/
if let Some(rgba_view) = rgba_layout.rgba_view_mut().as_rgba_view() {
rgba_view.set_grid(Some(24));
rgba_view.set_mode(TheRGBAViewMode::TilePicker);
let mut c = WHITE;
c[3] = 128;
rgba_view.set_hover_color(Some(c));
ctx.ui.send(TheEvent::Custom(
TheId::named("Render Ground ModelFX Previews"),
TheValue::Empty,
));
}
rgba_canvas.set_layout(rgba_layout);
stack_layout.add_canvas(rgba_canvas);
stack_layout.limiter_mut().set_max_width(130);

let mut rgba_canvas = TheCanvas::default();
let mut rgba_layout = TheRGBALayout::new(TheId::named("ModelFX Wall RGBA Layout"));
rgba_layout.limiter_mut().set_max_width(130);

if let Some(rgba_view) = rgba_layout.rgba_view_mut().as_rgba_view() {
rgba_view.set_grid(Some(24));
rgba_view.set_mode(TheRGBAViewMode::TilePicker);
let mut c = WHITE;
c[3] = 128;
rgba_view.set_hover_color(Some(c));
ctx.ui.send(TheEvent::Custom(
TheId::named("Render Wall ModelFX Previews"),
TheValue::Empty,
));
}
rgba_canvas.set_layout(rgba_layout);
stack_layout.add_canvas(rgba_canvas);

let mut rgba_layout = TheRGBALayout::new(TheId::named("ModelFX RGBA Layout"));
let mut rgba_canvas = TheCanvas::default();
let mut rgba_layout = TheRGBALayout::new(TheId::named("ModelFX Ceiling RGBA Layout"));
rgba_layout.limiter_mut().set_max_width(130);

if let Some(rgba_view) = rgba_layout.rgba_view_mut().as_rgba_view() {
Expand All @@ -87,12 +106,15 @@ impl ModelFXEditor {
c[3] = 128;
rgba_view.set_hover_color(Some(c));
ctx.ui.send(TheEvent::Custom(
TheId::named("Render ModelFX Previews"),
TheId::named("Render Ceiling ModelFX Previews"),
TheValue::Empty,
));
}
rgba_canvas.set_layout(rgba_layout);
canvas.set_left(rgba_canvas);
stack_layout.add_canvas(rgba_canvas);

stack_canvas.set_layout(stack_layout);
canvas.set_left(stack_canvas);

// ModelFX Center

Expand All @@ -111,6 +133,8 @@ impl ModelFXEditor {
center_canvas.set_right(center_color_canvas);
canvas.set_center(center_canvas);

//

canvas
}

Expand Down Expand Up @@ -190,7 +214,7 @@ impl ModelFXEditor {
let c = self
.curr_timeline
.get_collection_at(&TheTime::default(), fx_name.to_string());
let fx = Some(ModelFX::new_fx(fx_name, c));
let fx = Some(ModelFXWall::new_fx(fx_name, c));

if let Some(fx) = fx {
if let Some(collection) = fx.collection() {
Expand Down Expand Up @@ -251,17 +275,35 @@ impl ModelFXEditor {
}
}
TheEvent::Custom(id, _) => {
if id.name == "Render ModelFX Previews" {
self.render_modelfx_previews(ui, ctx);
if id.name == "Ground Selected" {
if let Some(stack) = ui.get_stack_layout("ModelFX Stack Layout") {
stack.set_index(0);
redraw = true;
ctx.ui.relayout = true;
}
} else if id.name == "Wall Selected" {
if let Some(stack) = ui.get_stack_layout("ModelFX Stack Layout") {
stack.set_index(1);
redraw = true;
ctx.ui.relayout = true;
}
} else if id.name == "Ceiling Selected" {
if let Some(stack) = ui.get_stack_layout("ModelFX Stack Layout") {
stack.set_index(2);
redraw = true;
ctx.ui.relayout = true;
}
} else if id.name == "Render Wall ModelFX Previews" {
self.render_modelfx_wall_previews(ui, ctx);
}
}
TheEvent::TilePicked(id, pos) => {
if id.name == "ModelFX RGBA Layout View" {
if id.name == "ModelFX Wall RGBA Layout View" {
if let Some(fx_name) = self.fx_text.get(&(pos.x, pos.y)) {
let c = self
.curr_timeline
.get_collection_at(&TheTime::default(), fx_name.to_string());
let fx = Some(ModelFX::new_fx(fx_name, c));
let fx = Some(ModelFXWall::new_fx(fx_name, c));

if let Some(fx) = fx {
if let Some(collection) = fx.collection() {
Expand Down Expand Up @@ -329,7 +371,7 @@ impl ModelFXEditor {
}
}
TheEvent::TileEditorHoverChanged(id, pos) => {
if id.name == "ModelFX RGBA Layout View" {
if id.name == "ModelFX Wall RGBA Layout View" {
ctx.ui.send(TheEvent::SetStatusText(
id.clone(),
self.fx_text
Expand All @@ -346,10 +388,10 @@ impl ModelFXEditor {
}

/// Render the model previews.
pub fn render_modelfx_previews(&mut self, ui: &mut TheUI, ctx: &mut TheContext) {
pub fn render_modelfx_wall_previews(&mut self, ui: &mut TheUI, ctx: &mut TheContext) {
self.fx_text.clear();
if let Some(editor) = ui.get_rgba_layout("ModelFX RGBA Layout") {
let fx_array = ModelFX::fx_array();
if let Some(editor) = ui.get_rgba_layout("ModelFX Wall RGBA Layout") {
let fx_array = ModelFXWall::fx_array();

let grid = 48;
let width = grid * 2; //130 - 16; //editor.dim().width - 16;
Expand All @@ -372,7 +414,7 @@ impl ModelFXEditor {

let mut rgba = TheRGBABuffer::new(TheDim::sized(grid, grid));

ModelFX::render_preview(&mut rgba, fx);
ModelFXWall::render_preview(&mut rgba, fx);

buffer.copy_into(x * grid, y * grid, &rgba);
//buffer.copy_into(x * grid, y * grid, &tile.buffer[0].scaled(grid, grid));
Expand Down
82 changes: 57 additions & 25 deletions creator/src/tileeditor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -584,16 +584,28 @@ impl TileEditor {
self.set_icon_colors(ui);
server_ctx.show_fx_marker = false;
redraw = true;
ctx.ui.send(TheEvent::Custom(
TheId::named("Ground Selected"),
TheValue::Empty,
));
} else if id.name == "Wall Icon" {
self.curr_layer_role = Layer2DRole::Wall;
self.set_icon_colors(ui);
server_ctx.show_fx_marker = false;
redraw = true;
ctx.ui.send(TheEvent::Custom(
TheId::named("Wall Selected"),
TheValue::Empty,
));
} else if id.name == "Ceiling Icon" {
self.curr_layer_role = Layer2DRole::Ceiling;
self.set_icon_colors(ui);
server_ctx.show_fx_marker = false;
redraw = true;
ctx.ui.send(TheEvent::Custom(
TheId::named("Cei;ing Selected"),
TheValue::Empty,
));
} else if id.name == "Tile FX Icon" {
self.curr_layer_role = Layer2DRole::FX;
self.set_icon_colors(ui);
Expand Down Expand Up @@ -721,18 +733,54 @@ impl TileEditor {
server_ctx: &ServerContext,
compute_delta: bool,
) {
// Redraw complete region
// if let Some(rgba_layout) = ui.canvas.get_layout(Some(&"Region Editor".into()), None) {
// if let Some(rgba_layout) = rgba_layout.as_rgba_layout() {
// if let Some(rgba_view) = rgba_layout.rgba_view_mut().as_rgba_view() {
// server.draw_region(
// &server_ctx.curr_region,
// rgba_view.buffer_mut(),
// &TILEDRAWER.lock().unwrap(),
// ctx,
// server_ctx,
// compute_delta,
// vec2i(0, 0),
// );
// rgba_view.set_needs_redraw(true);
// }
// }
// }

// Redraw partial region
if let Some(rgba_layout) = ui.canvas.get_layout(Some(&"Region Editor".into()), None) {
if let Some(rgba_layout) = rgba_layout.as_rgba_layout() {
if let Some(rgba_view) = rgba_layout.rgba_view_mut().as_rgba_view() {
server.draw_region(
&server_ctx.curr_region,
rgba_view.buffer_mut(),
&TILEDRAWER.lock().unwrap(),
ctx,
server_ctx,
compute_delta,
);
rgba_view.set_needs_redraw(true);
let rect = rgba_view.visible_rect();
let dest_dim = rgba_view.buffer().dim();

if rect.x + rect.width < dest_dim.width
&& rect.y + rect.height < dest_dim.height
{
let mut b = TheRGBABuffer::new(rect);

server.draw_region(
&server_ctx.curr_region,
&mut b,
&TILEDRAWER.lock().unwrap(),
server_ctx,
compute_delta,
vec2i(rect.x, dest_dim.height - (rect.y + rect.height)),
);
rgba_view.buffer_mut().copy_into(rect.x, rect.y, &b);
server.draw_region_selections(
&server_ctx.curr_region,
rgba_view.buffer_mut(),
&TILEDRAWER.lock().unwrap(),
ctx,
server_ctx,
);
rgba_view.set_needs_redraw(true);
}
}
}
}
Expand Down Expand Up @@ -771,22 +819,6 @@ impl TileEditor {
compute_delta,
);
}

if let Some(rgba_layout) = ui.canvas.get_layout(Some(&"Region Editor".into()), None) {
if let Some(rgba_layout) = rgba_layout.as_rgba_layout() {
if let Some(rgba_view) = rgba_layout.rgba_view_mut().as_rgba_view() {
server.draw_region(
&server_ctx.curr_region,
rgba_view.buffer_mut(),
&TILEDRAWER.lock().unwrap(),
ctx,
server_ctx,
compute_delta,
);
rgba_view.set_needs_redraw(true);
}
}
}
}

/// Perform the given click action at the given coordinate.
Expand Down
4 changes: 2 additions & 2 deletions shared/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ pub mod fx;
pub mod interaction;
pub mod item;
pub mod level;
pub mod modelfx;
pub mod modelfxwall;
pub mod project;
pub mod region;
pub mod regionfx;
Expand All @@ -33,7 +33,7 @@ pub mod prelude {
pub use crate::interaction::*;
pub use crate::item::Item;
pub use crate::level::Level;
pub use crate::modelfx::*;
pub use crate::modelfxwall::*;
pub use crate::project::Project;
pub use crate::region::{CameraMode, CameraType, Layer2DRole, Region, RegionTile};
pub use crate::regionfx::*;
Expand Down
Loading

0 comments on commit ef01738

Please sign in to comment.