Skip to content

Commit

Permalink
Merge pull request #86 from Jupeyy/pr_editor_improvements3
Browse files Browse the repository at this point in the history
Add new editor features
  • Loading branch information
Jupeyy authored Jan 23, 2025
2 parents 32de301 + 76d0ff9 commit 05ef0f3
Show file tree
Hide file tree
Showing 35 changed files with 1,129 additions and 159 deletions.
2 changes: 1 addition & 1 deletion game/client-containers/src/entities.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ impl LoadEntities {
name: &str,
) -> TextureContainer2dArray {
texture_handle
.load_texture_3d_rgba_u8(img.data, name)
.load_texture_2d_array_rgba_u8(img.data, name)
.unwrap()
}
}
Expand Down
2 changes: 1 addition & 1 deletion game/client-render-base/src/map/render_map_base.rs
Original file line number Diff line number Diff line change
Expand Up @@ -562,7 +562,7 @@ impl ClientMapRender {
.map(|img| {
map_upload
.texture_handle
.load_texture_3d_rgba_u8(img.mem, &img.name)
.load_texture_2d_array_rgba_u8(img.mem, &img.name)
})
.collect::<anyhow::Result<Vec<TextureContainer2dArray>>>()?;

Expand Down
104 changes: 93 additions & 11 deletions game/editor/src/action_logic.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::{rc::Rc, sync::Arc};
use std::{collections::BTreeMap, rc::Rc, sync::Arc};

use anyhow::anyhow;
use base::hash::generate_hash_for;
Expand Down Expand Up @@ -49,9 +49,9 @@ use crate::{
ActLayerChangeSoundIndex, ActMoveGroup, ActMoveLayer, ActQuadLayerAddQuads,
ActQuadLayerAddRemQuads, ActQuadLayerRemQuads, ActRemColorAnim, ActRemGroup, ActRemImage,
ActRemImage2dArray, ActRemPhysicsTileLayer, ActRemPosAnim, ActRemQuadLayer, ActRemSound,
ActRemSoundAnim, ActRemSoundLayer, ActRemTileLayer, ActSoundLayerAddRemSounds,
ActSoundLayerAddSounds, ActSoundLayerRemSounds, ActTileLayerReplTilesBase,
ActTileLayerReplaceTiles, ActTilePhysicsLayerReplTilesBase,
ActRemSoundAnim, ActRemSoundLayer, ActRemTileLayer, ActSetCommands, ActSetMetadata,
ActSoundLayerAddRemSounds, ActSoundLayerAddSounds, ActSoundLayerRemSounds,
ActTileLayerReplTilesBase, ActTileLayerReplaceTiles, ActTilePhysicsLayerReplTilesBase,
ActTilePhysicsLayerReplaceTiles, EditorAction,
},
map::{
Expand Down Expand Up @@ -530,6 +530,14 @@ fn merge_actions_group(
EditorAction::RemSoundAnim(act1),
Some(EditorAction::RemSoundAnim(act2)),
)),
(EditorAction::SetCommands(mut act1), EditorAction::SetCommands(act2)) => {
act1.new_commands = act2.new_commands;
Ok((EditorAction::SetCommands(act1), None))
}
(EditorAction::SetMetadata(mut act1), EditorAction::SetMetadata(act2)) => {
act1.new_meta = act2.new_meta;
Ok((EditorAction::SetMetadata(act1), None))
}
(act1, act2) => Ok((act1, Some(act2))),
}
}
Expand Down Expand Up @@ -838,7 +846,7 @@ pub fn do_action(
EditorImage2dArray {
user: EditorResource {
user: texture_handle
.load_texture_3d_rgba_u8(mem, act.base.res.name.as_str())?,
.load_texture_2d_array_rgba_u8(mem, act.base.res.name.as_str())?,
file: Rc::new(act.base.file.clone()),
hq: None,
},
Expand Down Expand Up @@ -1614,8 +1622,12 @@ pub fn do_action(
attr: Default::default(),
selected: Default::default(),
number_extra: Default::default(),
number_extra_texts: Default::default(),
number_extra_text: Default::default(),
context_menu_open: false,
switch_delay: Default::default(),
speedup_force: Default::default(),
speedup_angle: Default::default(),
speedup_max_speed: Default::default(),
},
})
}
Expand All @@ -1627,8 +1639,12 @@ pub fn do_action(
attr: Default::default(),
selected: Default::default(),
number_extra: Default::default(),
number_extra_texts: Default::default(),
number_extra_text: Default::default(),
context_menu_open: false,
switch_delay: Default::default(),
speedup_force: Default::default(),
speedup_angle: Default::default(),
speedup_max_speed: Default::default(),
},
})
}
Expand All @@ -1640,8 +1656,12 @@ pub fn do_action(
attr: Default::default(),
selected: Default::default(),
number_extra: Default::default(),
number_extra_texts: Default::default(),
number_extra_text: Default::default(),
context_menu_open: false,
switch_delay: Default::default(),
speedup_force: Default::default(),
speedup_angle: Default::default(),
speedup_max_speed: Default::default(),
},
})
}
Expand All @@ -1653,8 +1673,12 @@ pub fn do_action(
attr: Default::default(),
selected: Default::default(),
number_extra: Default::default(),
number_extra_texts: Default::default(),
number_extra_text: Default::default(),
context_menu_open: false,
switch_delay: Default::default(),
speedup_force: Default::default(),
speedup_angle: Default::default(),
speedup_max_speed: Default::default(),
},
})
}
Expand All @@ -1666,8 +1690,12 @@ pub fn do_action(
attr: Default::default(),
selected: Default::default(),
number_extra: Default::default(),
number_extra_texts: Default::default(),
number_extra_text: Default::default(),
context_menu_open: false,
switch_delay: Default::default(),
speedup_force: Default::default(),
speedup_angle: Default::default(),
speedup_max_speed: Default::default(),
},
})
}
Expand All @@ -1679,8 +1707,12 @@ pub fn do_action(
attr: Default::default(),
selected: Default::default(),
number_extra: Default::default(),
number_extra_texts: Default::default(),
number_extra_text: Default::default(),
context_menu_open: false,
switch_delay: Default::default(),
speedup_force: Default::default(),
speedup_angle: Default::default(),
speedup_max_speed: Default::default(),
},
})
}
Expand Down Expand Up @@ -2879,6 +2911,28 @@ pub fn do_action(
);
map.animations.sound.remove(act.base.index);
}
EditorAction::SetCommands(act) => {
if fix_action {
act.old_commands = map.config.def.commands.clone();
}
let old_cmds: BTreeMap<_, _> = act.old_commands.clone().into_iter().collect();
let cur_cmds: BTreeMap<_, _> = map.config.def.commands.clone().into_iter().collect();
anyhow::ensure!(
old_cmds == cur_cmds,
"commands in action did not match the ones in map."
);
map.config.def.commands = act.new_commands.clone();
}
EditorAction::SetMetadata(act) => {
if fix_action {
act.old_meta = map.meta.def.clone();
}
anyhow::ensure!(
act.old_meta == map.meta.def,
"metadata in action did not match the ones in map."
);
map.meta.def = act.new_meta.clone();
}
}
Ok(action)
}
Expand Down Expand Up @@ -3494,6 +3548,34 @@ pub fn undo_action(
map,
false,
),
EditorAction::SetCommands(act) => do_action(
tp,
sound_mt,
graphics_mt,
buffer_object_handle,
backend_handle,
texture_handle,
EditorAction::SetCommands(ActSetCommands {
old_commands: act.new_commands,
new_commands: act.old_commands,
}),
map,
false,
),
EditorAction::SetMetadata(act) => do_action(
tp,
sound_mt,
graphics_mt,
buffer_object_handle,
backend_handle,
texture_handle,
EditorAction::SetMetadata(ActSetMetadata {
old_meta: act.new_meta,
new_meta: act.old_meta,
}),
map,
false,
),
}
.map(|_| ())
}
Expand Down
45 changes: 45 additions & 0 deletions game/editor/src/actions/actions.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use base::linked_hash_map_view::FxLinkedHashMap;
use enum_dispatch::enum_dispatch;
use hashlink::LinkedHashMap;
use map::{
map::{
animations::{ColorAnimation, PosAnimation, SoundAnimation},
Expand All @@ -14,6 +15,7 @@ use map::{
},
MapGroup, MapGroupAttr, MapGroupPhysicsAttr,
},
metadata::Metadata,
resources::MapResourceRef,
},
types::NonZeroU16MinusOne,
Expand Down Expand Up @@ -95,6 +97,9 @@ pub enum EditorAction {
RemColorAnim(ActRemColorAnim),
AddSoundAnim(ActAddSoundAnim),
RemSoundAnim(ActRemSoundAnim),
// server settings
SetCommands(ActSetCommands),
SetMetadata(ActSetMetadata),
}

