Restructured 'objects' folder into a meaningful 'assets' folder, added 'war_factory' model, refactored GameObject#bind_model and ModelLoader to understand the restructuring.

This commit is contained in:
2019-02-17 10:50:08 -06:00
parent 3f7c5e992d
commit 9f6f330202
45 changed files with 3899 additions and 2442 deletions

View File

@@ -0,0 +1,2 @@
name: "biped"
model: "biped.obj"

View File

@@ -1,8 +1,8 @@
# Blender MTL File: 'biped.blend' # Blender MTL File: 'None'
# Material Count: 5 # Material Count: 5
newmtl eye newmtl eye
Ns 96.078431 Ns 94.117647
Ka 1.000000 1.000000 1.000000 Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000 Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000 Ks 0.500000 0.500000 0.500000
@@ -12,7 +12,7 @@ d 1.000000
illum 2 illum 2
newmtl pants newmtl pants
Ns 96.078431 Ns 94.117647
Ka 1.000000 1.000000 1.000000 Ka 1.000000 1.000000 1.000000
Kd 0.068996 0.139143 0.640000 Kd 0.068996 0.139143 0.640000
Ks 0.500000 0.500000 0.500000 Ks 0.500000 0.500000 0.500000
@@ -22,7 +22,7 @@ d 1.000000
illum 2 illum 2
newmtl shirt newmtl shirt
Ns 96.078431 Ns 94.117647
Ka 1.000000 1.000000 1.000000 Ka 1.000000 1.000000 1.000000
Kd 0.006647 0.280444 0.000000 Kd 0.006647 0.280444 0.000000
Ks 0.500000 0.500000 0.500000 Ks 0.500000 0.500000 0.500000
@@ -32,7 +32,7 @@ d 1.000000
illum 2 illum 2
newmtl shoe newmtl shoe
Ns 96.078431 Ns 94.117647
Ka 1.000000 1.000000 1.000000 Ka 1.000000 1.000000 1.000000
Kd 0.134359 0.134359 0.134359 Kd 0.134359 0.134359 0.134359
Ks 0.500000 0.500000 0.500000 Ks 0.500000 0.500000 0.500000
@@ -42,7 +42,7 @@ d 1.000000
illum 2 illum 2
newmtl skin newmtl skin
Ns 96.078431 Ns 94.117647
Ka 1.000000 1.000000 1.000000 Ka 1.000000 1.000000 1.000000
Kd 0.110067 0.069785 0.027733 Kd 0.110067 0.069785 0.027733
Ks 0.500000 0.500000 0.500000 Ks 0.500000 0.500000 0.500000

File diff suppressed because it is too large Load Diff

View File

@@ -10,4 +10,4 @@ Ke 0.000000 0.000000 0.000000
Ni 1.000000 Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
map_Kd /home/cyberarm/Code/i-mic-fps/blends/randomish_terrain.png map_Kd assets/base/randomish_terrain/textures/randomish_terrain_ao.png

View File

@@ -0,0 +1,3 @@
---
name: "randomish_terrain"
model: "randomish_terrain.obj"

View File

Before

Width:  |  Height:  |  Size: 250 KiB

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

View File

@@ -10,4 +10,4 @@ Ke 0.000000 0.000000 0.000000
Ni 1.000000 Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
map_Kd objects/skydome_next.png map_Kd assets/base/skydome/textures/skydome_next.png

View File

@@ -0,0 +1,2 @@
name: "skydome"
model: "skydome.obj"

View File

Before

Width:  |  Height:  |  Size: 379 KiB

After

Width:  |  Height:  |  Size: 379 KiB

View File

Before

Width:  |  Height:  |  Size: 5.2 MiB

After

Width:  |  Height:  |  Size: 5.2 MiB

View File

View File

