11 Commits

Author SHA1 Message Date
ce089afbf1 Fixed crashes due to removal of 'label' from CyberarmEngine GUI system 2024-04-09 08:27:00 -05:00
3851eb1630 Extracted frame timings graph to CyberarmEngine 2023-04-20 21:55:12 -05:00
2da9edb6d0 Refactored to use CyberarmEngine::Window#delta_time instead of our reimplementing it, add WIP frame timing to Overlay using CyberarmEngine::Stats.frames data 2023-04-20 16:14:29 -05:00
8f2d7ff905 Moved shaders to cyberarm_engine, patched up settings menu, updated gems. 2023-01-08 17:29:31 -06:00
580c9d79ce Updated gems, fix issues caused by the removal of $window from cyberarm_engine 2022-07-16 06:59:47 -05:00
07c8dfa45b Merge pull request #11 from cyberarm/dependabot/bundler/nokogiri-1.13.6
Bump nokogiri from 1.13.4 to 1.13.6
2022-05-24 09:37:58 -05:00
dependabot[bot]
b69bdc8e46 Bump nokogiri from 1.13.4 to 1.13.6
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.4 to 1.13.6.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.4...v1.13.6)

---
updated-dependencies:
- dependency-name: nokogiri
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-24 05:21:15 +00:00
3481de2498 Merge pull request #9 from cyberarm/dependabot/bundler/nokogiri-1.13.4
Bump nokogiri from 1.13.2 to 1.13.4
2022-04-12 08:06:00 -05:00
dependabot[bot]
7bcd973a88 Bump nokogiri from 1.13.2 to 1.13.4
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.2 to 1.13.4.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/v1.13.4/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.2...v1.13.4)

---
updated-dependencies:
- dependency-name: nokogiri
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-12 10:23:14 +00:00
1d34cbb63d Merge pull request #8 from cyberarm/dependabot/bundler/nokogiri-1.13.2
Bump nokogiri from 1.11.6 to 1.13.2
2022-03-12 21:27:21 -06:00
dependabot[bot]
2df2df8488 Bump nokogiri from 1.11.6 to 1.13.2
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.11.6 to 1.13.2.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.11.6...v1.13.2)

---
updated-dependencies:
- dependency-name: nokogiri
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-26 06:56:08 +00:00
27 changed files with 172 additions and 350 deletions

View File

@@ -1,12 +1,9 @@
GIT GIT
remote: https://github.com/cyberarm/cyberarm_engine remote: https://github.com/cyberarm/cyberarm_engine
revision: 1b080f9fb99cc4ec696f32f00f28cbf89b40ed04 revision: 9694cc2270198005bc2388fc6dacddfbb9629f60
specs: specs:
cyberarm_engine (0.18.0) cyberarm_engine (0.24.4)
clipboard (~> 1.3.5)
excon (~> 0.78.0)
gosu (~> 1.1) gosu (~> 1.1)
gosu_more_drawables (~> 0.3)
GIT GIT
remote: https://github.com/gosu/releasy.git remote: https://github.com/gosu/releasy.git
@@ -21,28 +18,25 @@ GIT
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
clipboard (1.3.5) concurrent-ruby (1.2.3)
concurrent-ruby (1.1.8)
cri (2.1.0) cri (2.1.0)
excon (0.78.1) excon (0.110.0)
gosu (1.2.0) gosu (1.4.6)
gosu_more_drawables (0.3.1) i18n (1.14.4)
i18n (1.8.10)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
mini_portile2 (2.5.3) mini_portile2 (2.8.5)
nokogiri (1.11.6) nokogiri (1.16.3)
mini_portile2 (~> 2.5.0) mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nokogiri (1.11.6-x64-mingw32)
racc (~> 1.4) racc (~> 1.4)
ocra (1.3.11) ocra (1.3.11)
opengl-bindings (1.6.11) opengl-bindings (1.6.14)
racc (1.5.2) racc (1.7.3)
rake (13.0.3) rake (13.2.1)
rubyzip (2.3.0) rubyzip (2.3.2)
PLATFORMS PLATFORMS
ruby ruby
x64-mingw-ucrt
x64-mingw32 x64-mingw32
DEPENDENCIES DEPENDENCIES
@@ -57,4 +51,4 @@ DEPENDENCIES
rubyzip rubyzip
BUNDLED WITH BUNDLED WITH
2.2.3 2.4.8

View File

@@ -9,7 +9,7 @@ end
class Window < Gosu::Window class Window < Gosu::Window
def initialize def initialize
super(Gosu.screen_width, Gosu.screen_height, fullscreen: true) super(Gosu.screen_width, Gosu.screen_height, fullscreen: true)
$window = self CyberarmEngine::Window.instance = self
@size = 50 @size = 50
@slope = 250 @slope = 250
@color_step = 10 @color_step = 10

