From 5ae07bb7f154249e917d787d41ce4a8acc0fb2bf Mon Sep 17 00:00:00 2001 From: Gedrovits Date: Wed, 8 Jun 2016 02:24:22 +0300 Subject: [PATCH] Additional Sizes and simple way to load Hero with custom size and name --- bin/console | 5 +++++ lib/eternal_soul_asylum/hero.rb | 14 ++++++++++---- lib/eternal_soul_asylum/mechanics/sizes.rb | 11 +++++++++++ lib/eternal_soul_asylum/mechanics/sizes/large.rb | 12 ++++++++++++ lib/eternal_soul_asylum/mechanics/sizes/normal.rb | 3 ++- lib/eternal_soul_asylum/mechanics/sizes/size.rb | 4 +++- lib/eternal_soul_asylum/mechanics/sizes/small.rb | 12 ++++++++++++ 7 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 lib/eternal_soul_asylum/mechanics/sizes/large.rb create mode 100644 lib/eternal_soul_asylum/mechanics/sizes/small.rb diff --git a/bin/console b/bin/console index bfb1058..c4c3848 100755 --- a/bin/console +++ b/bin/console @@ -19,4 +19,9 @@ def reload! files.each { |file| load file } end +# FIXME: Load entities for testing +@jon_snow = EternalSoulAsylum::Hero.new(name: 'Jon Snow') +@dog = EternalSoulAsylum::Hero.new(name: 'Dog', size: :small) +@giant = EternalSoulAsylum::Hero.new(name: 'Giant', size: :large) + IRB.start diff --git a/lib/eternal_soul_asylum/hero.rb b/lib/eternal_soul_asylum/hero.rb index b11c368..965947f 100644 --- a/lib/eternal_soul_asylum/hero.rb +++ b/lib/eternal_soul_asylum/hero.rb @@ -4,18 +4,24 @@ class Hero attr_accessor :level, :name, :gender, :race, :size, :alignment, :background # Attributes attr_accessor :strength, :dexterity, :agility, :vitality, :intellect, :wisdom, :mentality, :charisma, :luck + # Combat + attr_accessor :health, :damage - def initialize + def initialize(args = {}) @level = 1 - @name = 'Jon Snow' + @name = args.dig(:name) @gender = :male @race = :human - @size = Mechanics::Sizes::Normal.new + @size = Mechanics::Sizes.by_name(args.dig(:size)) @alignment = :true_neutral @background = :bastard # Abilities - @strength = Mechanics::Abilities::Strength.new(10) + @strength = Mechanics::Abilities::Strength.new(5) + + # Combat + @health = 10 + @damage = @strength.base * @size.damage_modifier end end end diff --git a/lib/eternal_soul_asylum/mechanics/sizes.rb b/lib/eternal_soul_asylum/mechanics/sizes.rb index 59cf542..c86d109 100644 --- a/lib/eternal_soul_asylum/mechanics/sizes.rb +++ b/lib/eternal_soul_asylum/mechanics/sizes.rb @@ -1,9 +1,20 @@ require_relative "sizes/size" +require_relative "sizes/small" require_relative "sizes/normal" +require_relative "sizes/large" module EternalSoulAsylum module Mechanics module Sizes + def self.by_name(name) + case name + when :small then Small.new + when :normal then Normal.new + when :large then Large.new + else + Normal.new + end + end end end end diff --git a/lib/eternal_soul_asylum/mechanics/sizes/large.rb b/lib/eternal_soul_asylum/mechanics/sizes/large.rb new file mode 100644 index 0000000..234ffa5 --- /dev/null +++ b/lib/eternal_soul_asylum/mechanics/sizes/large.rb @@ -0,0 +1,12 @@ +module EternalSoulAsylum + module Mechanics + module Sizes + class Large < Size + def initialize(damage_modifier = 1.5) + @damage_modifier = damage_modifier + super + end + end + end + end +end diff --git a/lib/eternal_soul_asylum/mechanics/sizes/normal.rb b/lib/eternal_soul_asylum/mechanics/sizes/normal.rb index 4a47fe4..53e0582 100644 --- a/lib/eternal_soul_asylum/mechanics/sizes/normal.rb +++ b/lib/eternal_soul_asylum/mechanics/sizes/normal.rb @@ -2,7 +2,8 @@ module EternalSoulAsylum module Mechanics module Sizes class Normal < Size - def initialize + def initialize(damage_modifier = 1) + @damage_modifier = damage_modifier super end end diff --git a/lib/eternal_soul_asylum/mechanics/sizes/size.rb b/lib/eternal_soul_asylum/mechanics/sizes/size.rb index c166158..0ff5c8c 100644 --- a/lib/eternal_soul_asylum/mechanics/sizes/size.rb +++ b/lib/eternal_soul_asylum/mechanics/sizes/size.rb @@ -2,7 +2,9 @@ module EternalSoulAsylum module Mechanics module Sizes class Size - def initialize + attr_accessor :damage_modifier + + def initialize(args = {}) # Collosal, Huge, Large, Normal, Small, Very Small, Tiny (?) end end diff --git a/lib/eternal_soul_asylum/mechanics/sizes/small.rb b/lib/eternal_soul_asylum/mechanics/sizes/small.rb new file mode 100644 index 0000000..d50a8b4 --- /dev/null +++ b/lib/eternal_soul_asylum/mechanics/sizes/small.rb @@ -0,0 +1,12 @@ +module EternalSoulAsylum + module Mechanics + module Sizes + class Small < Size + def initialize(damage_modifier = 0.5) + @damage_modifier = damage_modifier + super + end + end + end + end +end