mirror of
https://github.com/cyberarm/cyberarm_engine.cr.git
synced 2025-12-16 09:12:35 +00:00
More work on porting to crystal-lang, stubbed a few files
This commit is contained in:
@@ -1,6 +1,21 @@
|
|||||||
require "./../src/cyberarm_engine"
|
require "./../src/cyberarm_engine"
|
||||||
|
|
||||||
class Window < CyberarmEngine::Window
|
class Window < CyberarmEngine::Window
|
||||||
|
class State < CyberarmEngine::GameState
|
||||||
|
@options : Int32
|
||||||
|
|
||||||
|
def draw
|
||||||
|
Gosu.draw_rect(0, 0, window.width, window.height, 0xff_353535)
|
||||||
end
|
end
|
||||||
|
|
||||||
Window.new(width: 700, height: 700).show
|
def needs_cursor?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup
|
||||||
|
push_state(State.new(3))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Window.new.show
|
||||||
@@ -1,7 +1,17 @@
|
|||||||
require "gosu"
|
require "gosu"
|
||||||
|
|
||||||
module CyberarmEngine
|
require "./cyberarm_engine/version"
|
||||||
VERSION = "0.1.0"
|
require "./cyberarm_engine/window"
|
||||||
|
require "./cyberarm_engine/common"
|
||||||
|
require "./cyberarm_engine/game_state"
|
||||||
|
require "./cyberarm_engine/game_object"
|
||||||
|
|
||||||
# TODO: Put your code here
|
require "./cyberarm_engine/ui/gui_state"
|
||||||
end
|
require "./cyberarm_engine/ui/dsl"
|
||||||
|
require "./cyberarm_engine/ui/event"
|
||||||
|
require "./cyberarm_engine/ui/style"
|
||||||
|
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"
|
||||||
7
src/cyberarm_engine/common.cr
Normal file
7
src/cyberarm_engine/common.cr
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
module CyberarmEngine
|
||||||
|
module Common
|
||||||
|
def window
|
||||||
|
CyberarmEngine::Window.instance.not_nil!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
15
src/cyberarm_engine/game_object.cr
Normal file
15
src/cyberarm_engine/game_object.cr
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
module CyberarmEngine
|
||||||
|
class GameObject
|
||||||
|
def draw
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
end
|
||||||
|
|
||||||
|
def button_down(id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def button_up(id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
82
src/cyberarm_engine/game_state.cr
Normal file
82
src/cyberarm_engine/game_state.cr
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
module CyberarmEngine
|
||||||
|
class GameState
|
||||||
|
include Common
|
||||||
|
|
||||||
|
property :options, :global_pause
|
||||||
|
getter :game_objects
|
||||||
|
|
||||||
|
@down_keys : Hash(UInt32, Bool)
|
||||||
|
|
||||||
|
def initialize(@options)
|
||||||
|
@game_objects = [] of GameObject
|
||||||
|
@global_pause = false
|
||||||
|
@down_keys = {} of UInt32 => Bool
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup
|
||||||
|
end
|
||||||
|
|
||||||
|
def post_setup
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw
|
||||||
|
@game_objects.each do |o|
|
||||||
|
o.draw
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@game_objects.each do |o|
|
||||||
|
o.update
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def needs_cursor?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def needs_redraw?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def drop(filename)
|
||||||
|
end
|
||||||
|
|
||||||
|
def gamepad_connected(index)
|
||||||
|
end
|
||||||
|
|
||||||
|
def gamepad_disconnected(index)
|
||||||
|
end
|
||||||
|
|
||||||
|
def gain_focus
|
||||||
|
end
|
||||||
|
|
||||||
|
def lose_focus
|
||||||
|
end
|
||||||
|
|
||||||
|
def button_down(id)
|
||||||
|
@down_keys[id] = true
|
||||||
|
|
||||||
|
@game_objects.each do |o|
|
||||||
|
o.button_down(id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def button_up(id)
|
||||||
|
@down_keys.delete(id)
|
||||||
|
|
||||||
|
@game_objects.each do |o|
|
||||||
|
o.button_up(id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def close : Bool
|
||||||
|
CyberarmEngine::Window.instance.not_nil!.close!
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
@game_objects.each(&:destroy)
|
||||||
|
@game_objects.clear
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
4
src/cyberarm_engine/image.cr
Normal file
4
src/cyberarm_engine/image.cr
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
module CyberarmEngine
|
||||||
|
class Image < Gosu::Image
|
||||||
|
end
|
||||||
|
end
|
||||||
0
src/cyberarm_engine/ui/border_canvas.cr
Normal file
0
src/cyberarm_engine/ui/border_canvas.cr
Normal file
0
src/cyberarm_engine/ui/dsl.cr
Normal file
0
src/cyberarm_engine/ui/dsl.cr
Normal file
0
src/cyberarm_engine/ui/element.cr
Normal file
0
src/cyberarm_engine/ui/element.cr
Normal file
6
src/cyberarm_engine/ui/elements/container.cr
Normal file
6
src/cyberarm_engine/ui/elements/container.cr
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
module CyberarmEngine
|
||||||
|
class Element
|
||||||
|
class Container < Element
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
15
src/cyberarm_engine/ui/elements/flow.cr
Normal file
15
src/cyberarm_engine/ui/elements/flow.cr
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
module CyberarmEngine
|
||||||
|
class Element
|
||||||
|
class Flow < Container
|
||||||
|
def layout
|
||||||
|
@children.each do |child|
|
||||||
|
if fits_on_line?(child)
|
||||||
|
position_on_current_line(child)
|
||||||
|
else
|
||||||
|
position_on_next_line(child)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
11
src/cyberarm_engine/ui/elements/stack.cr
Normal file
11
src/cyberarm_engine/ui/elements/stack.cr
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
module CyberarmEngine
|
||||||
|
class Element
|
||||||
|
class Stack < Container
|
||||||
|
def layout
|
||||||
|
@children.each do |child|
|
||||||
|
move_to_next_line(child)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
0
src/cyberarm_engine/ui/event.cr
Normal file
0
src/cyberarm_engine/ui/event.cr
Normal file
4
src/cyberarm_engine/ui/gui_state.cr
Normal file
4
src/cyberarm_engine/ui/gui_state.cr
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
module CyberarmEngine
|
||||||
|
class GuiState < GameState
|
||||||
|
end
|
||||||
|
end
|
||||||
0
src/cyberarm_engine/ui/style.cr
Normal file
0
src/cyberarm_engine/ui/style.cr
Normal file
0
src/cyberarm_engine/ui/theme.cr
Normal file
0
src/cyberarm_engine/ui/theme.cr
Normal file
4
src/cyberarm_engine/version.cr
Normal file
4
src/cyberarm_engine/version.cr
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
module CyberarmEngine
|
||||||
|
NAME = "InDev"
|
||||||
|
VERSION = "0.1.0"
|
||||||
|
end
|
||||||
@@ -1,6 +1,122 @@
|
|||||||
module CyberarmEngine
|
module CyberarmEngine
|
||||||
class Window < Gosu::Window
|
class Window < Gosu::Window
|
||||||
def initialize(width: 800, height: 600, fullscreen: false, update_interval: 1000.0 / 60, resizable: false, borderless: false)
|
@@instance = nil : CyberarmEngine::Window?
|
||||||
|
|
||||||
|
def self.instance
|
||||||
|
@@instance
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.instance=(klass : CyberarmEngine::Window)
|
||||||
|
@@instance = klass
|
||||||
|
end
|
||||||
|
|
||||||
|
@last_frame_time : UInt64
|
||||||
|
@current_frame_time : UInt64
|
||||||
|
|
||||||
|
def initialize(@width = 800, @height = 600, @fullscreen = false, @update_interval = 1000.0 / 60, @resizable = false, @borderless = false)
|
||||||
|
@has_focus = false
|
||||||
|
|
||||||
|
@last_frame_time = Gosu.milliseconds
|
||||||
|
@current_frame_time = Gosu.milliseconds
|
||||||
|
|
||||||
|
@states = [] of CyberarmEngine::GameState
|
||||||
|
@exit_on_opengl_error = false
|
||||||
|
|
||||||
|
super(@width, @height, @fullscreen, @update_interval, @resizable, @borderless)
|
||||||
|
|
||||||
|
self.caption = "CyberarmEngine.cr v#{CyberarmEngine::VERSION} #{Gosu.language}"
|
||||||
|
CyberarmEngine::Window.instance = self
|
||||||
|
|
||||||
|
setup
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw
|
||||||
|
current_state.not_nil!.draw if current_state
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
current_state.not_nil!.update if current_state
|
||||||
|
|
||||||
|
@last_frame_time = Gosu.milliseconds - @current_frame_time
|
||||||
|
@current_frame_time = Gosu.milliseconds
|
||||||
|
end
|
||||||
|
|
||||||
|
def needs_cursor?
|
||||||
|
current_state ? current_state.not_nil!.needs_cursor? : true
|
||||||
|
end
|
||||||
|
|
||||||
|
def needs_redraw?
|
||||||
|
current_state ? current_state.not_nil!.needs_redraw? : true
|
||||||
|
end
|
||||||
|
|
||||||
|
def drop(filename)
|
||||||
|
current_state.not_nil!.drop(filename) if current_state
|
||||||
|
end
|
||||||
|
|
||||||
|
def gamepad_connected(index)
|
||||||
|
current_state.not_nil!.gamepad_connected(index) if current_state
|
||||||
|
end
|
||||||
|
|
||||||
|
def gamepad_disconnected(index)
|
||||||
|
current_state.not_nil!.gamepad_disconnected(index) if current_state
|
||||||
|
end
|
||||||
|
|
||||||
|
def gain_focus
|
||||||
|
current_state.not_nil!.gain_focus if current_state
|
||||||
|
end
|
||||||
|
|
||||||
|
def lose_focus
|
||||||
|
current_state.not_nil!.lose_focus if current_state
|
||||||
|
end
|
||||||
|
|
||||||
|
def button_down(id)
|
||||||
|
current_state.not_nil!.button_down(id) if current_state
|
||||||
|
end
|
||||||
|
|
||||||
|
def button_up(id)
|
||||||
|
current_state.not_nil!.button_up(id) if current_state
|
||||||
|
end
|
||||||
|
|
||||||
|
def close
|
||||||
|
current_state ? current_state.not_nil!.close : super
|
||||||
|
end
|
||||||
|
|
||||||
|
def dt
|
||||||
|
@last_frame_time / 1000.0
|
||||||
|
end
|
||||||
|
|
||||||
|
def aspect_ratio
|
||||||
|
width / height.to_f
|
||||||
|
end
|
||||||
|
|
||||||
|
def exit_on_opengl_error?
|
||||||
|
@exit_on_opengl_error
|
||||||
|
end
|
||||||
|
|
||||||
|
def push_state(instance)
|
||||||
|
@states << instance
|
||||||
|
|
||||||
|
current_state.not_nil!.setup
|
||||||
|
current_state.not_nil!.post_setup
|
||||||
|
end
|
||||||
|
|
||||||
|
def current_state : CyberarmEngine::GameState?
|
||||||
|
@states.last?
|
||||||
|
end
|
||||||
|
|
||||||
|
def pop_state : CyberarmEngine::GameState?
|
||||||
|
@states.pop?
|
||||||
|
end
|
||||||
|
|
||||||
|
def shift_state : CyberarmEngine::GameState?
|
||||||
|
@states.shift?
|
||||||
|
end
|
||||||
|
|
||||||
|
def has_focus?
|
||||||
|
@has_focus
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user