View File

@@ -3,7 +3,7 @@
component(:vehicle) # Generic, Weapon component(:vehicle) # Generic, Weapon
on.button_down(:interact) do |event| on.button_down(:interact) do |event|
$window.console.stdin("#{event.entity.name} handled button_down(:interact)") CyberarmEngine::Window.instance.console.stdin("#{event.entity.name} handled button_down(:interact)")
# if event.player.touching?(event.entity) # if event.player.touching?(event.entity)
# event.player.enter_vehicle # event.player.enter_vehicle
# elsif event.player.driving?(event.entity) or event.player.passenger?(event.entity) # elsif event.player.driving?(event.entity) or event.player.passenger?(event.entity)

View File

@@ -7,11 +7,11 @@ class IMICFPS
module CommonMethods module CommonMethods
def window def window
$window CyberarmEngine::Window.instance
end end
def delta_time def delta_time
(Gosu.milliseconds - window.delta_time) / 1000.0 window.delta_time
end end
def button_down?(id) def button_down?(id)

View File

@@ -77,12 +77,12 @@ class IMICFPS
when "up" when "up"
input = InputMapper.get(data.last.to_sym) input = InputMapper.get(data.last.to_sym)
key = input.is_a?(Array) ? input.first : input key = input.is_a?(Array) ? input.first : input
$window.current_state.button_up(key) if key CyberarmEngine::Window.instance.current_state.button_up(key) if key
when "down" when "down"
input = InputMapper.get(data.last.to_sym) input = InputMapper.get(data.last.to_sym)
key = input.is_a?(Array) ? input.first : input key = input.is_a?(Array) ? input.first : input
$window.current_state.button_down(key) if key CyberarmEngine::Window.instance.current_state.button_down(key) if key
when "mouse" when "mouse"
@camera.orientation.z = data[1].to_f @camera.orientation.z = data[1].to_f

View File

@@ -65,11 +65,11 @@ class IMICFPS
end end
def hijack_input! def hijack_input!
$window.input_hijack = self CyberarmEngine::Window.instance.input_hijack = self
end end
def release_input! def release_input!
$window.input_hijack = nil CyberarmEngine::Window.instance.input_hijack = nil
end end
end end
end end

View File

@@ -19,7 +19,7 @@ class IMICFPS
return unless @text_input return unless @text_input
Gosu.draw_rect( Gosu.draw_rect(
Widget.horizontal_margin, $window.height / 2 - (@text.height / 2 + Widget.horizontal_padding), Widget.horizontal_margin, CyberarmEngine::Window.instance.height / 2 - (@text.height / 2 + Widget.horizontal_padding),
@width - Widget.horizontal_padding * 2, @text.height + Widget.vertical_padding * 2, @width - Widget.horizontal_padding * 2, @text.height + Widget.vertical_padding * 2,
@background @background
) )
@@ -44,11 +44,11 @@ class IMICFPS
def update def update
@deliver_to_text.text = "#{@deliver_to}: " @deliver_to_text.text = "#{@deliver_to}: "
@deliver_to_text.x = Widget.horizontal_margin + Widget.horizontal_padding @deliver_to_text.x = Widget.horizontal_margin + Widget.horizontal_padding
@deliver_to_text.y = $window.height / 2 - (@text.height / 2) @deliver_to_text.y = CyberarmEngine::Window.instance.height / 2 - (@text.height / 2)
@text.text = @text_input&.text.to_s @text.text = @text_input&.text.to_s
@text.x = Widget.horizontal_margin + Widget.horizontal_padding + @deliver_to_text.width @text.x = Widget.horizontal_margin + Widget.horizontal_padding + @deliver_to_text.width
@text.y = $window.height / 2 - (@text.height / 2) @text.y = CyberarmEngine::Window.instance.height / 2 - (@text.height / 2)
end end
def button_down(id) def button_down(id)

View File

@@ -26,7 +26,7 @@ class IMICFPS
def available_light def available_light
raise "Using to many lights, #{light_count}/#{LightManager::MAX_LIGHTS}" if light_count > LightManager::MAX_LIGHTS raise "Using to many lights, #{light_count}/#{LightManager::MAX_LIGHTS}" if light_count > LightManager::MAX_LIGHTS
puts "OpenGL::GL_LIGHT#{light_count}" if $window.config.get(:debug_options, :stats) puts "OpenGL::GL_LIGHT#{light_count}" if CyberarmEngine::Window.instance.config.get(:debug_options, :stats)
Object.const_get "OpenGL::GL_LIGHT#{light_count}" Object.const_get "OpenGL::GL_LIGHT#{light_count}"
end end
end end

View File

@@ -46,7 +46,7 @@ class IMICFPS
def tick(delta_time) def tick(delta_time)
return unless @map return unless @map
Publisher.instance.publish(:tick, delta_time * 1000.0) Publisher.instance.publish(:tick, delta_time)
@map.update @map.update
@server&.update @server&.update

View File

@@ -33,7 +33,7 @@ class IMICFPS
if window.config.get(:options, :fps) if window.config.get(:options, :fps)
create_slot "FPS: #{Gosu.fps}" create_slot "FPS: #{Gosu.fps}"
if window.config.get(:debug_options, :stats) if window.config.get(:debug_options, :stats)
create_slot "Frame time: #{(Gosu.milliseconds - window.delta_time).to_s.rjust(3, '0')}ms" create_slot "Frame time: #{(window.delta_time * 1000).round.to_s}ms"
end end
end end

View File

@@ -5,7 +5,7 @@ class IMICFPS
attr_reader :camera, :entities, :lights attr_reader :camera, :entities, :lights
def initialize def initialize
@camera = PerspectiveCamera.new(position: Vector.new, aspect_ratio: $window.aspect_ratio) @camera = PerspectiveCamera.new(position: Vector.new, aspect_ratio: CyberarmEngine::Window.instance.aspect_ratio)
@entities = [] @entities = []
@lights = [] @lights = []

View File

@@ -12,7 +12,7 @@ class IMICFPS
end end
def map def map
$window.director.map CyberarmEngine::Window.instance.director.map
end end
end end
end end

View File

@@ -23,10 +23,10 @@ class IMICFPS
@camera = PerspectiveCamera.new(aspect_ratio: window.aspect_ratio, position: Vector.new(0, 1.5, 5), orientation: Vector.forward) @camera = PerspectiveCamera.new(aspect_ratio: window.aspect_ratio, position: Vector.new(0, 1.5, 5), orientation: Vector.forward)
@camera_controller = CameraController.new(camera: @camera, entity: nil, mode: :fpv) @camera_controller = CameraController.new(camera: @camera, entity: nil, mode: :fpv)
label @manifest.name, text_size: 50, text_border: true, text_border_color: Gosu::Color::BLACK banner @manifest.name, text_size: 50, text_border: true, text_border_color: Gosu::Color::BLACK
label @manifest.model, text_border: true, text_border_color: Gosu::Color::BLACK tagline @manifest.model, text_border: true, text_border_color: Gosu::Color::BLACK
@camera_position = label "", text_border: true, text_border_color: Gosu::Color::BLACK @camera_position = tagline "", text_border: true, text_border_color: Gosu::Color::BLACK
@camera_orientation = label "", text_border: true, text_border_color: Gosu::Color::BLACK @camera_orientation = tagline "", text_border: true, text_border_color: Gosu::Color::BLACK
button "Back" do button "Back" do
pop_state pop_state

View File

@@ -29,7 +29,7 @@ class IMICFPS
def update def update
super super
Publisher.instance.publish(:tick, Gosu.milliseconds - window.delta_time) Publisher.instance.publish(:tick, window.delta_time)
control_editor control_editor

View File

@@ -32,7 +32,7 @@ class IMICFPS
button "New Map", width: 0.64 button "New Map", width: 0.64
end end
label "Edit Map", width: 1.0, text_align: :center, text_size: 50 banner "Edit Map", width: 1.0, text_align: :center, text_size: 50
flow(width: 1.0, height: 1.0) do flow(width: 1.0, height: 1.0) do
@maps.each do |map| @maps.each do |map|
button map.metadata.name do button map.metadata.name do

View File

@@ -12,20 +12,20 @@ class IMICFPS
end end
def set(key, value) def set(key, value)
$window.config[:debug_options, key] = value CyberarmEngine::Window.instance.config[:debug_options, key] = value
end end
def get(key) def get(key)
$window.config.get(:debug_options, key) CyberarmEngine::Window.instance.config.get(:debug_options, key)
end end
def setup def setup
set(:boundingboxes, false) if $window.config.get(:debug_options, :boundingboxes).nil? set(:boundingboxes, false) if CyberarmEngine::Window.instance.config.get(:debug_options, :boundingboxes).nil?
set(:wireframe, false) if $window.config.get(:debug_options, :wireframe).nil? set(:wireframe, false) if CyberarmEngine::Window.instance.config.get(:debug_options, :wireframe).nil?
set(:stats, false) if $window.config.get(:debug_options, :stats).nil? set(:stats, false) if CyberarmEngine::Window.instance.config.get(:debug_options, :stats).nil?
set(:skydome, true) if $window.config.get(:debug_options, :skydome).nil? set(:skydome, true) if CyberarmEngine::Window.instance.config.get(:debug_options, :skydome).nil?
set(:use_shaders, true) if $window.config.get(:debug_options, :use_shaders).nil? set(:use_shaders, true) if CyberarmEngine::Window.instance.config.get(:debug_options, :use_shaders).nil?
set(:opengl_error_panic, false) if $window.config.get(:debug_options, :opengl_error_panic).nil? set(:opengl_error_panic, false) if CyberarmEngine::Window.instance.config.get(:debug_options, :opengl_error_panic).nil?
subcommand(:boundingboxes, :boolean) subcommand(:boundingboxes, :boolean)
subcommand(:wireframe, :boolean) subcommand(:wireframe, :boolean)