@@ -1,8 +1,8 @@
# Blender MTL File: 'tree.blend' # Blender MTL File: 'None'
# Material Count: 2 # Material Count: 2
newmtl Material newmtl Material.002
Ns 96.078431 Ns 94.117647
Ka 1.000000 1.000000 1.000000 Ka 1.000000 1.000000 1.000000
Kd 0.181267 0.106319 0.092156 Kd 0.181267 0.106319 0.092156
Ks 0.500000 0.500000 0.500000 Ks 0.500000 0.500000 0.500000
@@ -11,8 +11,8 @@ Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
newmtl leaf newmtl leaf.001
Ns 96.078431 Ns 94.117647
Ka 1.000000 1.000000 1.000000 Ka 1.000000 1.000000 1.000000
Kd 0.127997 0.491692 0.000000 Kd 0.127997 0.491692 0.000000
Ks 0.500000 0.500000 0.500000 Ks 0.500000 0.500000 0.500000

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
name: "tree"
model: "tree.obj"

View File

@@ -0,0 +1,42 @@
# Blender MTL File: 'war_factory.blend'
# Material Count: 4
newmtl Material
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.527055 0.242208
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl door
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.000000 0.006044 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl garage
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.358382 0.358382 0.358382
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl pipes
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.336018 0.296986 0.261323
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
name: "war_factory"
model: "war_factory.obj"

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
blends/war_factory.blend Normal file

Binary file not shown.

BIN
blends/war_factory.blend1 Normal file

Binary file not shown.

View File

@@ -1,4 +1,5 @@
require "fiddle" require "fiddle"
require "yaml"
require "opengl" require "opengl"
require "glu" require "glu"
@@ -94,7 +95,7 @@ require_relative "lib/wavefront/model"
require_relative "lib/window" require_relative "lib/window"
MODEL_METER_SCALE = 0.001 # Objects exported from blender using the millimeter object scale will be close to 1 GL unit MODEL_METER_SCALE = 1.0 # Objects exported from blender using the millimeter object scale will be close to 1 GL unit
if ARGV.join.include?("--profile") if ARGV.join.include?("--profile")

View File

@@ -1,4 +1,8 @@
class IMICFPS class IMICFPS
def self.assets_path
File.expand_path("./../../assets", __FILE__)
end
module CommonMethods module CommonMethods
def window; $window; end def window; $window; end

View File

@@ -16,7 +16,7 @@ class IMICFPS
object.debug_color = Color.new(1.0,0.0,0.0) object.debug_color = Color.new(1.0,0.0,0.0)
b.debug_color = Color.new(1.0,0.0,0.0) b.debug_color = Color.new(1.0,0.0,0.0)
@game_state.game_objects.delete(object) unless object.is_a?(Player) # @game_state.game_objects.delete(object) unless object.is_a?(Player)
puts "#{object} is intersecting #{b}" if object.is_a?(Player) puts "#{object} is intersecting #{b}" if object.is_a?(Player)
else else
object.debug_color = Color.new(0,1,0) object.debug_color = Color.new(0,1,0)
@@ -31,4 +31,4 @@ class IMICFPS
# @aabb_tree.rebuild # @aabb_tree.rebuild
end end
end end
end end

View File

@@ -43,7 +43,9 @@ class IMICFPS
return self return self
end end
def bind_model(model) def bind_model(package, name)
model = ModelLoader.new(manifest_file: IMICFPS.assets_path + "/#{package}/#{name}/#{name}.yaml", game_object: @dummy_game_object)
raise "model isn't a model!" unless model.is_a?(ModelLoader) raise "model isn't a model!" unless model.is_a?(ModelLoader)
@bound_model = model @bound_model = model
@bound_model.model.game_object = self @bound_model.model.game_object = self

View File

@@ -7,7 +7,7 @@ class IMICFPS
attr_reader :name, :bound_model, :first_person_view attr_reader :name, :bound_model, :first_person_view
def setup def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/biped.obj", game_object: self)) bind_model("base", "biped")
@speed = 2.5 # meter's per second @speed = 2.5 # meter's per second
@running_speed = 6.8 # meter's per second @running_speed = 6.8 # meter's per second
@old_speed = @speed @old_speed = @speed

View File

@@ -1,7 +1,7 @@
class IMICFPS class IMICFPS
class Skydome < GameObject class Skydome < GameObject
def setup def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/skydome.obj", game_object: self)) bind_model("base", "skydome")
end end
def draw def draw