/// actions are always grouped, even single actions
Expand Down Expand Up @@ -1802,3 +1807,43 @@ impl EditorActionInterface for ActRemSoundAnim {
}
}
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ActSetCommands {
pub old_commands: LinkedHashMap<String, String>,
pub new_commands: LinkedHashMap<String, String>,
}

impl EditorActionInterface for ActSetCommands {
fn undo_info(&self) -> String {
format!(
"Replace (back) {} commands with {} commands",
self.new_commands.len(),
self.old_commands.len()
)
}

fn redo_info(&self) -> String {
format!(
"Replace {} commands with {} commands",
self.old_commands.len(),
self.new_commands.len()
)
}
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ActSetMetadata {
pub old_meta: Metadata,
pub new_meta: Metadata,
}

impl EditorActionInterface for ActSetMetadata {
fn undo_info(&self) -> String {
"Replace (back) meta data change".to_string()
}

fn redo_info(&self) -> String {
"Replace meta data change".to_string()
}
}
5 changes: 5 additions & 0 deletions game/editor/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ pub struct EditorClient {
pub(crate) undo_label: Option<String>,
pub(crate) redo_label: Option<String>,

pub(crate) should_save: bool,

mapper_name: String,
color: [u8; 3],
}
Expand Down Expand Up @@ -90,6 +92,8 @@ impl EditorClient {

mapper_name: mapper_name.unwrap_or_else(|| "mapper".to_string()),
color: color.unwrap_or([255, 255, 255]),

should_save: !local_client,
};

res.network
Expand Down Expand Up @@ -144,6 +148,7 @@ impl EditorClient {
redo_label,
undo_label,
} => {
self.should_save = true;
if !self.local_client {
let actions: Box<dyn Iterator<Item = _>> = if undo_event {
Box::new(action.actions.into_iter().rev())
Expand Down
Loading

0 comments on commit 05ef0f3

Please sign in to comment.