View File

@@ -19,12 +19,12 @@ class IMICFPS
case arguments.last case arguments.last
when "", nil when "", nil
console.stdin("#{Console::Style.highlight('fps')}: #{$window.config.get(:options, :fps)}") console.stdin("#{Console::Style.highlight('fps')}: #{CyberarmEngine::Window.instance.config.get(:options, :fps)}")
when "on" when "on"
var = $window.config[:options, :fps] = true var = CyberarmEngine::Window.instance.config[:options, :fps] = true
console.stdin("fps => #{Console::Style.highlight(var)}") console.stdin("fps => #{Console::Style.highlight(var)}")
when "off" when "off"
var = $window.config[:options, :fps] = false var = CyberarmEngine::Window.instance.config[:options, :fps] = false
console.stdin("fps => #{Console::Style.highlight(var)}") console.stdin("fps => #{Console::Style.highlight(var)}")
else else
console.stdin("Invalid argument for #{Console::Style.highlight(command.to_s)}, got #{Console::Style.error(arguments.last)} expected #{Console::Style.notice('on')}, or #{Console::Style.notice('off')}.") console.stdin("Invalid argument for #{Console::Style.highlight(command.to_s)}, got #{Console::Style.error(arguments.last)} expected #{Console::Style.notice('on')}, or #{Console::Style.notice('off')}.")

View File

@@ -12,7 +12,7 @@ class IMICFPS
end end
def setup def setup
$window.config[:options, :hud] = true if $window.config.get(:options, :hud).nil? CyberarmEngine::Window.instance.config[:options, :hud] = true if CyberarmEngine::Window.instance.config.get(:options, :hud).nil?
end end
def handle(arguments, console) def handle(arguments, console)
@@ -23,12 +23,12 @@ class IMICFPS
case arguments.last case arguments.last
when "", nil when "", nil
console.stdin("#{Console::Style.highlight(command.to_s)}: #{$window.config.get(:options, command)}") console.stdin("#{Console::Style.highlight(command.to_s)}: #{CyberarmEngine::Window.instance.config.get(:options, command)}")
when "on" when "on"
var = $window.config[:options, command] = true var = CyberarmEngine::Window.instance.config[:options, command] = true
console.stdin("#{command} => #{Console::Style.highlight(var)}") console.stdin("#{command} => #{Console::Style.highlight(var)}")
when "off" when "off"
var = $window.config[:options, command] = false var = CyberarmEngine::Window.instance.config[:options, command] = false
console.stdin("#{command} => #{Console::Style.highlight(var)}") console.stdin("#{command} => #{Console::Style.highlight(var)}")
else else
console.stdin("Invalid argument for #{Console::Style.highlight(command.to_s)}, got #{Console::Style.error(arguments.last)} expected #{Console::Style.notice('on')}, or #{Console::Style.notice('off')}.") console.stdin("Invalid argument for #{Console::Style.highlight(command.to_s)}, got #{Console::Style.error(arguments.last)} expected #{Console::Style.notice('on')}, or #{Console::Style.notice('off')}.")

View File

@@ -25,30 +25,30 @@ class IMICFPS
image "#{GAME_ROOT_PATH}/static/logo.png", width: 64 image "#{GAME_ROOT_PATH}/static/logo.png", width: 64
stack do stack do
label "[Clan TAG] Username", text_size: 36 tagline "[Clan TAG] Username", text_size: 36
label "\"Title Badge Thingy\"" tagline "\"Title Badge Thingy\""
end end
end end
flow(margin_top: 4) do flow(margin_top: 4, width: 1.0) do
stack do stack do
label "Kiil/Death Ratio" tagline "Kiil/Death Ratio"
label "Kills" tagline "Kills"
label "Deaths" tagline "Deaths"
label "Assists" tagline "Assists"
label "Buildings Destroyed" tagline "Buildings Destroyed"
label "Vehicles Destroyed" tagline "Vehicles Destroyed"
label "Repair Points" tagline "Repair Points"
end end
stack margin_left: 16 do stack margin_left: 16 do
label "0.75" tagline "0.75"
label "21" tagline "21"
label "28" tagline "28"
label "14" tagline "14"
label "111" tagline "111"
label "41" tagline "41"
label "4,451" tagline "4,451"
end end
end end
end end

View File

@@ -55,29 +55,29 @@ class IMICFPS
background i.even? ? 0x55000000 : 0x55ff5500 background i.even? ? 0x55000000 : 0x55ff5500
flow width: 0.1 do flow width: 0.1 do
label game[:game_type], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT tagline game[:game_type], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT
end end
flow width: 0.3 do flow width: 0.3 do
label game[:host], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT tagline game[:host], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT
end end
flow width: 0.3 do flow width: 0.3 do
label game[:map], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT tagline game[:map], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT
end end
flow width: 0.1 do flow width: 0.1 do
label game[:players], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT tagline game[:players], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT
end end
flow width: 0.1 do flow width: 0.1 do
label game[:ping], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT tagline game[:ping], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT
end end
flow width: 0.1 do flow width: 0.1 do
label game[:source], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT tagline game[:source], text_size: text_size, text_wrap: :none, font: i.zero? ? BOLD_SANS_FONT : SANS_FONT
end end
end end
end end
end end
flow width: 1.0, height: 0.25 do flow width: 1.0, height: 0.25 do
label "Name" tagline "Name"
name = edit_line "", margin_right: 20 name = edit_line "", margin_right: 20
button "Join", width: 0.25 do button "Join", width: 0.25 do
pp name.value pp name.value

View File

@@ -5,20 +5,20 @@ class IMICFPS
include CommonMethods include CommonMethods
def self.set_defaults def self.set_defaults
if $window.config.get(:options, :audio, :volume_master).nil? if CyberarmEngine::Window.instance.config.get(:options, :audio, :volume_master).nil?
$window.config[:options, :audio, :volume_master] = 1.0 CyberarmEngine::Window.instance.config[:options, :audio, :volume_master] = 1.0
end end
if $window.config.get(:options, :audio, :volume_sound_effects).nil? if CyberarmEngine::Window.instance.config.get(:options, :audio, :volume_sound_effects).nil?
$window.config[:options, :audio, :volume_sound_effects] = 1.0 CyberarmEngine::Window.instance.config[:options, :audio, :volume_sound_effects] = 1.0
end end
if $window.config.get(:options, :audio, :volume_music).nil? if CyberarmEngine::Window.instance.config.get(:options, :audio, :volume_music).nil?
$window.config[:options, :audio, :volume_music] = 0.7 CyberarmEngine::Window.instance.config[:options, :audio, :volume_music] = 0.7
end end
if $window.config.get(:options, :audio, :volume_dialogue).nil? if CyberarmEngine::Window.instance.config.get(:options, :audio, :volume_dialogue).nil?
$window.config[:options, :audio, :volume_dialogue] = 0.7 CyberarmEngine::Window.instance.config[:options, :audio, :volume_dialogue] = 0.7
end end
end end
@@ -30,15 +30,17 @@ class IMICFPS
stack(width: 0.25, height: 1.0) do stack(width: 0.25, height: 1.0) do
end end
stack(width: 0.5, height: 1.0) do stack(fill: true, height: 1.0) do
stack(width: 1.0, height: 0.25) do title "Settings", width: 1.0, text_align: :center
title "Settings"
stack(width: 1.0, height: 96) do
flow(width: 1.0) do flow(width: 1.0) do
link I18n.t("menus.back"), width: nil do link I18n.t("menus.back"), width: nil do
pop_state pop_state
end end
flow(fill: true)
button get_image("#{GAME_ROOT_PATH}/static/icons/settings_display.png"), image_width: 64, tip: I18n.t("settings.display") do button get_image("#{GAME_ROOT_PATH}/static/icons/settings_display.png"), image_width: 64, tip: I18n.t("settings.display") do
show_page(:display) show_page(:display)
end end
@@ -61,9 +63,12 @@ class IMICFPS
end end
end end
@page_container = stack(width: 1.0, height: 0.75, scroll: true) do @page_container = stack(width: 1.0, fill: true, scroll: true, padding: 10) do
end end
end end
stack(width: 0.25, height: 1.0) do
end
end end
# @categories.each do |category| # @categories.each do |category|
@@ -88,158 +93,146 @@ class IMICFPS
end end
def page_display def page_display
label "Display", text_size: 50 banner "Display", text_size: 50
label "Resolution" stack(width: 1.0, height: 128) do
flow do flow(width: 1.0) do
stack do tagline "Width", width: 96
label "Width" edit_line window.width.to_s, fill: true
label "Height"
end end
stack do
edit_line window.width.to_s flow(width: 1.0) do
edit_line window.height.to_s tagline "Height", width: 96
edit_line window.height.to_s, fill: true
end end
end end
check_box "Fullscreen", margin_top: 25, margin_bottom: 25 # check_box "Fullscreen", margin_top: 25, margin_bottom: 25, width: 1.0
stack do stack(width: 1.0, height: 128, margin_top: 20) do
longest_string = "Gamma Correction" flow(width: 1.0, fill: true) do
flow do tagline "Gamma Correction", width: 256
label "Gamma Correction".ljust(longest_string.length, " ") @display_gamma_correction = slider range: 0.0..1.0, value: 0.5, fill: true
@display_gamma_correction = slider range: 0.0..1.0, value: 0.5
@display_gamma_correction.subscribe(:changed) do |_sender, value| @display_gamma_correction.subscribe(:changed) do |_sender, value|
@display_gamma_correction_label.value = value.round(1).to_s @display_gamma_correction_label.value = value.round(1).to_s
end end
@display_gamma_correction_label = label "0.0" @display_gamma_correction_label = tagline "0.0"
end end
flow do
label "Brightness".ljust(longest_string.length, " ") flow(width: 1.0, fill: true) do
@display_brightness = slider range: 0.0..1.0, value: 0.5 tagline "Brightness", width: 256
@display_brightness = slider range: 0.0..1.0, value: 0.5, fill: true
@display_brightness.subscribe(:changed) do |_sender, value| @display_brightness.subscribe(:changed) do |_sender, value|
@display_brightness_label.value = value.round(1).to_s @display_brightness_label.value = value.round(1).to_s
end end
@display_brightness_label = label "0.0" @display_brightness_label = tagline "0.0"
end end
flow do
label "Contrast".ljust(longest_string.length, " ") flow(width: 1.0, fill: true) do
@display_contrast = slider range: 0.0..1.0, value: 0.5 tagline "Contrast", width: 256
@display_contrast = slider range: 0.0..1.0, value: 0.5, fill: true
@display_contrast.subscribe(:changed) do |_sender, value| @display_contrast.subscribe(:changed) do |_sender, value|
@display_contrast_label.value = value.round(1).to_s @display_contrast_label.value = value.round(1).to_s
end end
@display_contrast_label = label "0.0" @display_contrast_label = tagline "0.0"
end end
end end
end end
def page_audio def page_audio
label "Audio", text_size: 50 tagline "Audio", text_size: 50
longest_string = "Dialogue".length
volumes = %i[master sound_effects music dialogue] volumes = %i[master sound_effects music dialogue]
stack(width: 1.0) do stack(width: 1.0, height: 48 * volumes.count) do
volumes.each do |volume| volumes.each do |volume|
config_value = window.config.get(:options, :audio, :"volume_#{volume}") config_value = window.config.get(:options, :audio, :"volume_#{volume}")
flow(width: 1.0, margin_bottom: 10) do flow(width: 1.0, fill: true, margin_bottom: 10) do
flow(width: 0.25) do tagline volume.to_s.split("_").map(&:capitalize).join(" "), width: 172
label volume.to_s.split("_").map(&:capitalize).join(" ").ljust(longest_string, " ")
instance_variable_set(:"@volume_#{volume}", slider(range: 0.0..1.0, value: config_value, fill: true))
instance_variable_get(:"@volume_#{volume}").subscribe(:changed) do |_sender, value|
instance_variable_get(:"@volume_#{volume}_label").value = format("%03.2f%%", value * 100.0)
window.config[:options, :audio, :"volume_#{volume}"] = value
end end
flow(width: 0.5) do instance_variable_set(:"@volume_#{volume}_label", tagline(format("%03.2f%%", config_value * 100.0), width: 96, text_align: :right))
instance_variable_set(:"@volume_#{volume}", slider(range: 0.0..1.0, value: config_value, width: 1.0))
instance_variable_get(:"@volume_#{volume}").subscribe(:changed) do |_sender, value|
instance_variable_get(:"@volume_#{volume}_label").value = format("%03.2f%%", value * 100.0)
window.config[:options, :audio, :"volume_#{volume}"] = value
end
end
flow(width: 0.25) do
instance_variable_set(:"@volume_#{volume}_label", label(format("%03.2f%%", config_value * 100.0)))
end
end end
end end
end end
end end
def page_controls def page_controls
label "Controls", text_size: 50 tagline "Controls", text_size: 50
InputMapper.keymap.each do |key, values| InputMapper.keymap.each do |key, values|
flow do flow(width: 1.0, height: 64) do
label key.to_s tagline key.to_s, width: 0.5, max_width: 312
[values].flatten.each do |value| [values].flatten.each do |value|
if name = Gosu.button_name(value) unless (name = Gosu.button_name(value))
else
name = Gosu.constants.find { |const| Gosu.const_get(const) == value } name = Gosu.constants.find { |const| Gosu.const_get(const) == value }
name = name.to_s.capitalize.split("_").join(" ") if name name = name.to_s.capitalize.split("_").join(" ") if name
end end
button name
button name, fill: true
end end
end end
end end
end end
def page_graphics def page_graphics
label "Graphics", text_size: 50 tagline "Graphics", text_size: 50
longest_string = "Surface Effect Detail" check_box "V-Sync (Not Disableable, Yet.)", checked: true, enabled: false, width: 1.0
flow do flow(width: 1.0, height: 64) do
check_box "V-Sync (Not Disableable, Yet.)", checked: true, enabled: false tagline "Field of View", width: 128
end @fov = slider range: 70.0..110.0, fill: true
flow do
label "Field of View".ljust(longest_string.length, " ")
@fov = slider range: 70.0..110.0
@fov.subscribe(:changed) do |_sender, value| @fov.subscribe(:changed) do |_sender, value|
@fov_label.value = value.round.to_s @fov_label.value = value.round.to_s
end end
@fov_label = label "90.0" @fov_label = tagline "90.0"
end end
flow do flow(width: 1.0, height: 64) do
label "Detail".ljust(longest_string.length, " ") tagline "Detail", width: 128
list_box items: %i[high medium low], width: 250 list_box items: %i[high medium low], fill: true
end end
label "" advanced_mode = check_box "Advanced Settings", margin_top: 20, margin_bottom: 20
advanced_mode = check_box "Advanced Settings"
label ""
advanced_settings = stack width: 1.0 do |element| advanced_settings = stack(width: 1.0) do |element|
element.hide element.hide
stack do stack(width: 1.0, height: 64 * 7) do
flow do flow(width: 1.0, height: 64) do
label "Geometry Detail".ljust(longest_string.length, " ") tagline "Geometry Detail", width: 312
list_box items: %i[high medium low], width: 250 list_box items: %i[high medium low], fill: true
end end
flow do flow(width: 1.0, height: 64) do
label "Shadow Detail".ljust(longest_string.length, " ") tagline "Shadow Detail", width: 312
list_box items: %i[high medium low off], width: 250 list_box items: %i[high medium low off], fill: true
end end
flow do flow(width: 1.0, height: 64) do
label "Texture Detail".ljust(longest_string.length, " ") tagline "Texture Detail", width: 312
list_box items: %i[high medium low], width: 250 list_box items: %i[high medium low], fill: true
end end
flow do flow(width: 1.0, height: 64) do
label "Particle Detail".ljust(longest_string.length, " ") tagline "Particle Detail", width: 312
list_box items: %i[high medium low off], width: 250 list_box items: %i[high medium low off], fill: true
end end
flow do flow(width: 1.0, height: 64) do
label "Surface Effect Detail".ljust(longest_string.length, " ") tagline "Surface Effect Detail", width: 312
list_box items: %i[high medium low], width: 250 list_box items: %i[high medium low], fill: true
end end
flow do flow(width: 1.0, height: 64) do
label "Lighting Mode".ljust(longest_string.length, " ") tagline "Lighting Mode", width: 312
list_box items: %i[per_pixel per_vertex], width: 250 list_box items: %i[per_pixel per_vertex], fill: true
end end
flow do flow(width: 1.0, height: 64) do
label "Texture Filtering".ljust(longest_string.length, " ") tagline "Texture Filtering", width: 312
list_box items: [:none], width: 250 list_box items: [:none], fill: true
end end
end end
end end
@@ -251,12 +244,13 @@ class IMICFPS
end end
def page_multiplayer def page_multiplayer
label "Multiplayer", text_size: 50 tagline "Multiplayer", text_size: 50
flow do flow(width: 1.0, height: 64) do
label "Player Name" tagline "Player Name", width: 172
edit_line "player-#{SecureRandom.hex(2)}" edit_line "player-#{SecureRandom.hex(2)}", fill: true
end end
check_box "Show player names" check_box "Show player names"
end end
end end

