blackbook3d 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +341 -0
  3. data/README.md +92 -0
  4. data/SETUP.md +70 -0
  5. data/data/assets/Texture/A011a.tga +0 -0
  6. data/data/assets/untitled.awp3d +0 -0
  7. data/data/cube.mtl +12 -0
  8. data/data/cube.obj +246 -0
  9. data/data/cube.raw +12 -0
  10. data/data/engine_conf.json +9 -0
  11. data/data/fighter.raw +19198 -0
  12. data/data/font/100.raw +78 -0
  13. data/data/font/101.raw +99 -0
  14. data/data/font/102.raw +58 -0
  15. data/data/font/103.raw +258 -0
  16. data/data/font/104.raw +55 -0
  17. data/data/font/105.raw +48 -0
  18. data/data/font/106.raw +72 -0
  19. data/data/font/107.raw +6 -0
  20. data/data/font/108.raw +2 -0
  21. data/data/font/109.raw +105 -0
  22. data/data/font/110.raw +55 -0
  23. data/data/font/111.raw +96 -0
  24. data/data/font/112.raw +78 -0
  25. data/data/font/113.raw +78 -0
  26. data/data/font/114.raw +53 -0
  27. data/data/font/115.raw +132 -0
  28. data/data/font/116.raw +56 -0
  29. data/data/font/117.raw +54 -0
  30. data/data/font/118.raw +5 -0
  31. data/data/font/119.raw +11 -0
  32. data/data/font/120.raw +10 -0
  33. data/data/font/121.raw +6 -0
  34. data/data/font/122.raw +6 -0
  35. data/data/font/33.raw +118 -0
  36. data/data/font/37.raw +194 -0
  37. data/data/font/38.raw +200 -0
  38. data/data/font/39.raw +4 -0
  39. data/data/font/40.raw +48 -0
  40. data/data/font/41.raw +48 -0
  41. data/data/font/42.raw +226 -0
  42. data/data/font/43.raw +10 -0
  43. data/data/font/45.raw +2 -0
  44. data/data/font/46.raw +46 -0
  45. data/data/font/47.raw +2 -0
  46. data/data/font/48.raw +96 -0
  47. data/data/font/49.raw +2 -0
  48. data/data/font/50.raw +87 -0
  49. data/data/font/51.raw +145 -0
  50. data/data/font/52.raw +15 -0
  51. data/data/font/53.raw +76 -0
  52. data/data/font/54.raw +121 -0
  53. data/data/font/55.raw +4 -0
  54. data/data/font/56.raw +194 -0
  55. data/data/font/57.raw +133 -0
  56. data/data/font/61.raw +4 -0
  57. data/data/font/63.raw +117 -0
  58. data/data/font/65.raw +11 -0
  59. data/data/font/66.raw +108 -0
  60. data/data/font/67.raw +96 -0
  61. data/data/font/68.raw +54 -0
  62. data/data/font/69.raw +10 -0
  63. data/data/font/70.raw +8 -0
  64. data/data/font/71.raw +100 -0
  65. data/data/font/72.raw +10 -0
  66. data/data/font/73.raw +2 -0
  67. data/data/font/74.raw +39 -0
  68. data/data/font/75.raw +9 -0
  69. data/data/font/76.raw +4 -0
  70. data/data/font/77.raw +13 -0
  71. data/data/font/78.raw +8 -0
  72. data/data/font/79.raw +96 -0
  73. data/data/font/80.raw +56 -0
  74. data/data/font/81.raw +124 -0
  75. data/data/font/82.raw +94 -0
  76. data/data/font/83.raw +120 -0
  77. data/data/font/84.raw +6 -0
  78. data/data/font/85.raw +76 -0
  79. data/data/font/86.raw +5 -0
  80. data/data/font/87.raw +11 -0
  81. data/data/font/88.raw +10 -0
  82. data/data/font/89.raw +7 -0
  83. data/data/font/90.raw +6 -0
  84. data/data/font/91.raw +6 -0
  85. data/data/font/93.raw +6 -0
  86. data/data/font/94.raw +5 -0
  87. data/data/font/95.raw +2 -0
  88. data/data/font/97.raw +174 -0
  89. data/data/font/98.raw +100 -0
  90. data/data/font/99.raw +96 -0
  91. data/data/ground.raw +12 -0
  92. data/data/man.mtl +12 -0
  93. data/data/man.obj +7547 -0
  94. data/data/robo.mtl +11 -0
  95. data/data/robo.obj +42065 -0
  96. data/data/space.json +49 -0
  97. data/data/sphere.raw +1216 -0
  98. data/data/texture/Charcoal-2.jpg +0 -0
  99. data/data/texture/man.png +0 -0
  100. data/data/texture/man.tif +0 -0
  101. data/data/texture/t.jpg +0 -0
  102. data/data/texture/wood.jpg +0 -0
  103. data/data/texture/wood.png +0 -0
  104. data/data/texture/x.jpg +0 -0
  105. data/data/untitled.raw +124 -0
  106. data/data/w.raw +12474 -0
  107. data/data/wings.raw +45670 -0
  108. data/lib/BlackBook/anim.rb +184 -0
  109. data/lib/BlackBook/b3dobject.rb +475 -0
  110. data/lib/BlackBook/base.rb +79 -0
  111. data/lib/BlackBook/camera.rb +202 -0
  112. data/lib/BlackBook/color.rb +29 -0
  113. data/lib/BlackBook/constants.rb +327 -0
  114. data/lib/BlackBook/engine.rb +172 -0
  115. data/lib/BlackBook/functions.rb +650 -0
  116. data/lib/BlackBook/light.rb +91 -0
  117. data/lib/BlackBook/logger.rb +86 -0
  118. data/lib/BlackBook/material.rb +98 -0
  119. data/lib/BlackBook/registry.rb +71 -0
  120. data/lib/BlackBook/space.rb +396 -0
  121. data/lib/BlackBook/stime.rb +64 -0
  122. data/lib/Plugins/string_color.rb +74 -0
  123. data/lib/blackbook/version.rb +5 -0
  124. data/lib/blackbook.rb +52 -0
  125. data/lib/plugins.rb +32 -0
  126. data/lib/ui/button.rb +115 -0
  127. data/lib/ui/edit.rb +105 -0
  128. data/lib/ui/text.rb +284 -0
  129. data/lib/ui/ui.rb +88 -0
  130. data/lib/ui/ui_element.rb +45 -0
  131. data/lib/ui/window.rb +138 -0
  132. data/lib/ui.rb +30 -0
  133. data/lib/zipfile.rb +27 -0
  134. metadata +254 -0
