4 Commits

6 changed files with 74 additions and 54 deletions

View File

@@ -3,6 +3,6 @@ source "https://rubygems.org"
gem "cyberarm_engine" gem "cyberarm_engine"
group :packaging do group :packaging do
gem "ocra" gem "ocran"
gem "releasy", github: "gosu/releasy" # gem "releasy", path: "../releasy"
end end

View File

@@ -1,36 +1,21 @@
GIT
remote: https://github.com/gosu/releasy.git
revision: e8a24c079c4930c6ddbab17fc444027ba41491ca
specs:
releasy (0.2.3)
bundler (>= 1.2.1)
cri (~> 2.1.0)
ocra (~> 1.3.0)
rake (>= 0.9.2.2)
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
cri (2.1.0) cyberarm_engine (0.24.1)
cyberarm_engine (0.24.0)
excon (~> 0.88) excon (~> 0.88)
gosu (~> 1.1) gosu (~> 1.1)
gosu_more_drawables (~> 0.3) gosu_more_drawables (~> 0.3)
excon (0.109.0) excon (0.109.0)
gosu (1.4.6) gosu (1.4.6)
gosu_more_drawables (0.3.1) gosu_more_drawables (0.3.1)
ocra (1.3.11) ocran (1.3.15)
rake (13.1.0)
PLATFORMS PLATFORMS
x64-mingw-ucrt x64-mingw-ucrt
x64-mingw32
x86_64-linux
DEPENDENCIES DEPENDENCIES
cyberarm_engine cyberarm_engine
ocra ocran
releasy!
BUNDLED WITH BUNDLED WITH
2.4.3 2.5.3

View File