View File

@@ -1,7 +1,7 @@
class IMICFPS class IMICFPS
class Terrain < GameObject class Terrain < GameObject
def setup def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/randomish_terrain.obj", game_object: self)) bind_model("base", "randomish_terrain")
# bind_model(ModelLoader.new(type: :obj, file_path: "/home/cyberarm/Documents/blends/untitled.obj", game_object: self)) # bind_model(ModelLoader.new(type: :obj, file_path: "/home/cyberarm/Documents/blends/untitled.obj", game_object: self))
self.scale = 1 self.scale = 1
@nearest_vertex_lookup = {} @nearest_vertex_lookup = {}

View File

@@ -1,7 +1,7 @@
class IMICFPS class IMICFPS
class TestObject < GameObject class TestObject < GameObject
def setup def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/sponza.obj", game_object: self)) bind_model("base", "war_factory")
end end
end end
end end

View File

@@ -1,13 +1,15 @@
class IMICFPS class IMICFPS
class Tree < GameObject class Tree < GameObject
def setup def setup
bind_model(ModelLoader.new(type: :obj, file_path: "objects/tree.obj", game_object: self)) bind_model("base", "tree")
vert = @terrain.find_nearest_vertex(self, 4.5) vert = @terrain.find_nearest_vertex(self, 4.5)
if vert if vert
self.x = vert.x self.x = vert.x
self.y = vert.y self.y = vert.y
self.z = vert.z self.z = vert.z
end end
# @y_rotation += rand(1..100)
end end
# def update # def update

View File

@@ -8,10 +8,13 @@ class IMICFPS
attr_reader :model, :name, :debug_color attr_reader :model, :name, :debug_color
def initialize(type:, file_path:, game_object: nil) def initialize(manifest_file:, game_object: nil)
@type = type @manifest = YAML.load(File.read(manifest_file))
@file_path = file_path pp @manifest
@name = file_path.split("/").last.split(".").first @file_path = File.expand_path("./../model/", manifest_file) + "/#{@manifest["model"]}"
@name = @manifest["name"]
@type = File.basename(@file_path).split(".").last.to_sym
@debug_color = Color.new(0.0, 1.0, 0.0) @debug_color = Color.new(0.0, 1.0, 0.0)
@model = nil @model = nil

View File

@@ -14,6 +14,8 @@ class IMICFPS
Tree.new(x: rand(@terrain.width)-(@terrain.width/2.0), z: rand(@terrain.depth)-(@terrain.depth/2.0), terrain: @terrain, game_state: self) Tree.new(x: rand(@terrain.width)-(@terrain.width/2.0), z: rand(@terrain.depth)-(@terrain.depth/2.0), terrain: @terrain, game_state: self)
end end
TestObject.new(terrain: @terrain, game_state: self, scale: 1.0)
@player = Player.new(x: 1, y: 0, z: -1, terrain: @terrain, game_state: self) @player = Player.new(x: 1, y: 0, z: -1, terrain: @terrain, game_state: self)
@camera = Camera.new(x: 0, y: -2, z: 1) @camera = Camera.new(x: 0, y: -2, z: 1)
@camera.attach_to(@player) @camera.attach_to(@player)
@@ -142,4 +144,4 @@ eos
puts 'Bye' puts 'Bye'
end end
end end
end end

View File

