felflame 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.byebug_history +20 -0
- data/.gitignore +17 -0
- data/.inch.yml +11 -0
- data/.rspec +1 -0
- data/.rubocop.yml +13 -0
- data/.yardopts +13 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +87 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +21 -0
- data/README.mdown +410 -0
- data/Rakefile +45 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/codeclimate/export-coverage.rb +16 -0
- data/deprecated/components/00_renderable.rb +19 -0
- data/deprecated/components/01_sprite.rb +57 -0
- data/deprecated/components/02_label.rb +32 -0
- data/deprecated/components/03_player_control.rb +26 -0
- data/deprecated/components/04_map.rb +21 -0
- data/deprecated/components/05_interactable.rb +16 -0
- data/deprecated/components/06_collidable.rb +22 -0
- data/deprecated/components/07_battle.rb +4 -0
- data/deprecated/components/07_indoor.rb +4 -0
- data/deprecated/components/07_overworld.rb +16 -0
- data/deprecated/components/debug_singleton.rb +13 -0
- data/deprecated/helpers/00_tileset.rb +56 -0
- data/deprecated/helpers/01_component.rb +74 -0
- data/deprecated/systems/00_update_levels.rb +34 -0
- data/deprecated/systems/10_player.rb +41 -0
- data/deprecated/systems/99_render.rb +37 -0
- data/docs/CNAME +1 -0
- data/docs/FelFlame.html +317 -0
- data/docs/FelFlame/ComponentManager.html +1627 -0
- data/docs/FelFlame/Components.html +423 -0
- data/docs/FelFlame/Entities.html +1054 -0
- data/docs/FelFlame/Helper.html +142 -0
- data/docs/FelFlame/Helper/ComponentManager.html +1627 -0
- data/docs/FelFlame/Scenes.html +761 -0
- data/docs/FelFlame/Stage.html +598 -0
- data/docs/FelFlame/Systems.html +1541 -0
- data/docs/_index.html +173 -0
- data/docs/class_list.html +51 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +497 -0
- data/docs/file.README.html +498 -0
- data/docs/file_list.html +56 -0
- data/docs/frames.html +17 -0
- data/docs/index.html +498 -0
- data/docs/js/app.js +314 -0
- data/docs/js/full_list.js +216 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +475 -0
- data/docs/top-level-namespace.html +137 -0
- data/felflame.gemspec +45 -0
- data/lib/felflame.rb +59 -0
- data/lib/felflame/component_manager.rb +245 -0
- data/lib/felflame/entity_manager.rb +135 -0
- data/lib/felflame/scene_manager.rb +58 -0
- data/lib/felflame/stage_manager.rb +70 -0
- data/lib/felflame/system_manager.rb +213 -0
- data/lib/felflame/version.rb +5 -0
- data/logos/felflame-logo-text.png +0 -0
- data/logos/felflame-logo-text.svg +172 -0
- data/logos/felflame-logo.png +0 -0
- data/logos/felflame-logo.svg +97 -0
- metadata +239 -0
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'rspec/core/rake_task'
|
6
|
+
require 'yard'
|
7
|
+
require_relative './codeclimate/export-coverage'
|
8
|
+
require "bundler/gem_tasks"
|
9
|
+
require "rubocop/rake_task"
|
10
|
+
|
11
|
+
task :default => [:spec, :yard, 'coverage:format']
|
12
|
+
#task default: :rubocop
|
13
|
+
|
14
|
+
RuboCop::RakeTask.new
|
15
|
+
|
16
|
+
namespace :coverage do
|
17
|
+
desc 'format coverage so it can be exported to codeclimate'
|
18
|
+
task :format do
|
19
|
+
ReportCoverage.format
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'upload coverage using your key'
|
23
|
+
task :upload do
|
24
|
+
ReportCoverage.upload
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
YARD::Rake::YardocTask.new do |t|
|
29
|
+
t.files = ['system_manager.rb', 'component_manager.rb', 'entity_manager.rb', 'scene_manager.rb', 'stage_manager.rb', 'felflame.rb']
|
30
|
+
t.options = ['--output-dir', './docs', 'yardoc --markup=markdown|textile|rdoc(default)']
|
31
|
+
t.stats_options = ['--list-undoc']
|
32
|
+
end
|
33
|
+
|
34
|
+
#Rake::TestTask.new do |t|
|
35
|
+
# t.pattern = "tests/**/*_test.rb"
|
36
|
+
#end
|
37
|
+
|
38
|
+
RSpec::Core::RakeTask.new :spec
|
39
|
+
|
40
|
+
# For installing FelPacks
|
41
|
+
#Gem::Specification.find_all.each do |a_gem|
|
42
|
+
# next unless a_gem.name.include? 'felpack-'
|
43
|
+
#
|
44
|
+
# Dir.glob("#{a_gem.gem_dir}/lib/#{a_gem.name.gsub('-', '/')}/tasks/*.rake").each { |r| load r }
|
45
|
+
#end
|
data/bin/console
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "bundler/setup"
|
5
|
+
require "felflame"
|
6
|
+
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
9
|
+
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
+
# require "pry"
|
12
|
+
# Pry.start
|
13
|
+
|
14
|
+
require "irb"
|
15
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative 'env'
|
2
|
+
|
3
|
+
|
4
|
+
class ReportCoverage
|
5
|
+
class <<self
|
6
|
+
def format
|
7
|
+
puts
|
8
|
+
puts 'Formatting Coverage...'
|
9
|
+
puts `./codeclimate/test-reporter-latest-linux-amd64 format-coverage -t simplecov`
|
10
|
+
end
|
11
|
+
|
12
|
+
def upload
|
13
|
+
puts `./codeclimate/test-reporter-latest-linux-amd64 upload-coverage --id #{ENV['CC_TEST_REPORTER_ID']}`
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
FelFlame::Components.new('Renderable', z: 0)
|
2
|
+
=begin
|
3
|
+
class Components
|
4
|
+
# If an entity can be rendered on screen
|
5
|
+
class Renderable < Helper::BaseComponent
|
6
|
+
attr_accessor :z
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@z = 0
|
10
|
+
end
|
11
|
+
|
12
|
+
def set(**opts)
|
13
|
+
opts.each do |key, value|
|
14
|
+
self.send "#{key}=", value
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
=end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
FelFlame::Components.new('Sprite', :x, :y, :w, :h, :path, :angle, :a, :r, :g, :b,
|
3
|
+
:source_x, :source_y, :source_w, :source_h,
|
4
|
+
:tile_x, :tile_y, :tile_w, :tile_h,
|
5
|
+
:flip_horizontally, :flip_vertically,
|
6
|
+
:angle_anchor_x, :angle_anchor_y, primative_marker: :sprite)
|
7
|
+
|
8
|
+
#Components::Sprite.define_method('primative_marker') do
|
9
|
+
# :sprite
|
10
|
+
#end
|
11
|
+
|
12
|
+
=begin
|
13
|
+
class Components
|
14
|
+
# If an entity can be rendered on screen
|
15
|
+
class Sprite < Helper::BaseComponent
|
16
|
+
|
17
|
+
attr_accessor :x, :y, :w, :h, :path, :angle, :a, :r, :g, :b,
|
18
|
+
:source_x, :source_y, :source_w, :source_h,
|
19
|
+
:tile_x, :tile_y, :tile_w, :tile_h,
|
20
|
+
:flip_horizontally, :flip_vertically,
|
21
|
+
:angle_anchor_x, :angle_anchor_y
|
22
|
+
|
23
|
+
def set(x: @x, y: @y, w: @w, h: @h, path: @path, angle: @angle, a: @a, r: @r, g: @g, b: @b,
|
24
|
+
source_x: @source_x, source_y: @source_y, source_w: @source_w, source_h: @source_h,
|
25
|
+
tile_x: @tile_x, tile_y: @tile_y, tile_w: @tile_w, tile_h: @tile_h,
|
26
|
+
flip_horizontally: @flip_horizontally, flip_vertically: @flip_vertically,
|
27
|
+
angle_anchor_x: @angle_anchor_x, angle_anchor_y: @angle_anchor_y)
|
28
|
+
{x: @x = x,
|
29
|
+
y: @y = y,
|
30
|
+
w: @w = w,
|
31
|
+
h: @h = h,
|
32
|
+
path: @path = path,
|
33
|
+
angle: @angle = angle,
|
34
|
+
a: @a = a,
|
35
|
+
r: @r = r,
|
36
|
+
g: @g = g,
|
37
|
+
b: @b = b,
|
38
|
+
source_x: @source_x = source_x,
|
39
|
+
source_y: @source_y = source_y,
|
40
|
+
source_w: @source_w = source_w,
|
41
|
+
source_h: @source_h = source_h,
|
42
|
+
tile_x: @tile_x = tile_x,
|
43
|
+
tile_y: @tile_y = tile_y,
|
44
|
+
tile_w: @tile_w = tile_w,
|
45
|
+
tile_h: @tile_h = tile_h,
|
46
|
+
flip_horizontally: @flip_horizontally = flip_horizontally,
|
47
|
+
flip_vertically: @flip_vertically = flip_vertically,
|
48
|
+
angle_anchor_x: @angle_anchor_x = angle_anchor_x,
|
49
|
+
angle_anchor_y: @angle_anchor_y = angle_anchor_y}
|
50
|
+
end
|
51
|
+
|
52
|
+
def primative_marker
|
53
|
+
:sprite
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
=end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
FelFlame::Components.new :Label, :x, :y, :text, :size_enum, :alignment_enum,
|
3
|
+
:a, :r, :g, :b, :font, :vertical_alignment_enum, primative_marker: :label
|
4
|
+
=begin
|
5
|
+
class Components
|
6
|
+
# A dragonruby label wrapper
|
7
|
+
class Label < Helper::BaseComponent
|
8
|
+
|
9
|
+
attr_accessor :x, :y, :text, :size_enum, :alignment_enum,
|
10
|
+
:a, :r, :g, :b, :font, :vertical_alignment_enum
|
11
|
+
|
12
|
+
def set(x: @x, y: @y, text: @text, size_enum: @size_enum, alignment_enum: @alignment_enum,
|
13
|
+
a: @a, r: @r, g: @g, b: @b, font: @font, vertical_alignment_enum: @vertical_alignment_enum)
|
14
|
+
{x: @x = x,
|
15
|
+
y: @y = y,
|
16
|
+
text: @text = text,
|
17
|
+
size_enum: @size_enum = size_enum,
|
18
|
+
alignment_enum: @alignment_enum = alignment_enum,
|
19
|
+
r: @r = r,
|
20
|
+
g: @g = g,
|
21
|
+
b: @b = b,
|
22
|
+
a: @a = a,
|
23
|
+
font: @font = font,
|
24
|
+
vertical_alignment_enum: @vertical_alignment_enum = vertical_alignment_enum }
|
25
|
+
end
|
26
|
+
|
27
|
+
def primative_marker
|
28
|
+
:label
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
FelFlame::Components.new :PlayerControl, north: 'up', south: 'down', east: 'right',
|
3
|
+
west: 'left', interact: 'space', menu: 'enter'
|
4
|
+
=begin
|
5
|
+
class Components
|
6
|
+
# Gives control(keyboard or otherwise) over an object
|
7
|
+
class PlayerControl < Helper::BaseComponent
|
8
|
+
attr_accessor :north, :south, :east, :west, :interact, :menu
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@north = 'up'
|
12
|
+
@south = 'down'
|
13
|
+
@east = 'right'
|
14
|
+
@west = 'left'
|
15
|
+
@interact = 'space'
|
16
|
+
@menu = 'enter'
|
17
|
+
end
|
18
|
+
|
19
|
+
def set(**opts)
|
20
|
+
opts.each do |key, value|
|
21
|
+
send "#{key}=", value
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
=end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Components
|
2
|
+
# dragonruby label wrapper
|
3
|
+
class Map < Helper::BaseComponent
|
4
|
+
|
5
|
+
attr_accessor :json_name, :json, :x, :y, :tilewidth, :tileheight, :a, :r, :g, :b
|
6
|
+
|
7
|
+
def set(json_name: @json_name, x: @x, y: @y, tilewidth: @tilewidth,
|
8
|
+
tileheight: @tileheight, a: @a, r: @r, g: @g, b: @b)
|
9
|
+
{ json_name: @json_name = json_name,
|
10
|
+
json: @json = Helper.get_json_tiles(json_name),
|
11
|
+
x: @x = x,
|
12
|
+
y: @y = y,
|
13
|
+
tilewidth: @tilewidth = tilewidth,
|
14
|
+
tileheight: @tileheight = tileheight,
|
15
|
+
r: @r = r,
|
16
|
+
g: @g = g,
|
17
|
+
b: @b = b,
|
18
|
+
a: @a = a }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Components
|
2
|
+
# If an entity can be rendered on screen
|
3
|
+
class Interactable < Helper::BaseComponent
|
4
|
+
attr_accessor :z
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@z = z
|
8
|
+
end
|
9
|
+
|
10
|
+
def set(**opts)
|
11
|
+
opts.each do |key, value|
|
12
|
+
self.send "#{key}=", value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Components
|
2
|
+
# If an entity can be rendered on screen
|
3
|
+
class Collidable < Helper::BaseComponent
|
4
|
+
class <<self
|
5
|
+
def add(entity_id)
|
6
|
+
super(entity_id)
|
7
|
+
#add to grid?
|
8
|
+
end
|
9
|
+
end
|
10
|
+
attr_accessor :grid
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@grid = [[]]
|
14
|
+
end
|
15
|
+
|
16
|
+
def set(**opts)
|
17
|
+
opts.each do |key, value|
|
18
|
+
self.send "#{key}=", value
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Coverage Ignored because the functionality of this
|
2
|
+
# code will not be used for the core of FelFlame.
|
3
|
+
# It will most likely be released as a seperate package
|
4
|
+
# The code will most likely be kept here until it
|
5
|
+
# eventually will be migrated to a new git repo
|
6
|
+
# :nocov:
|
7
|
+
class Helper
|
8
|
+
# Returns a loaded map and its dependecies(images,json)
|
9
|
+
# If any are missing then it will load them from files
|
10
|
+
|
11
|
+
@json_data = {}
|
12
|
+
class <<self
|
13
|
+
attr_accessor :json_data
|
14
|
+
|
15
|
+
def get_json_tiles(json_name, hitbox: false)
|
16
|
+
unless hitbox
|
17
|
+
return nil if json_name == 'hitbox' && !Components::DebugSingleton.data
|
18
|
+
end
|
19
|
+
|
20
|
+
if self.json_data[json_name].nil?
|
21
|
+
self.json_data[json_name] = $gtk.parse_json_file "assets/json/#{json_name}.json"
|
22
|
+
raise Exception.new "#{json_name} is null and not loaded. Cannot get json tile" if self.json_data[json_name].nil?
|
23
|
+
|
24
|
+
if self.json_data[json_name]['type'] == 'map' #json_name.split("_").first == 'map'
|
25
|
+
self.json_data[json_name]['tilesets'].each do |tileset|
|
26
|
+
tileset = Helper.get_json_tiles(tileset['source'].split('/').last.delete_suffix('.tsx'))
|
27
|
+
# download tileset here
|
28
|
+
# $gtk.args.gtk.http_get 'https://mysite.net/#{tileset['name']}.png'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
self.json_data[json_name]
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_tile(json_name:, tile_index:)
|
36
|
+
if json_name == 'hitbox' && !Components::DebugSingleton.data
|
37
|
+
return tile_index - 1 if tile_index > 1
|
38
|
+
return {}
|
39
|
+
end
|
40
|
+
|
41
|
+
json_tiles = self.get_json_tiles(json_name)
|
42
|
+
raise Exception.new "Error, json file not a tileset" unless json_tiles['type'] == 'tileset'
|
43
|
+
return tile_index - json_tiles['tilecount'] if tile_index > json_tiles['tilecount']
|
44
|
+
source_height_tiles = (tile_index.to_i / json_tiles['columns'].to_i).to_i# * json_tiles['tileheight']
|
45
|
+
{ w: json_tiles['tilewidth'],
|
46
|
+
h: json_tiles['tileheight'],
|
47
|
+
path: json_tiles['image'].split('mygame/').last.delete('\\'),
|
48
|
+
source_x: [((tile_index % json_tiles['columns']) - 1) * json_tiles['tilewidth'], 0].max,
|
49
|
+
# source_y gets special treatment
|
50
|
+
source_y: [json_tiles['imageheight'] - ((source_height_tiles + 1) * json_tiles['tileheight']), 0].max,
|
51
|
+
source_w: json_tiles['tilewidth'],
|
52
|
+
source_h: json_tiles['tileheight'] }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
# :nocov:
|
@@ -0,0 +1,74 @@
|
|
1
|
+
class FelFlame
|
2
|
+
class Helper
|
3
|
+
|
4
|
+
=begin
|
5
|
+
# Unused:
|
6
|
+
class Level < FelFlame::Helper::ComponentManager
|
7
|
+
class <<self
|
8
|
+
def data
|
9
|
+
@data ||= { add: [], remove: [], grid: FelFlame::Helper::Array2D.new }
|
10
|
+
end
|
11
|
+
|
12
|
+
def add(entity_id)
|
13
|
+
super
|
14
|
+
data[:add].push entity_id
|
15
|
+
end
|
16
|
+
|
17
|
+
def remove(entity_id)
|
18
|
+
data[:remove].push entity_id
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
=end
|
24
|
+
=begin
|
25
|
+
class Array2D < Array
|
26
|
+
def [](val)
|
27
|
+
unless val.nil?
|
28
|
+
return self[val] = [] if super.nil?
|
29
|
+
end
|
30
|
+
super
|
31
|
+
end
|
32
|
+
end
|
33
|
+
=end
|
34
|
+
=begin
|
35
|
+
class ArrayOfHashes < Array
|
36
|
+
def [](val)
|
37
|
+
unless val.nil?
|
38
|
+
return self[val] = {} if super.nil?
|
39
|
+
end
|
40
|
+
super
|
41
|
+
end
|
42
|
+
end
|
43
|
+
=end
|
44
|
+
|
45
|
+
=begin
|
46
|
+
module ComponentHelper
|
47
|
+
class <<self
|
48
|
+
def up? char
|
49
|
+
char == char.upcase
|
50
|
+
end
|
51
|
+
|
52
|
+
def down? char
|
53
|
+
char == char.downcase
|
54
|
+
end
|
55
|
+
|
56
|
+
def underscore(input)
|
57
|
+
output = input[0].downcase
|
58
|
+
(1...(input.length - 1)).each do |iter|
|
59
|
+
if down?(input[iter]) && up?(input[iter + 1])
|
60
|
+
output += "#{input[iter].downcase}_"
|
61
|
+
elsif up?(input[iter - 1]) && up?(input[iter]) && down?(input[iter + 1])
|
62
|
+
output += "_#{input[iter].downcase}"
|
63
|
+
else
|
64
|
+
output += input[iter].downcase
|
65
|
+
end
|
66
|
+
end
|
67
|
+
output += input[-1].downcase unless input.length == 1
|
68
|
+
output
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
=end
|
73
|
+
end
|
74
|
+
end
|