mirror of
https://github.com/cyberarm/cyberarm_engine.cr.git
synced 2025-12-15 08:42:35 +00:00
Added text, ran formatter
This commit is contained in:
@@ -5,6 +5,7 @@ require "./cyberarm_engine/window"
|
||||
require "./cyberarm_engine/common"
|
||||
require "./cyberarm_engine/game_state"
|
||||
require "./cyberarm_engine/game_object"
|
||||
require "./cyberarm_engine/text"
|
||||
|
||||
require "./cyberarm_engine/ui/gui_state"
|
||||
require "./cyberarm_engine/ui/dsl"
|
||||
@@ -14,4 +15,4 @@ require "./cyberarm_engine/ui/theme"
|
||||
require "./cyberarm_engine/ui/element"
|
||||
require "./cyberarm_engine/ui/elements/container"
|
||||
require "./cyberarm_engine/ui/elements/stack"
|
||||
require "./cyberarm_engine/ui/elements/flow"
|
||||
require "./cyberarm_engine/ui/elements/flow"
|
||||
|
||||
@@ -4,4 +4,4 @@ module CyberarmEngine
|
||||
CyberarmEngine::Window.instance.not_nil!
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,7 +5,7 @@ module CyberarmEngine
|
||||
property :options, :global_pause
|
||||
getter :game_objects
|
||||
|
||||
@down_keys : Hash(UInt32, Bool)
|
||||
@down_keys : Hash(UInt32, Bool)
|
||||
|
||||
def initialize(@options)
|
||||
@game_objects = [] of GameObject
|
||||
|
||||
160
src/cyberarm_engine/text.cr
Normal file
160
src/cyberarm_engine/text.cr
Normal file
@@ -0,0 +1,160 @@
|
||||
module CyberarmEngine
|
||||
class Text
|
||||
CACHE = {} of Int64 | Int32 | Float32 | Float64 => Hash(String, Gosu::Font)
|
||||
|
||||
@gosu_font : Gosu::Font
|
||||
@cached_text_image : Gosu::Image?
|
||||
@cached_text_border_image : Gosu::Image?
|
||||
@cached_text_shadow_image : Gosu::Image?
|
||||
|
||||
def initialize(@text : String = "", @size = 18, @font : String = Gosu.default_font_name,
|
||||
@x = 0.0, @y = 0.0, @z = 1025.0, @factor_x = 1.0, @factor_y = 1.0,
|
||||
@color : Gosu::Color | UInt32 = Gosu::Color::WHITE, @mode = :default, @static = false,
|
||||
@border = false, @border_size = 1.0, @border_color : Gosu::Color | UInt32 = Gosu::Color::BLACK,
|
||||
@shadow = false, @shadow_size = 1.0, @shadow_color : Gosu::Color | UInt32 = Gosu::Color::BLACK)
|
||||
@gosu_font = check_cache(@size, @font)
|
||||
end
|
||||
|
||||
def check_cache(size, font_name) : Gosu::Font
|
||||
if CACHE.dig?(size)
|
||||
if font = CACHE.dig?(size, font_name)
|
||||
return font
|
||||
end
|
||||
end
|
||||
|
||||
font = Gosu::Font.new(size, name: font_name)
|
||||
|
||||
CACHE[size] ||= {} of String => Gosu::Font
|
||||
CACHE[size][font_name] = font
|
||||
|
||||
return font
|
||||
end
|
||||
|
||||
def swap_font(size, font_name = @font)
|
||||
return unless @size != size || @font != font_name
|
||||
|
||||
@size = size
|
||||
@font = font_name
|
||||
|
||||
@gosu_font = check_cache(size, font_name)
|
||||
end
|
||||
|
||||
def text=(string)
|
||||
@cached_text_border_image = nil
|
||||
@text = string
|
||||
end
|
||||
|
||||
def factor_x=(n)
|
||||
@cached_text_border_image = nil
|
||||
@factor_x = n
|
||||
end
|
||||
|
||||
def factor_y=(n)
|
||||
@cached_text_border_image = nil
|
||||
@factor_y = n
|
||||
end
|
||||
|
||||
def color=(color)
|
||||
@cached_text_border_image = nil
|
||||
@color = color
|
||||
end
|
||||
|
||||
def border=(boolean : Bool)
|
||||
@cached_text_border_image = nil
|
||||
@border = boolean
|
||||
end
|
||||
|
||||
def border_size=(n)
|
||||
@cached_text_border_image = nil
|
||||
@border_size = n
|
||||
end
|
||||
|
||||
def border_color=(color)
|
||||
@cached_text_border_image = nil
|
||||
@border_color = color
|
||||
end
|
||||
|
||||
def width(text = @text)
|
||||
markup_width(text)
|
||||
end
|
||||
|
||||
def text_width(text = @text)
|
||||
@gosu_font.text_width(text) + @border_size + @shadow_size
|
||||
end
|
||||
|
||||
def markup_width(text = @text)
|
||||
@gosu_font.markup_width(text) + @border_size + @shadow_size
|
||||
end
|
||||
|
||||
def height(text = @text)
|
||||
if text.lines.size > 0
|
||||
text.lines.size * @gosu_font.height + @border_size + @shadow_size
|
||||
else
|
||||
@gosu_font.height + @border_size + @shadow_size
|
||||
end
|
||||
end
|
||||
|
||||
def draw(text = @text)
|
||||
if @gosu_font
|
||||
if @static
|
||||
@cached_text_border_image.not_nil!.draw(@x, @y, @z, @factor_x, @factor_y, @border_color, @mode) if @cached_text_border_image
|
||||
|
||||
@cached_text_shadow_image.not_nil!.draw(@x + @shadow_size, @y + @shadow_size, @z, @factor_x, @factor_y, @shadow_color, @mode) if @cached_text_shadow_image
|
||||
|
||||
@gosu_cached_text_image.not_nil!.draw(@x, @y, @z, @factor_x, @factor_y, @color, @mode) if @gosu_cached_text_image
|
||||
else
|
||||
if @border
|
||||
_x = @border_size
|
||||
_y = @border_size
|
||||
_width = markup_width
|
||||
|
||||
@gosu_font.draw_markup(text, @x - _x, @y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
@gosu_font.draw_markup(text, @x - _x, @y - _y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
|
||||
@gosu_font.draw_markup(text, @x, @y - _y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
@gosu_font.draw_markup(text, @x + _x, @y - _y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
|
||||
@gosu_font.draw_markup(text, @x + _x, @y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
@gosu_font.draw_markup(text, @x + _x, @y + _y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
|
||||
@gosu_font.draw_markup(text, @x, @y + _y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
@gosu_font.draw_markup(text, @x - _x, @y + _y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
end
|
||||
|
||||
@gosu_font.draw_markup(text, @x + @shadow_size, @y + @shadow_size, @z, @factor_x, @factor_y, @shadow_color, @mode) if @shadow
|
||||
|
||||
@gosu_font.draw_markup(text, @x, @y, @z, @factor_x, @factor_y, @color, @mode)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
if @static
|
||||
unless @cached_text_border_image
|
||||
_x = @border_size
|
||||
_y = @border_size
|
||||
_width = markup_width(@text)
|
||||
img = Gosu::Image.from_markup(@text, @size, @font)
|
||||
|
||||
@cached_text_border_image = Gosu.render((_width + (@border_size * 2)).ceil.to_i, (height + (@border_size * 2)).ceil.to_i) do
|
||||
img.draw(-_x, 0, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
img.draw(-_x, -_y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
|
||||
img.draw(0, -_y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
img.draw(_x, -_y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
|
||||
img.draw(_x, 0, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
img.draw(_x, _y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
|
||||
img.draw(0, _y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
img.draw(-_x, _y, @z, @factor_x, @factor_y, @border_color, @mode)
|
||||
end
|
||||
end
|
||||
|
||||
@cached_text_shadow_image = Gosu::Image.from_markup(@text, @size, @font) unless @cached_text_shadow_image
|
||||
|
||||
@gosu_cached_text_image = Gosu::Image.from_markup(@text, @size, @font) unless @cached_text_image
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,6 @@
|
||||
module CyberarmEngine
|
||||
class Style
|
||||
def initialize(@x, @y, @z, @width, @height, @color, @background, @margin, @padding, @border_thickness, @border_color, @border_radius)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
module CyberarmEngine
|
||||
NAME = "InDev"
|
||||
VERSION = "0.1.0"
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user