From b8614162cdbb3817a7a58ceadf8b6b0d05fae952 Mon Sep 17 00:00:00 2001 From: Frederico Linhares Date: Wed, 24 May 2023 14:50:01 -0300 Subject: feat Recreate the Menu --- test/src/mode/demo.rb | 113 +++++++++++++++++++++++++++++++++++++++++++++++++ test/src/mode/title.rb | 49 +++++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 test/src/mode/demo.rb create mode 100644 test/src/mode/title.rb (limited to 'test/src/mode') 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 -- cgit v1.2.3