Class: SpriteKit::Scenes::SpritesheetScene

Inherits:
Object
  • Object
show all
Defined in:
mygame/lib/sprite_kit/scenes/spritesheet_scene.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(scene_manager = nil, sprite_directory: "sprites") ⇒ SpritesheetScene

Returns a new instance of SpritesheetScene.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'mygame/lib/sprite_kit/scenes/spritesheet_scene.rb', line 14

def initialize(scene_manager = nil, sprite_directory: "sprites")
  @scene_manager = scene_manager
  @camera = ::SpriteKit::Camera.new
  @draw_buffer = ::SpriteKit::DrawBuffer.new

  @views = [:file_tree, :canvas]
  @state = {
    draw_buffer: @draw_buffer,
    camera: @camera,
    camera_path: :camera,
    view: @views[0],
    views: @views,
    show_grid: false,
    tile_selection: {
      w: 12, h: 12,
      row_gap: 1, column_gap: 1,
      offset_x: 1, offset_y: 1,
    },
    current_sprite: nil,
    viewport_boundary: nil,
    next_view: nil,
    file_path: nil,
  }

  @spritesheet_loader = SpriteKit::SpritesheetLoader.new
  spritesheets = @spritesheet_loader.load_directory(sprite_directory)
  @tree = spritesheets.tree
  @tree_renderer = TreeRenderer.new(@tree, state: @state)
  @spritesheets = spritesheets.spritesheets

  @state.spritesheets = @spritesheets

  @canvas = ::SpriteKit::Canvas.new(state: @state, spritesheets: [])
  @tool_drawer = ::SpriteKit::ToolDrawer.new(state: @state)
end

Instance Attribute Details

#cameraObject

Returns the value of attribute camera.



12
13
14
# File 'mygame/lib/sprite_kit/scenes/spritesheet_scene.rb', line 12

def camera
  @camera
end

#canvasObject

Returns the value of attribute canvas.



12
13
14
# File 'mygame/lib/sprite_kit/scenes/spritesheet_scene.rb', line 12

def canvas
  @canvas
end

#draw_bufferObject

Returns the value of attribute draw_buffer.



12
13
14
# File 'mygame/lib/sprite_kit/scenes/spritesheet_scene.rb', line 12

def draw_buffer
  @draw_buffer
end

#scene_managerObject

Returns the value of attribute scene_manager.



12
13
14
# File 'mygame/lib/sprite_kit/scenes/spritesheet_scene.rb', line 12

def scene_manager
  @scene_manager
end

#stateObject

Returns the value of attribute state.



12
13
14
# File 'mygame/lib/sprite_kit/scenes/spritesheet_scene.rb', line 12

def state
  @state
end

#tool_drawerObject

Returns the value of attribute tool_drawer.



12
13
14
# File 'mygame/lib/sprite_kit/scenes/spritesheet_scene.rb', line 12

def tool_drawer
  @tool_drawer
end

Instance Method Details

#tick(args) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'mygame/lib/sprite_kit/scenes/spritesheet_scene.rb', line 50

def tick(args)
  @state.outputs = args.outputs
  @state.draw_buffer.outputs = args.outputs

  if args.inputs.keyboard.key_down.g
    @state.show_grid = !@state.show_grid
  end

  @state.world_mouse = @camera.to_world_space(args.inputs.mouse)

  @state.viewport_boundary = {
    x: @tool_drawer.w,
    y: 0,
    w: args.grid.w - @tool_drawer.w,
    h: args.grid.h,
  }

  if @state.view == :canvas
    @canvas.viewport_boundary = @state.viewport_boundary
    @canvas.tick(args)
  end

  if @state.view == :file_tree
    @draw_buffer.primitives.concat(@tree_renderer.render(args, offset_x: @tool_drawer.x + @tool_drawer.w))
  end

  @tool_drawer.tick(args)

  top_layer = {
    w: 1280,
    h: 720,
    x: 0,
    y: 0,
    path: :top_layer
  }
  args.outputs[:top_layer].w = top_layer.w
  args.outputs[:top_layer].h = top_layer.h
  args.outputs[:top_layer].transient!
  @draw_buffer.primitives << top_layer

  @draw_buffer.flush

  args.outputs.primitives.concat(args.gtk.framerate_diagnostics_primitives.map do |primitive|
    primitive.x = args.grid.w - 500 + primitive.x
    primitive
  end)

  if @state.next_view
    if @state.next_view == :canvas
      spritesheet = @spritesheets[@state.file_path]
      if spritesheet
        @canvas.spritesheets = [spritesheet]
        @camera.reset
      else
        @state.next_view = :file_tree
      end
    end

    if @state.next_view == :file_tree
      @state.current_sprite = nil
    end

    @state.view = @state.next_view
    @state.next_view = nil
  end
end