View File

@@ -27,7 +27,6 @@ class IMICFPS
SettingsMenu.set_defaults SettingsMenu.set_defaults
@renderer = Renderer.new @renderer = Renderer.new
preload_default_shaders
@scene = TurnTableScene.new @scene = TurnTableScene.new
@overlay = Overlay.new @overlay = Overlay.new
@@ -38,20 +37,6 @@ class IMICFPS
end end
push_state(CyberarmEngine::IntroState, forward: Boot) push_state(CyberarmEngine::IntroState, forward: Boot)
@delta_time = Gosu.milliseconds
end
def preload_default_shaders
shaders = %w[g_buffer lighting]
shaders.each do |shader|
Shader.new(
name: shader,
includes_dir: "shaders/include",
vertex: "shaders/vertex/#{shader}.glsl",
fragment: "shaders/fragment/#{shader}.glsl"
)
end
end end
def input_hijack=(hijacker) def input_hijack=(hijacker)
@@ -88,8 +73,6 @@ class IMICFPS
@console.update if @show_console @console.update if @show_console
@overlay.update @overlay.update
SoundManager.update SoundManager.update
@delta_time = Gosu.milliseconds
end end
def close def close

View File

@@ -1,30 +0,0 @@
# version 330 core
layout(location = 0) out vec3 fragPosition;
layout (location = 1) out vec4 fragColor;
layout (location = 2) out vec3 fragNormal;
layout (location = 3) out vec3 fragUV;
in vec3 outPosition, outColor, outNormal, outUV, outFragPos, outCameraPos;
out vec4 outputFragColor;
flat in int outHasTexture;
uniform sampler2D diffuse_texture;
void main() {
vec3 result;
if (outHasTexture == 0) {
result = outColor;
} else {
result = texture(diffuse_texture, outUV.xy).xyz + 0.25;
}
fragPosition = outPosition;
fragColor = vec4(result, 1.0);
fragNormal = outNormal;
fragUV = outUV;
float gamma = 2.2;
outputFragColor.rgb = pow(fragColor.rgb, vec3(1.0 / gamma));
}