@@ -10,10 +10,10 @@ class IMICFPS
@dummy_game_object = nil @dummy_game_object = nil
@assets = [] @assets = []
@asset_index = 0 @asset_index = 0
add_asset(:obj, "objects/randomish_terrain.obj") add_asset(:model, "base", "randomish_terrain")
add_asset(:obj, "objects/skydome.obj") add_asset(:model, "base", "skydome")
add_asset(:obj, "objects/tree.obj") add_asset(:model, "base", "tree")
add_asset(:obj, "objects/biped.obj") add_asset(:model, "base", "biped")
# Currently broken # Currently broken
# Shader.new(name: "lighting", vertex_file: "shaders/vertex/lighting.glsl", fragment_file: "shaders/fragment/lighting.glsl") # Shader.new(name: "lighting", vertex_file: "shaders/vertex/lighting.glsl", fragment_file: "shaders/fragment/lighting.glsl")
@@ -46,7 +46,13 @@ class IMICFPS
@cycled = false @cycled = false
hash = @assets[@asset_index] hash = @assets[@asset_index]
ModelLoader.new(type: hash[:type], file_path: hash[:path], game_object: @dummy_game_object) case hash[:type]
when :model
ModelLoader.new(manifest_file: IMICFPS.assets_path + "/#{hash[:package]}/#{hash[:name]}/#{hash[:name]}.yaml", game_object: @dummy_game_object)
# when :shader
else
warn "Unknown asset: #{hash}"
end
@asset_index+=1 @asset_index+=1
end end
@@ -60,14 +66,14 @@ class IMICFPS
@lock = true @lock = true
end end
else else
@state.text = "Loading #{@assets[@asset_index][:path].split('/').last}..." @state.text = "Loading #{@assets[@asset_index][:name].split('/').last}..."
@state.x = (window.width/2)-(@state.width/2) @state.x = (window.width/2)-(@state.width/2)
@cycled = true @cycled = true
end end
end end
def add_asset(type, path) def add_asset(type, package, name)
@assets << {type: type, path: path} @assets << {type: type, package: package, name: name}
end end
def progressbar(x = window.width/4, y = window.height - 104) def progressbar(x = window.width/4, y = window.height - 104)

View File

@@ -14,7 +14,7 @@ class IMICFPS
end end
def set_texture(texture_path) def set_texture(texture_path)
# puts "#{name} texture #{texture_path}" puts "#{name} texture #{texture_path}"
@texture = Gosu::Image.new(texture_path, retro: false) @texture = Gosu::Image.new(texture_path, retro: false)
array_of_pixels = @texture.to_blob array_of_pixels = @texture.to_blob

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +0,0 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl Material.001
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd objects/skydome.png

View File

@@ -1,52 +0,0 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
mtllib cube.mtl
o Cube_Cube.001
v -999.999939 999.999878 1000.000000
v -999.999939 -999.999878 -1000.000000
v -999.999939 -1000.000000 999.999878
v -999.999939 1000.000000 -999.999878
v 999.999939 -999.999878 -1000.000000
v 999.999939 1000.000000 -999.999878
v 999.999939 -1000.000000 999.999878
v 999.999939 999.999878 1000.000000
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.576230
vt 0.074230 0.927739
vt 0.074230 0.576230
vt 0.425739 0.927739
vt 0.425739 0.927739
vt 0.425739 0.927739
vt 0.425739 0.927739
vt 0.425739 0.927739
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
vn 0.0000 1.0000 0.0000
usemtl Material.001
s 1
f 1/1/1 2/2/1 3/3/1
f 4/4/2 5/5/2 2/6/2
f 6/7/3 7/8/3 5/9/3
f 8/10/4 3/11/4 7/12/4
f 5/13/5 3/11/5 2/6/5
f 4/4/6 8/14/6 6/15/6
f 1/1/1 4/16/1 2/2/1
f 4/4/2 6/17/2 5/5/2
f 6/7/3 8/18/3 7/8/3
f 8/10/4 1/19/4 3/11/4
f 5/13/5 7/20/5 3/11/5
f 4/4/6 1/19/6 8/14/6

View File

@@ -1,11 +0,0 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2
map_Kd objects/skydome.png

View File

@@ -1,17 +0,0 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
mtllib plane.mtl
o Plane
v -999.999939 0.000000 999.999939
v 999.999939 0.000000 999.999939
v -999.999939 0.000000 -999.999939
v 999.999939 0.000000 -999.999939
vt 0.395761 0.622989
vt 0.116739 0.902011
vt 0.116739 0.622989
vt 0.395761 0.902011
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 2/1/1 3/2/1 1/3/1
f 2/1/1 4/4/1 3/2/1

File diff suppressed because it is too large Load Diff