@@ -0,0 +1,172 @@
1
+ ##############################################################################
2
+ # BlackBook 3D Engine
3
+ # Copyright (C) 2015 Sinan ISLEKDEMIR
4
+ #
5
+ # This program is free software; you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation; either version 2 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License along
16
+ # with this program; if not, write to the Free Software Foundation, Inc.,
17
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ##############################################################################
19
+
20
+ ################################################################
21
+ # Project BlackBook
22
+ # Lead Engineer: Sinan ISLEKDEMIR
23
+ # Simulation Engine Ruby Sources
24
+ ################################################################
25
+
26
+ # simulator starter
27
+ require 'glfw'
28
+ require 'opengl'
29
+
30
+ require 'BlackBook/base'
31
+ require 'ui/ui'
32
+
33
+ module BlackBook
34
+ #
35
+ # BlackBook Engine Class.
36
+ # Creates and handles OpenGL Window - GLF3
37
+ #
38
+ # @author [sinan islekdemir]
39
+ #
40
+ # @attr window_width [Integer] Window Width
41
+ # @attr window_height [Integer] Window Height
42
+ # @attr title [String] Window Title
43
+ # @attr w_m [Integer] Window - Viewport Width Multiplier
44
+ # @attr h_m [Integer] Window - Viewport Height Multiplier
45
+ # @attr left [Integer] Left Mouse Button
46
+ # @attr right [Integer] Right Mouse Button
47
+ # @attr middle [Integer] Middle Mouse Button
48
+ # @attr main_window [Glfw::Window] Main GLFW Window
49
+ # @attr spaces [Array] Array Of BBSpace
50
+ #
51
+ class Engine < Base
52
+ attr_accessor :window_width, :window_height, :title,
53
+ :left, :right, :middle, :main_window, :spaces,
54
+ :viewport_x, :viewport_y, :fullscreen
55
+
56
+ #
57
+ # Initialize BBEngine
58
+ # @param w [Integer] [description]
59
+ # @param h [Integer] [description]
60
+ # @param title [String] [description]
61
+ # @param w_m = 1 [Integer] Window - Viewport Multiplier for Width
62
+ # @param h_m = 1 [Integer] Window - Viewport Multiplier for Height
63
+ # @param fs = false [Boolean] fullscreen
64
+ #
65
+ # @return [Boolean] Success
66
+ def initialize(width, height, title, w_m = 1, h_m = 1, fs = false)
67
+ raise "#{title} must be String" unless title.is_a? String
68
+ [width, height, w_m, h_m].map do |x|
69
+ raise "#{x} must be Integer" unless x.is_a? Integer
70
+ end
71
+ super
72
+ GLFW.init
73
+ @window_width = width
74
+ @window_height = height
75
+ @title = title
76
+ @left = 0
77
+ @right = 0
78
+ @middle = 0
79
+ @spaces = []
80
+ @fullscreen = (fs==true ? GLFW::Monitor.primary : nil)
81
+ engine_start
82
+ return true
83
+ end
84
+
85
+ #
86
+ # Start Engine and Create the main window
87
+ #
88
+ # @return [Boolean]
89
+ def engine_start
90
+ GLFW::Window.hint(GLFW::HINT_SAMPLES, 4)
91
+ @main_window = if @fullscreen
92
+ GLFW::Window.new(@window_width, @window_height, @title, @fullscreen)
93
+ else
94
+ GLFW::Window.new(@window_width, @window_height, @title)
95
+ end
96
+ @viewport_x = @main_window.framebuffer_size.width
97
+ @viewport_y = @main_window.framebuffer_size.height
98
+ raise 'Unable to create window' if @main_window.nil?
99
+ @main_window.on_close do
100
+ @main_window.close
101
+ end
102
+ @main_window.on_mouse_button do |button, action, mods|
103
+ @right = button
104
+ @left = action
105
+ @middle = mods
106
+ end
107
+ @main_window.on_char do |char|
108
+ keypress(char.chr)
109
+ end
110
+ @main_window.on_framebuffer_resize do |width, height|
111
+ @viewport_x = width
112
+ @viewport_y = height
113
+ GL.Viewport(0, 0, width, height)
114
+ on_resize(width, height)
115
+ end
116
+ return true
117
+ end
118
+
119
+ def on_resize(width, height)
120
+ # If subclass has @space, resize it
121
+ @space.resize(width, height) if defined?(@space) && @space
122
+ # Also resize all spaces in @spaces array
123
+ @spaces.each { |space| space.resize(width, height) } if @spaces
124
+ end
125
+
126
+ def keypress(chr)
127
+ end
128
+
129
+ #
130
+ # Render Meta Func.
131
+ #
132
+ # @return nil
133
+ def render
134
+ end
135
+
136
+ # Mouse move meta func
137
+ # @return [nil]
138
+ def mouse_move(x, y, right, left, middle)
139
+ end
140
+
141
+ #
142
+ # Engine Main Loop
143
+ #
144
+ # @return [Boolean] Success
145
+ def engine_loop
146
+ @main_window.make_current
147
+ until @main_window.closing?
148
+ pos = @main_window.cursor_pos
149
+ mouse_move(
150
+ pos.x,
151
+ pos.y,
152
+ @right,
153
+ @left,
154
+ @middle)
155
+ GL.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT)
156
+ render
157
+ @main_window.swap_buffers
158
+ GLFW.poll_events
159
+ end
160
+ engine_end
161
+ end
162
+
163
+ #
164
+ # Engine End - Window destroyer
165
+ #
166
+ # @return [Boolean] Success
167
+ def engine_end
168
+ @main_window.destroy
169
+ GLFW.terminate
170
+ end
171
+ end
172
+ end