View File

@@ -1,63 +0,0 @@
#version 330 core
out vec4 FragColor;
@include "light_struct"
const int DIRECTIONAL = 0;
const int POINT = 1;
const int SPOT = 2;
in vec2 outTexCoords;
flat in Light outLight[1];
uniform sampler2D diffuse, position, texcoord, normal, depth;
vec4 directionalLight(Light light) {
vec3 norm = normalize(texture(normal, outTexCoords).rgb);
vec3 diffuse_color = texture(diffuse, outTexCoords).rgb;
vec3 fragPos = texture(position, outTexCoords).rgb;
vec3 lightDir = normalize(light.position - fragPos);
float diff = max(dot(norm, lightDir), 0);
vec3 _ambient = light.ambient;
vec3 _diffuse = light.diffuse * diff;
vec3 _specular = light.specular;
return vec4(_diffuse + _ambient + _specular, 1.0);
}
vec4 pointLight(Light light) {
return vec4(0.25, 0.25, 0.25, 1);
}
vec4 spotLight(Light light) {
return vec4(0.5, 0.5, 0.5, 1);
}
vec4 calculateLighting(Light light) {
vec4 result;
// switch(light.type) {
// case DIRECTIONAL: {
// result = directionalLight(light);
// }
// case SPOT: {
// result = spotLight(light);
// }
// default: {
// result = pointLight(light);
// }
// }
if (light.type == DIRECTIONAL) {
result = directionalLight(light);
} else {
result = pointLight(light);
}
return result;
}
void main() {
FragColor = texture(diffuse, outTexCoords) * calculateLighting(outLight[0]);
}

View File

@@ -1,11 +0,0 @@
struct Light {
int type;
vec3 direction;
vec3 position;
vec3 diffuse;
vec3 ambient;
vec3 specular;
float intensity;
};

View File

@@ -1,28 +0,0 @@
# version 330 core
layout(location = 0) in vec3 inPosition;
layout(location = 1) in vec3 inColor;
layout(location = 2) in vec3 inNormal;
layout(location = 3) in vec3 inUV;
uniform mat4 projection, view, model;
uniform int hasTexture;
uniform vec3 cameraPos;
out vec3 outPosition, outColor, outNormal, outUV;
out vec3 outFragPos, outViewPos, outCameraPos;
flat out int outHasTexture;
void main() {
// projection * view * model * position
outPosition = inPosition;
outColor = inColor;
outNormal= normalize(transpose(inverse(mat3(model))) * inNormal);
outUV = inUV;
outHasTexture = hasTexture;
outCameraPos = cameraPos;
outFragPos = vec3(model * vec4(inPosition, 1.0));
gl_Position = projection * view * model * vec4(inPosition, 1.0);
}

View File

@@ -1,17 +0,0 @@
#version 330 core
@include "light_struct"
layout (location = 0) in vec3 inPosition;
layout (location = 1) in vec2 inTexCoords;
uniform sampler2D diffuse, position, texcoord, normal, depth;
uniform Light light[1];
out vec2 outTexCoords;
flat out Light outLight[1];
void main() {
gl_Position = vec4(inPosition.x, inPosition.y, inPosition.z, 1.0);
outTexCoords = inTexCoords;
outLight = light;
}