summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Rakefile9
-rw-r--r--test/src/main.rb107
-rw-r--r--test/src/mode/demo.rb113
-rw-r--r--test/src/mode/title.rb49
-rw-r--r--test/textures/menu.qoibin0 -> 849 bytes
5 files changed, 196 insertions, 82 deletions
diff --git a/test/Rakefile b/test/Rakefile
index c449fad..c219bca 100644
--- a/test/Rakefile
+++ b/test/Rakefile
@@ -13,11 +13,18 @@
# limitations under the License.
OBJ = 'test'
+SOURCE_DIR = ENV['DESTDIR'] || ''
+
+RB_LIBS_PATH = "#{SOURCE_DIR}/usr/local/share/candy_gear/lib"
+RB_LIBS = [
+ 'menu'
+]
RB_FILES = FileList['src/**/*.rb']
task :build do
- rb_files = RB_FILES.inject('') {_1 + "#{_2} "}
+ rb_files = RB_FILES.inject('') {_1 + "#{_2} "} +
+ RB_LIBS.inject('') {_1 + "#{RB_LIBS_PATH}/#{_2}.rb "}
`mrbc -g -o #{OBJ}.mrb #{rb_files}`
end
diff --git a/test/src/main.rb b/test/src/main.rb
index bc28ffc..98dcb9f 100644
--- a/test/src/main.rb
+++ b/test/src/main.rb
@@ -12,104 +12,49 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-CAMERA_ROTATION_SPEED = Math::PI/45;
-BOX_ROTATION_SPEED = Math::PI/180;
-TRANSLATION_SPEED = 0.5;
+def change_mode(new_mode)
+ $next_stage = new_mode;
+ $quit_stage = true;
+end
def config()
CandyGear.game_name = "Candy Gear Test";
CandyGear::Graphic.display_width = 1280;
CandyGear::Graphic.display_height = 720;
+ CandyGear::Graphic.fps = 60;
end
def init()
- texture = CandyGear::Texture.from_image("textures/color_texture.qoi");
- mesh = CandyGear::Mesh.new("meshes/cube.cgmesh");
+ menu_texture = CandyGear::Texture.from_image("textures/menu.qoi");
# FIXME: Text rendering crashes with this font:
- # font = CandyGear::Font.new("/usr/share/fonts/TTF/sazanami-mincho.ttf", 16);
+ # font = CandyGear::Font.new(
+ # "/usr/share/fonts/TTF/sazanami-mincho.ttf", 16);
# FIXME: This font, under this path, may not be present in all Linuxes:
- font = CandyGear::Font.new("/usr/share/fonts/TTF/HanaMinA.ttf", 30);
- japanese_text = CandyGear::Texture.from_text(font, "こんにちは世界!");
- english_text = CandyGear::Texture.from_text(
- font, "The quick brown fox jumps");
-
- $color = CandyGear::Vector3D.new(0.8, 0.2, 0.2);
- $model = CandyGear::Model.new(mesh, texture);
- $sprite = CandyGear::Sprite.new(
- texture, CandyGear::Vector4D.new(0, 0, 1.0, 1.0));
- $rectangle = CandyGear::Vector4D.new(103.0, 1.0, 100.0, 100.0);
- $sprite_position = CandyGear::Vector4D.new(1.0, 1.0, 100.0, 100.0);
- $japanese_text_sprite = CandyGear::Sprite.new(
- japanese_text, CandyGear::Vector4D.new(0, 0, 1.0, 1.0));
- $japanese_text_position = CandyGear::Vector4D.new(
- 204.0, 1.0, japanese_text.width, japanese_text.height);
- $english_text_sprite = CandyGear::Sprite.new(
- english_text, CandyGear::Vector4D.new(0, 0, 1.0, 1.0));
- $english_text_position = CandyGear::Vector4D.new(
- 204.0, japanese_text.height + 2.0,
- english_text.width, english_text.height);
-
- $instances = [
- CandyGear::Vector3D.new(5.0, 0.0, 0.0),
- CandyGear::Vector3D.new(-5.0, 0.0, 0.0),
- CandyGear::Vector3D.new(0.0, 5.0, 0.0),
- CandyGear::Vector3D.new(0.0, -5.0, 0.0),
- CandyGear::Vector3D.new(0.0, 0.0, 5.0),
- CandyGear::Vector3D.new(0.0, 0.0, -5.0)
- ];
- $instances_rotation = CandyGear::Rotation3D.new(0.0, 0.0, 0.0);
-
- $camera_position = CandyGear::Vector3D.new(0.0, 0.0, 0.0);
- $camera_rotation = CandyGear::Rotation3D.new(0.0, 0.0, 0.0);
-
- color = CandyGear::Vector3D.new(0.12, 0.12, 0.18);
- $view1 = CandyGear::View2D.new(
- CandyGear::Vector4D.new(0, 0, 1280, 240), 640, 120);
- $view2 = CandyGear::View3D.new(
- CandyGear::Vector4D.new(0, 240, 1280, 480), 1280, 480);
- CandyGear.views = [$view1, $view2];
+ font = CandyGear::Font.new("/usr/share/fonts/TTF/HanaMinA.ttf", 18);
+ $global_data = {
+ font: font,
+ menu_view: CandyGear::Menu::BorderedView.new(menu_texture, font, 16, 16)
+ }
- $view2.camera_position = $camera_position;
- $view2.camera_rotation = $camera_rotation;
+ change_mode(:title);
end
-def key_down(key)
- case key
- when CandyGear::Key::I
- $camera_rotation.rotate(-CAMERA_ROTATION_SPEED, 0.0);
- when CandyGear::Key::K
- $camera_rotation.rotate(CAMERA_ROTATION_SPEED, 0.0);
- when CandyGear::Key::J
- $camera_rotation.rotate(0.0, CAMERA_ROTATION_SPEED);
- when CandyGear::Key::L
- $camera_rotation.rotate(0.0, -CAMERA_ROTATION_SPEED);
- when CandyGear::Key::E
- $camera_position.translate(
- CandyGear::Vector3D.new(0.0, 0.0, -TRANSLATION_SPEED), $camera_rotation);
- when CandyGear::Key::D
- $camera_position.translate(
- CandyGear::Vector3D.new(0.0, 0.0, TRANSLATION_SPEED), $camera_rotation);
- when CandyGear::Key::S
- $camera_position.translate(
- CandyGear::Vector3D.new(-TRANSLATION_SPEED, 0.0, 0.0), $camera_rotation);
- when CandyGear::Key::F
- $camera_position.translate(
- CandyGear::Vector3D.new(TRANSLATION_SPEED, 0.0, 0.0), $camera_rotation);
- end
-end
+def key_down(key) = $mode.key_down(key);
-def key_up(key)
-end
+def key_up(key) = $mode.key_up(key);
def quit() = CandyGear.quit();
def tick()
- $sprite.draw($view1, $sprite_position);
- $japanese_text_sprite.draw($view1, $japanese_text_position);
- $english_text_sprite.draw($view1, $english_text_position);
- $instances_rotation.rotate(0.0, BOX_ROTATION_SPEED);
- $rectangle.draw_rectangle($view1, $color);
- $instances.each do |i|
- $model.draw(i, $instances_rotation);
+ if $quit_stage then
+ case $next_stage
+ when :title
+ $mode = Mode::Title.new();
+ else
+ $mode = Mode::Demo.new();
+ end
+ $quit_stage = false;
end
+
+ $mode.tick();
end
diff --git a/test/src/mode/demo.rb b/test/src/mode/demo.rb
new file mode 100644
index 0000000..b3be78d
--- /dev/null
+++ b/test/src/mode/demo.rb
@@ -0,0 +1,113 @@
+# Copyright 2022-2023 Frederico de Oliveira Linhares
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module Mode
+ class Demo
+ CAMERA_ROTATION_SPEED = Math::PI/45;
+ BOX_ROTATION_SPEED = Math::PI/360;
+ TRANSLATION_SPEED = 0.5;
+
+ def initialize()
+ texture = CandyGear::Texture.from_image("textures/color_texture.qoi");
+ mesh = CandyGear::Mesh.new("meshes/cube.cgmesh");
+ font = CandyGear::Font.new("/usr/share/fonts/TTF/HanaMinA.ttf", 30);
+ japanese_text = CandyGear::Texture.from_text(
+ font, "こんにちは世界!");
+ english_text = CandyGear::Texture.from_text(
+ font, "The quick brown fox jumps");
+
+ @color = CandyGear::Vector3D.new(0.8, 0.2, 0.2);
+ @model = CandyGear::Model.new(mesh, texture);
+ @sprite = CandyGear::Sprite.new(
+ texture, CandyGear::Vector4D.new(0, 0, 1.0, 1.0));
+ @rectangle = CandyGear::Vector4D.new(103.0, 1.0, 100.0, 100.0);
+ @sprite_position = CandyGear::Vector4D.new(1.0, 1.0, 100.0, 100.0);
+ @japanese_text_sprite = CandyGear::Sprite.new(
+ japanese_text, CandyGear::Vector4D.new(0, 0, 1.0, 1.0));
+ @japanese_text_position = CandyGear::Vector4D.new(
+ 204.0, 1.0, japanese_text.width, japanese_text.height);
+ @english_text_sprite = CandyGear::Sprite.new(
+ english_text, CandyGear::Vector4D.new(0, 0, 1.0, 1.0));
+ @english_text_position = CandyGear::Vector4D.new(
+ 204.0, japanese_text.height + 2.0,
+ english_text.width, english_text.height);
+
+ @instances = [
+ CandyGear::Vector3D.new(5.0, 0.0, 0.0),
+ CandyGear::Vector3D.new(-5.0, 0.0, 0.0),
+ CandyGear::Vector3D.new(0.0, 5.0, 0.0),
+ CandyGear::Vector3D.new(0.0, -5.0, 0.0),
+ CandyGear::Vector3D.new(0.0, 0.0, 5.0),
+ CandyGear::Vector3D.new(0.0, 0.0, -5.0)
+ ];
+ @instances_rotation = CandyGear::Rotation3D.new(0.0, 0.0, 0.0);
+
+ @camera_position = CandyGear::Vector3D.new(0.0, 0.0, 0.0);
+ @camera_rotation = CandyGear::Rotation3D.new(0.0, 0.0, 0.0);
+
+ color = CandyGear::Vector3D.new(0.12, 0.12, 0.18);
+ @view1 = CandyGear::View2D.new(
+ CandyGear::Vector4D.new(0, 0, 1280, 240), 640, 120);
+ @view2 = CandyGear::View3D.new(
+ CandyGear::Vector4D.new(0, 240, 1280, 480), 1280, 480);
+ CandyGear.views = [@view1, @view2];
+
+ @view2.camera_position = @camera_position;
+ @view2.camera_rotation = @camera_rotation;
+ end
+
+ def key_down(key)
+ case key
+ when CandyGear::Key::I
+ @camera_rotation.rotate(-CAMERA_ROTATION_SPEED, 0.0);
+ when CandyGear::Key::K
+ @camera_rotation.rotate(CAMERA_ROTATION_SPEED, 0.0);
+ when CandyGear::Key::J
+ @camera_rotation.rotate(0.0, CAMERA_ROTATION_SPEED);
+ when CandyGear::Key::L
+ @camera_rotation.rotate(0.0, -CAMERA_ROTATION_SPEED);
+ when CandyGear::Key::E
+ @camera_position.translate(
+ CandyGear::Vector3D.new(
+ 0.0, 0.0, -TRANSLATION_SPEED), @camera_rotation);
+ when CandyGear::Key::D
+ @camera_position.translate(
+ CandyGear::Vector3D.new(
+ 0.0, 0.0, TRANSLATION_SPEED), @camera_rotation);
+ when CandyGear::Key::S
+ @camera_position.translate(
+ CandyGear::Vector3D.new(
+ -TRANSLATION_SPEED, 0.0, 0.0), @camera_rotation);
+ when CandyGear::Key::F
+ @camera_position.translate(
+ CandyGear::Vector3D.new(
+ TRANSLATION_SPEED, 0.0, 0.0), @camera_rotation);
+ end
+ end
+
+ def key_up(key)
+ end
+
+ def tick()
+ @sprite.draw(@view1, @sprite_position);
+ @japanese_text_sprite.draw(@view1, @japanese_text_position);
+ @english_text_sprite.draw(@view1, @english_text_position);
+ @instances_rotation.rotate(0.0, BOX_ROTATION_SPEED);
+ @rectangle.draw_rectangle(@view1, @color);
+ @instances.each do |i|
+ @model.draw(i, @instances_rotation);
+ end
+ end
+ end
+end
diff --git a/test/src/mode/title.rb b/test/src/mode/title.rb
new file mode 100644
index 0000000..6347b70
--- /dev/null
+++ b/test/src/mode/title.rb
@@ -0,0 +1,49 @@
+# Copyright 2022-2023 Frederico de Oliveira Linhares
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module Mode
+ class Title
+ def initialize()
+ @view = CandyGear::View2D.new(
+ CandyGear::Vector4D.new(0, 0, 1280, 720), 640, 360);
+ CandyGear.views = [@view];
+
+ @menu = CandyGear::Menu.new(
+ @view,
+ $global_data[:menu_view], 10, 10,
+ [
+ {text: "Demo", action: -> {change_mode(:demo);}},
+ {text: "Quit", action: -> {CandyGear.quit();}}
+ ]);
+ end
+
+ def key_down(key)
+ case key
+ when CandyGear::Key::I
+ @menu.pred_opt();
+ when CandyGear::Key::K
+ @menu.next_opt();
+ when CandyGear::Key::F
+ @menu.activate();
+ end
+ end
+
+ def key_up(key)
+ end
+
+ def tick()
+ @menu.draw();
+ end
+ end
+end
diff --git a/test/textures/menu.qoi b/test/textures/menu.qoi
new file mode 100644
index 0000000..177a547
--- /dev/null
+++ b/test/textures/menu.qoi
Binary files differ