@@ -119,10 +119,11 @@ module TAC
@actions_menu = flow(width: 1.0, height: 36) do @actions_menu = flow(width: 1.0, height: 36) do
label "Actions", text_size: THEME_SUBHEADING_TEXT_SIZE, fill: true, text_align: :center label "Actions", text_size: THEME_SUBHEADING_TEXT_SIZE, fill: true, text_align: :center
button get_image("#{TAC::MEDIA_PATH}/icons/barsHorizontal.png"), image_width: THEME_ICON_SIZE, tip: "Auto renumber engine actions", margin_right: 16, enabled: false do # TODO: Implement this
end # button get_image("#{TAC::MEDIA_PATH}/icons/barsHorizontal.png"), image_width: THEME_ICON_SIZE, tip: "Auto renumber engine actions", margin_right: 16, enabled: false do
# end
button get_image("#{TAC::MEDIA_PATH}/icons/up.png"), image_width: THEME_ICON_SIZE, tip: "Move selected action up (and its children, if applicable)" do button get_image("#{TAC::MEDIA_PATH}/icons/up.png"), image_width: THEME_ICON_SIZE, tip: "Move selected action up (and its children, if holding SHIFT)" do
if @active_group && @active_action if @active_group && @active_action
shift_action(@active_action, :up) shift_action(@active_action, :up)
else else
@@ -130,7 +131,7 @@ module TAC
end end
end end
button get_image("#{TAC::MEDIA_PATH}/icons/down.png"), image_width: THEME_ICON_SIZE, tip: "Move selected action down (and its children, if applicable)" do button get_image("#{TAC::MEDIA_PATH}/icons/down.png"), image_width: THEME_ICON_SIZE, tip: "Move selected action down (and its children, if holding SHIFT)" do
if @active_group && @active_action if @active_group && @active_action
shift_action(@active_action, :down) shift_action(@active_action, :down)
else else
@@ -655,6 +656,7 @@ module TAC
valid_name = valid_engine_action_name?(action) valid_name = valid_engine_action_name?(action)
am_child = action_is_child?(action) am_child = action_is_child?(action)
index = @active_group.actions.index(action) index = @active_group.actions.index(action)
move_children = shift_down? # require that a SHIFT key is down when moving childen with their current parent to prevent undesired relocations.
unless valid_name unless valid_name
push_state(TAC::Dialog::AlertDialog, title: "Error", message: "Unable to shift action, incorrectly formated name.\nExpected: name to be like '00-00' not '#{action.name}'") push_state(TAC::Dialog::AlertDialog, title: "Error", message: "Unable to shift action, incorrectly formated name.\nExpected: name to be like '00-00' not '#{action.name}'")
@@ -691,6 +693,7 @@ module TAC
other_is_child = action_is_child?(other) other_is_child = action_is_child?(other)
end end
move_child_actions(other, action) if move_children
swap_action(action, other) swap_action(action, other)
mutated = true mutated = true
end end
@@ -712,6 +715,7 @@ module TAC
other_is_child = action_is_child?(other) other_is_child = action_is_child?(other)
end end
move_child_actions(action, other) if move_children
swap_action(action, other) swap_action(action, other)
mutated = true mutated = true
end end
@@ -749,42 +753,72 @@ module TAC
other_label.value = other.name other_label.value = other.name
end end
def move_child_actions(action, other)
# Ordered: OTHER, ACTION
children = [select_child_actions(other), select_child_actions(action)]
[action, other].each_with_index do |a, i|
new_base_int, _new_subbase_int = valid_engine_action_name?(a)
children[i].each do |child|
child_base_int, child_subbase_int = valid_engine_action_name?(child)
# puts format("MOVING CHILD: #{child.name} (#{child.comment}) from %02d-00 to %02d-00", child_base_int, new_base_int)
new_name = format("%02d-%02d", new_base_int, child_subbase_int)
action_container = find_element_by_tag(@actions_list, child.name)
action_label = find_element_by_tag(action_container, "label")
action_container.style.tag = new_name
action_label.value = new_name
child.name = new_name
end
end
end
def select_child_actions(action)
valid_name = valid_engine_action_name?(action)
@active_group.actions.select do |a|
child_base_int, _child_subbase_int = valid_engine_action_name?(a)
next unless child_base_int
child_base_int == valid_name[0] && action_is_child?(a)
end
end
def valid_engine_action_name?(action) def valid_engine_action_name?(action)
base, subbase = action.name.split("-", 2) base, subbase = action.name.split("-", 2)
base_int = -1 base_int = -1
subbase_int = -1 subbase_int = -1
if subbase return false unless base && subbase
begin
base_int = Integer(base)
subbase_int = Integer(subbase)
rescue ArgumentError
base_int = -1
subbase_int = -1
end
return [base_int, subbase_int] if base_int >= 0 && subbase_int >= 0 return false unless base.length == 2 && subbase.length == 2
# Work around bug in Ruby's `Integer("08")` parser
base = base[0] == "0" ? base[1] : base
subbase = subbase[0] == "0" ? subbase[1] : subbase
begin
base_int = Integer(base)
subbase_int = Integer(subbase)
rescue ArgumentError
base_int = -1
subbase_int = -1
end end
return [base_int, subbase_int] if base_int >= 0 && subbase_int >= 0
return false return false
end end
def action_is_child?(action) def action_is_child?(action)
base, subbase = action.name.split("-", 2) _base_int, subbase_int = valid_engine_action_name?(action)
subbase_int = -1
if subbase return (subbase_int && subbase_int > 0) ? true : false
begin
Integer(base)
subbase_int = Integer(subbase)
rescue ArgumentError
subbase_int = -1
end
return subbase_int > 0
end
return false
end end
def draw def draw
@@ -794,7 +828,7 @@ module TAC
item = @highlight_item_container item = @highlight_item_container
Gosu.draw_rect( Gosu.draw_rect(
item.x, item.y, item.x, item.y + (item&.parent&.scroll_top || 0),
item.width, item.height, item.width, item.height,
@highlight_animator.color_transition, @highlight_animator.color_transition,
item.z + 1 item.z + 1

View File

@@ -1,5 +1,6 @@
module TAC module TAC
NAME = "TimeCrafters Configuration Tool" NAME = "TimeCrafters Configuration Tool"
VERSION = "0.7.2" RELEASE_DATE = "2024-01-19" # ISO 8601 Date of version release
RELEASE_NAME = "Beta" VERSION = "0.8.0"
RELEASE_NAME = "BETA"
end end

View File

@@ -5,7 +5,7 @@ module TAC
def initialize(**args) def initialize(**args)
super(**args) super(**args)
self.caption = "#{TAC::NAME} v#{TAC::VERSION} (#{TAC::RELEASE_NAME})" self.caption = "#{TAC::NAME} v#{TAC::VERSION} (#{TAC::RELEASE_NAME}) [#{TAC::RELEASE_DATE}]"
@backend = Backend.new @backend = Backend.new
@notification_manager = CyberarmEngine::NotificationManager.new(window: self, edge: :bottom) @notification_manager = CyberarmEngine::NotificationManager.new(window: self, edge: :bottom)

View File

@@ -1,5 +1,5 @@
begin begin
raise LoadError if defined?(Ocra) raise LoadError if defined?(Ocra) || defined?(Ocran)
require_relative "../cyberarm_engine/lib/cyberarm_engine" require_relative "../cyberarm_engine/lib/cyberarm_engine"
rescue LoadError rescue LoadError
require "cyberarm_engine" require "cyberarm_engine"
@@ -73,7 +73,7 @@ require_relative "lib/game_clock/net/packet"
USE_REDESIGN = ARGV.include?("--redesign") USE_REDESIGN = ARGV.include?("--redesign")
BORDERLESS = ARGV.include?("--borderless") BORDERLESS = ARGV.include?("--borderless")
if not defined?(Ocra) unless defined?(Ocra) || defined?(Ocran)
TAC::Window.new(width: (Gosu.screen_width * 0.8).round, height: (Gosu.screen_height * 0.8).round, resizable: true, borderless: BORDERLESS).show TAC::Window.new(width: (Gosu.screen_width * 0.8).round, height: (Gosu.screen_height * 0.8).round, resizable: true, borderless: BORDERLESS).show
end end