# Copyright 2022 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. CAMERA_ROTATION_SPEED = Math::PI/45; BOX_ROTATION_SPEED = Math::PI/180; TRANSLATION_SPEED = 0.5; def config() CandyGear.game_name = "Candy Gear Test"; CandyGear::Graphic.display_width = 1280; CandyGear::Graphic.display_height = 720; end def init() texture = CandyGear::Texture.from_image("textures/color_texture.qoi"); mesh = CandyGear::Mesh.new("meshes/cube.cgmesh"); $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); $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, 360), 640, 180); $view2 = CandyGear::View3D.new( CandyGear::Vector4D.new(0, 360, 1280, 360), 1280, 360); 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 quit() = CandyGear.quit(); def tick() $sprite.draw($view1, $sprite_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