7 Commits

27 changed files with 172 additions and 350 deletions

View File

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

View File

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

View File

@@ -3,7 +3,7 @@
component(:vehicle) # Generic, Weapon
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)
# event.player.enter_vehicle
# elsif event.player.driving?(event.entity) or event.player.passenger?(event.entity)

View File

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

View File

@@ -77,12 +77,12 @@ class IMICFPS
when "up"
input = InputMapper.get(data.last.to_sym)
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"
input = InputMapper.get(data.last.to_sym)
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"
@camera.orientation.z = data[1].to_f

View File

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

View File

@@ -19,7 +19,7 @@ class IMICFPS
return unless @text_input
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,
@background
)
@@ -44,11 +44,11 @@ class IMICFPS
def update
@deliver_to_text.text = "#{@deliver_to}: "
@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.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
def button_down(id)

View File

@@ -26,7 +26,7 @@ class IMICFPS
def available_light
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}"
end
end

View File

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

View File

@@ -33,7 +33,7 @@ class IMICFPS
if window.config.get(:options, :fps)
create_slot "FPS: #{Gosu.fps}"
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

View File

@@ -5,7 +5,7 @@ class IMICFPS
attr_reader :camera, :entities, :lights
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 = []
@lights = []

View File

@@ -12,7 +12,7 @@ class IMICFPS
end
def map
$window.director.map
CyberarmEngine::Window.instance.director.map
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_controller = CameraController.new(camera: @camera, entity: nil, mode: :fpv)
label @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
@camera_position = label "", text_border: true, text_border_color: Gosu::Color::BLACK
@camera_orientation = label "", text_border: true, text_border_color: Gosu::Color::BLACK
banner @manifest.name, text_size: 50, text_border: true, text_border_color: Gosu::Color::BLACK
tagline @manifest.model, text_border: true, text_border_color: Gosu::Color::BLACK
@camera_position = tagline "", text_border: true, text_border_color: Gosu::Color::BLACK
@camera_orientation = tagline "", text_border: true, text_border_color: Gosu::Color::BLACK
button "Back" do
pop_state

View File

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

View File

@@ -32,7 +32,7 @@ class IMICFPS
button "New Map", width: 0.64
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
@maps.each do |map|
button map.metadata.name do

View File

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

View File

@@ -19,12 +19,12 @@ class IMICFPS
case arguments.last
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"
var = $window.config[:options, :fps] = true
var = CyberarmEngine::Window.instance.config[:options, :fps] = true
console.stdin("fps => #{Console::Style.highlight(var)}")
when "off"
var = $window.config[:options, :fps] = false
var = CyberarmEngine::Window.instance.config[:options, :fps] = false
console.stdin("fps => #{Console::Style.highlight(var)}")
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')}.")

View File

@@ -12,7 +12,7 @@ class IMICFPS
end
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
def handle(arguments, console)
@@ -23,12 +23,12 @@ class IMICFPS
case arguments.last
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"
var = $window.config[:options, command] = true
var = CyberarmEngine::Window.instance.config[:options, command] = true
console.stdin("#{command} => #{Console::Style.highlight(var)}")
when "off"
var = $window.config[:options, command] = false
var = CyberarmEngine::Window.instance.config[:options, command] = false
console.stdin("#{command} => #{Console::Style.highlight(var)}")
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')}.")

View File

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

View File

@@ -55,29 +55,29 @@ class IMICFPS
background i.even? ? 0x55000000 : 0x55ff5500
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
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
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
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
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
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
flow width: 1.0, height: 0.25 do
label "Name"
tagline "Name"
name = edit_line "", margin_right: 20
button "Join", width: 0.25 do
pp name.value

View File

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

View File

@@ -27,7 +27,6 @@ class IMICFPS
SettingsMenu.set_defaults
@renderer = Renderer.new
preload_default_shaders
@scene = TurnTableScene.new
@overlay = Overlay.new
@@ -38,20 +37,6 @@ class IMICFPS
end
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
def input_hijack=(hijacker)
@@ -88,8 +73,6 @@ class IMICFPS
@console.update if @show_console
@overlay.update
SoundManager.update
@delta_time = Gosu.milliseconds
end
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;
}