Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'gosu'
- class Map
- def initialize(width, height)
- @width = width
- @height = height
- @origin_x = width / 2
- @origin_y = height / 2
- end
- def transform_x(x, y, z)
- cart_x = (x - z) * Math.cos(0.46365)
- cart_x + @origin_x
- end
- def transform_y(x, y, z)
- cart_y = y + (x + z) * Math.sin(0.46365)
- -cart_y + @origin_y
- end
- end
- class GameWindow < Gosu::Window
- def initialize
- super(640, 480, false)
- self.caption = "Iso"
- @map = Map.new(640, 480)
- end
- def draw
- draw_box(0, 0, 0, 100, 100, 100, Gosu::Color::BLUE)
- draw_box(0, 0, 200, 40, 80, 40, Gosu::Color::RED)
- draw_axes
- end
- def draw_axes
- draw_line_to(0, 0, 0, 200, 0, 0, Gosu::Color::GREEN)
- draw_line_to(0, 0, 0, 0, 200, 0, Gosu::Color::RED)
- draw_line_to(0, 0, 0, 0, 0, 200, Gosu::Color::YELLOW)
- end
- def draw_line_to(x1, y1, z1, x2, y2, z2, color)
- draw_line(@map.transform_x(x1, y1, z1),
- @map.transform_y(x1, y1, z1),
- color,
- @map.transform_x(x2, y2, z2),
- @map.transform_y(x2, y2, z2),
- color)
- end
- def draw_box(x, y, z, width, height, depth, color)
- draw_line_to(x, y, z, x+width, y, z, color)
- draw_line_to(x, y, z, x, y+depth, z, color)
- draw_line_to(x, y, z, x, y, z+height, color)
- draw_line_to(x, y+depth, z, x+width, y+depth, z, color)
- draw_line_to(x+width, y, z, x+width, y+depth, z, color)
- draw_line_to(x, y+depth, z, x, y+depth, z+height, color)
- draw_line_to(x, y, z+height, x, y+depth, z+height, color)
- draw_line_to(x, y, z+height, x+width, y, z+height, color)
- draw_line_to(x, y+depth, z+height, x+width, y+depth, z+height, color)
- draw_line_to(x+width, y, z+height, x+width, y+depth, z+height, color)
- draw_line_to(x+width, y+depth, z+height, x+width, y+depth, z, color)
- draw_line_to(x+width, y, z+height, x+width, y, z, color)
- end
- end
- window = GameWindow.new
- window.show
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement