From 7775ccb3a304bd22c3ae119ff63cfc6c9d1c9b32 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Wed, 20 Nov 2019 10:05:19 -0600 Subject: [PATCH] Tanks turret is now centered on its body --- lib/components/movement.rb | 4 ++-- lib/components/turret.rb | 2 +- lib/entities/units/tank.rb | 3 ++- lib/entity.rb | 5 +++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/components/movement.rb b/lib/components/movement.rb index b63f785..211f7df 100644 --- a/lib/components/movement.rb +++ b/lib/components/movement.rb @@ -10,8 +10,8 @@ class IMICRTS a = (360.0 + (_angle - @parent.angle)) % 360.0 # FIXME: Fails if vector is directly behind entity - if @parent.angle.between?(_angle - 3, _angle + 3) - @parent.angle = _angle + if a.round == 180 + @parent.angle = (_angle + 180.0) % 360.0 elsif a < 180 @parent.angle -= 1.0 else diff --git a/lib/components/turret.rb b/lib/components/turret.rb index 9f563ea..ccb2d3b 100644 --- a/lib/components/turret.rb +++ b/lib/components/turret.rb @@ -31,7 +31,7 @@ class IMICRTS def draw render unless @render @angle += 0.1 - @render.draw_rot(@parent.position.x + @center.x, @parent.position.y + @center.y, @parent.position.z, @angle) + @render.draw_rot(@parent.position.x, @parent.position.y, @parent.position.z, @angle, @center.x, @center.y) end end end \ No newline at end of file diff --git a/lib/entities/units/tank.rb b/lib/entities/units/tank.rb index 2b85473..d4778b4 100644 --- a/lib/entities/units/tank.rb +++ b/lib/entities/units/tank.rb @@ -5,11 +5,12 @@ IMICRTS::Entity.define_entity(:tank, :unit, 800, "Attacks ground targets") do |e entity.radius = 14 entity.movement = :ground entity.max_health = 100.0 + entity.center.y = 0.3125 entity.shell_image = "vehicles/tank/tank_shell.png" entity.component(:turret).shell_image = "vehicles/tank/tank_turret_shell.png" - entity.component(:turret).center.y = 0.4 + entity.component(:turret).center.y = 0.3125 entity.on_tick do end diff --git a/lib/entity.rb b/lib/entity.rb index ac599b9..eea6055 100644 --- a/lib/entity.rb +++ b/lib/entity.rb @@ -18,7 +18,7 @@ class IMICRTS attr_reader :player, :id, :name, :type, :speed attr_accessor :position, :angle, :radius, :target, :state, :movement, :health, :max_health, - :turret + :turret, :center def initialize(name:, player:, id:, position:, angle:, director:) @player = player @id = id @@ -30,6 +30,7 @@ class IMICRTS @radius = 32 / 2 @target = nil @state = :idle + @center = CyberarmEngine::Vector.new(0.5, 0.5) @components = {} @@ -109,7 +110,7 @@ class IMICRTS def draw render unless @render - @render.draw_rot(@position.x, @position.y, @position.z, @angle) + @render.draw_rot(@position.x, @position.y, @position.z, @angle, @center.x, @center.y) component(:turret).draw if component(:turret) end