bugfixes for unit type editor (#8846)

* bugfixes for unit type editor

1. accept space in unit type id
2. don't write translated string to generated wml
3. add textdomain at the top of the generated file
4. fix bad key in generated attack block
This commit is contained in:
Subhraman Sarkar 2024-05-12 14:41:28 +05:30 committed by GitHub
parent 62b9ddaa47
commit 336226d198
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 31 additions and 34 deletions

View file

@ -504,7 +504,7 @@
[column]
border = "all"
border_size = 5
horizontal_alignment = "right"
horizontal_alignment = "center"
[image]
id = "unit_image"
@ -809,7 +809,7 @@
[column]
border = "all"
border_size = 5
horizontal_alignment = "right"
horizontal_alignment = "center"
[image]
id = "attack_image"
@ -1107,7 +1107,7 @@
[column]
border = "all"
border_size = 5
horizontal_alignment = "right"
horizontal_alignment = "center"
[image]
id = "small_profile_image"
@ -1157,8 +1157,6 @@
vertical_placement = "center"
horizontal_placement = "center"
#maximum_width = 1000
[tooltip]
id = "tooltip"
[/tooltip]

View file

@ -1,6 +1,6 @@
/*
Copyright (C) 2023 - 2024
by babaissarkar(Subhraman Sarkar) <suvrax@gmail.com>
by Subhraman Sarkar (babaissarkar) <suvrax@gmail.com>
Part of the Battle for Wesnoth Project https://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
@ -361,14 +361,14 @@ void editor_edit_unit::load_unit_type() {
stacked_widget& page = find_widget<stacked_widget>(get_window(), "page", false);
page.select_layer(0);
find_widget<text_box>(get_window(), "id_box", false).set_value(type->id());
find_widget<text_box>(get_window(), "name_box", false).set_value(type->type_name());
find_widget<text_box>(get_window(), "name_box", false).set_value(type->type_name().base_str());
find_widget<spinner>(get_window(), "level_box", false).set_value(type->level());
find_widget<slider>(get_window(), "cost_slider", false).set_value(type->cost());
find_widget<text_box>(get_window(), "adv_box", false).set_value(utils::join(type->advances_to()));
find_widget<slider>(get_window(), "hp_slider", false).set_value(type->hitpoints());
find_widget<slider>(get_window(), "xp_slider", false).set_value(type->experience_needed());
find_widget<slider>(get_window(), "move_slider", false).set_value(type->movement());
find_widget<scroll_text>(get_window(), "desc_box", false).set_value(type->unit_description());
find_widget<scroll_text>(get_window(), "desc_box", false).set_value(type->unit_description().base_str());
find_widget<text_box>(get_window(), "adv_box", false).set_value(utils::join(type->advances_to(), ", "));
find_widget<text_box>(get_window(), "path_unit_image", false).set_value(type->image());
find_widget<text_box>(get_window(), "path_portrait_image", false).set_value(type->big_profile());
@ -458,8 +458,8 @@ void editor_edit_unit::load_unit_type() {
{
config attack;
boost::dynamic_bitset<> enabled(specials_list_.size());
attack["id"] = atk.id();
attack["name"] = atk.name();
attack["name"] = atk.id();
attack["description"] = atk.name().base_str();
attack["icon"] = atk.icon();
attack["range"] = atk.range();
attack["damage"] = atk.damage();
@ -473,6 +473,8 @@ void editor_edit_unit::load_unit_type() {
update_index();
page.select_layer(0);
button_state_change();
}
}
@ -647,6 +649,9 @@ void editor_edit_unit::enable_movement_slider() {
}
void editor_edit_unit::store_attack() {
// Textdomain
std::string current_textdomain = "wesnoth-"+addon_id_;
// Save current attack data
if (selected_attack_ < 1) {
return;
@ -656,8 +661,8 @@ void editor_edit_unit::store_attack() {
stacked_widget& page = find_widget<stacked_widget>(get_window(), "page", false);
page.select_layer(2);
attack["id"] = find_widget<text_box>(get_window(), "atk_id_box", false).get_value();
attack["name"] = find_widget<text_box>(get_window(), "atk_name_box", false).get_value();
attack["name"] = find_widget<text_box>(get_window(), "atk_id_box", false).get_value();
attack["description"] = t_string(find_widget<text_box>(get_window(), "atk_name_box", false).get_value(), current_textdomain);
attack["icon"] = find_widget<text_box>(get_window(), "path_attack_image", false).get_value();
attack["type"] = find_widget<menu_button>(get_window(), "attack_type_list", false).get_value_string();
attack["damage"] = find_widget<slider>(get_window(), "dmg_box", false).get_value();
@ -679,8 +684,8 @@ void editor_edit_unit::update_attacks() {
stacked_widget& page = find_widget<stacked_widget>(get_window(), "page", false);
page.select_layer(2);
find_widget<text_box>(get_window(), "atk_id_box", false).set_value(attack["id"]);
find_widget<text_box>(get_window(), "atk_name_box", false).set_value(attack["name"]);
find_widget<text_box>(get_window(), "atk_id_box", false).set_value(attack["name"]);
find_widget<text_box>(get_window(), "atk_name_box", false).set_value(attack["description"]);
find_widget<text_box>(get_window(), "path_attack_image", false).set_value(attack["icon"]);
update_image("attack_image");
find_widget<slider>(get_window(), "dmg_box", false).set_value(attack["damage"]);
@ -695,23 +700,13 @@ void editor_edit_unit::update_attacks() {
find_widget<toggle_button>(get_window(), "range_ranged", false).set_value(true);
}
// for (unsigned int i = 0; i < resistances_list_.size(); i++) {
// if (resistances_list_.at(i)["label"] == attack["type"]) {
// find_widget<menu_button>(get_window(), "attack_type_list", false).set_value(i);
// break;
// }
// }
// find_widget<menu_button>(get_window(), "attack_type_list", false).set_selected_from_string(attack["type"]);
set_selected_from_string(
find_widget<menu_button>(get_window(), "attack_type_list", false),
resistances_list_,
attack["type"]);
find_widget<multimenu_button>(get_window(), "weapon_specials_list", false)
.select_options(attacks_.at(selected_attack_-1).first);
}
void editor_edit_unit::update_index() {
@ -749,12 +744,15 @@ void editor_edit_unit::update_index() {
}
void editor_edit_unit::add_attack() {
// Textdomain
std::string current_textdomain = "wesnoth-"+addon_id_;
config attack;
stacked_widget& page = find_widget<stacked_widget>(get_window(), "page", false);
page.select_layer(2);
attack["id"] = find_widget<text_box>(get_window(), "atk_id_box", false).get_value();
attack["name"] = find_widget<text_box>(get_window(), "atk_name_box", false).get_value();
attack["name"] = find_widget<text_box>(get_window(), "atk_id_box", false).get_value();
attack["description"] = t_string(find_widget<text_box>(get_window(), "atk_name_box", false).get_value(), current_textdomain);
attack["icon"] = find_widget<text_box>(get_window(), "path_attack_image", false).get_value();
attack["type"] = find_widget<menu_button>(get_window(), "attack_type_list", false).get_value_string();
attack["damage"] = find_widget<slider>(get_window(), "dmg_box", false).get_value();
@ -849,9 +847,9 @@ void editor_edit_unit::load_movetype() {
}
}
void editor_edit_unit::write_macro(std::ostream& out, int level, std::string macro_name)
void editor_edit_unit::write_macro(std::ostream& out, unsigned level, const std::string macro_name)
{
for(int i = 0; i < level; i++)
for(unsigned i = 0; i < level; i++)
{
out << "\t";
}
@ -866,17 +864,18 @@ void editor_edit_unit::update_wml_view() {
page.select_layer(3);
std::stringstream wml_stream;
// Textdomain
std::string current_textdomain = "wesnoth-"+addon_id_;
wml_stream
<< "#textdomain " << current_textdomain << "\n"
<< "#\n"
<< "# This file was generated using the scenario editor.\n"
<< "#\n";
{
config_writer out(wml_stream, false);
//out.write(type_cfg_);
int level = 0;
out.open_child("unit_type");
@ -1010,7 +1009,7 @@ void editor_edit_unit::update_image(const std::string& id_stem) {
bool editor_edit_unit::check_id(std::string id) {
for(char c : id) {
if (!(std::isalnum(c) || c == '_')) {
if (!(std::isalnum(c) || c == '_' || c == ' ')) {
/* One bad char means entire id string is invalid */
return false;
}
@ -1042,7 +1041,7 @@ void editor_edit_unit::button_state_change_id() {
}
void editor_edit_unit::write() {
/** Write the file */
// Write the file
update_wml_view();
std::string unit_name = type_cfg_.mandatory_child("unit_type")["name"];

View file

@ -1,6 +1,6 @@
/*
Copyright (C) 2023 - 2024
by babaissarkar(Subhraman Sarkar) <suvrax@gmail.com>
by Subhraman Sarkar (babaissarkar) <suvrax@gmail.com>
Part of the Battle for Wesnoth Project https://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
@ -15,11 +15,11 @@
#pragma once
#include "game_config_view.hpp"
#include "gui/dialogs/modal_dialog.hpp"
#include "gui/widgets/group.hpp"
#include "gui/widgets/menu_button.hpp"
#include "serialization/preprocessor.hpp"
#include "game_config_view.hpp"
#include <boost/dynamic_bitset.hpp>
#include <SDL2/SDL.h>
@ -88,7 +88,7 @@ private:
}
/** Write macro to a stream at specified tab level */
void write_macro(std::ostream& out, int level, std::string macro_name);
void write_macro(std::ostream& out, unsigned level, const std::string macro_name);
/** Update wml preview */
void update_wml_view();