diff --git a/lib/aethyr/core/actions/commands/look.rb b/lib/aethyr/core/actions/commands/look.rb index d36700d57eac70d314b06fc285926dafe84fd8b9..6b5bd74029ddc193e3b6c72bf7c20de013073fd4 100644 --- a/lib/aethyr/core/actions/commands/look.rb +++ b/lib/aethyr/core/actions/commands/look.rb @@ -1,5 +1,5 @@ require "aethyr/core/actions/command_action" -require 'aethyr/core/attributes/blind' +require 'aethyr/core/objects/attributes/blind' module Aethyr module Core diff --git a/lib/aethyr/core/attributes/blind.rb b/lib/aethyr/core/attributes/blind.rb deleted file mode 100644 index 466a485396dcce66613a71b4ca6e27668fff2184..0000000000000000000000000000000000000000 --- a/lib/aethyr/core/attributes/blind.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'aethyr/core/objects/attributes/attribute' -require 'aethyr/core/objects/living' - -class Blind < Attribute - def initialize(attach_to) - if not attach_to.is_a? LivingObject - raise ArgumentError.new "Can only attach the Blind attribute to LivingObjects" - end - - super(attach_to) - - @attached_to.subscribe(self) - end - - def pre_look(data) - data[:can_look] = false - data[:reason] = "You cannot see while you are blind" - end -end diff --git a/lib/aethyr/core/objects/attributes/blind.rb b/lib/aethyr/core/objects/attributes/blind.rb index e61002012531874b70525d66edfc0622623fe11b..38d6b2e1ce7f24a05abcb14e35fbdf1735ab90e3 100644 --- a/lib/aethyr/core/objects/attributes/blind.rb +++ b/lib/aethyr/core/objects/attributes/blind.rb @@ -1,5 +1,6 @@ -require 'aethyr/core/attributes/attribute' +require 'aethyr/core/objects/attributes/attribute' require 'aethyr/core/objects/living' +require 'aethyr/core/objects/traits/lexicon' class Blind < Attribute def initialize(attach_to) @@ -14,5 +15,9 @@ class Blind < Attribute def pre_look(data) data[:can_look] = false + + you_subj = @attached_to.noun(false, plurality: Lexicon::Plurality::SINGULAR, gramatical_person: Lexicon::GramaticalPerson::SECOND_PERSON, subjectivity: Lexicon::Subjectivity::SUBJECTIVE).capitalize + you_obj = @attached_to.noun(false, plurality: Lexicon::Plurality::SINGULAR, gramatical_person: Lexicon::GramaticalPerson::SECOND_PERSON, subjectivity: Lexicon::Subjectivity::OBJECTIVE) + data[:reason] = "#{you_subj} cannot see while #{you_obj} are blind" end end diff --git a/lib/aethyr/core/objects/game_object.rb b/lib/aethyr/core/objects/game_object.rb index f736542ee9ea1a34afe7504949aa5c3619ff978b..b730ba25b586c2ed42505dc02c3ffd2d0b031f17 100644 --- a/lib/aethyr/core/objects/game_object.rb +++ b/lib/aethyr/core/objects/game_object.rb @@ -1,14 +1,14 @@ require 'aethyr/core/util/publisher' require 'aethyr/core/util/log' require 'aethyr/core/objects/inventory' -require 'aethyr/core/objects/traits/pronoun' +require 'aethyr/core/objects/traits/lexicon' require 'aethyr/core/util/guid' require 'aethyr/core/objects/info/info' require 'aethyr/core/event' #Base class for all game objects, including players. Should be subclassed to do anything useful. class GameObject < Publisher - include Pronoun + include Lexicon attr_reader :short_desc, :game_object_id, :alt_names, :generic, :article, :sex, :show_in_look, :actions, :balance, :admin, :manager attr_accessor :container, :show_in_look, :actions, :pose, :visible, :comment, :movable, :quantity, :info @@ -37,6 +37,13 @@ class GameObject < Publisher @generic = generic #The sex of the object @sex = sex + if @sex == 'm' + @gender = Lexicon::Gender::MASCULINE + elsif @sex == 'f' + @gender = Lexicon::Gender::FEMININE + else + @gender = Lexicon::Gender::NEUTER + end #The article of the object ('a','an',etc) @article = article @visible = true diff --git a/lib/aethyr/core/objects/traits/lexicon.rb b/lib/aethyr/core/objects/traits/lexicon.rb index c56354a37733607a862bd94e4342b7bd82d1d492..1f9237c718e69162ec819bdc81c821fac9ed8d5d 100644 --- a/lib/aethyr/core/objects/traits/lexicon.rb +++ b/lib/aethyr/core/objects/traits/lexicon.rb @@ -1,109 +1,276 @@ -module Lexicon - Genders = Struct(:male, :female, :neuter, keyword_init: true) - Plurality = Struct(:singular, :plural, keyword_init: true) - Subjectivity = Struct(:subjective, :objective, :reflective, keyword_init: true) - Posessiveness = Struct(:posessive, :nonposessive) - Determiners = Struct(:articles, :demonstratives, :posessive, :quantifier, keyword_init: true) - Parts = Struct(:adjective, :pronoun, :noun, :verb, :adverb, :conjunction, :interjection, :preposition, keyword_init: true) - Directness = Struct(:direct, :indirect, keyword_init: true) - GramaticalPerson = Struct(:first_person, :second_person, :third_person, :fourth_person) - - GramaticalPerson.new( - first_person: Subjectivity.new( - subjective: Plurality.new( - singular: 'I', - plural: 'we' - ), - objective: Plurality.new( - singular: 'me', - plural: 'us' - ), - reflexive: Plurality.new( - singular: 'myself', - plural: 'ourselves' - ) - ) - ) +require 'set' +module Lexicon module Gender - MASCULIN = :masculin - FEMANINE = :femanine + MASCULINE = :masculine + FEMININE = :feminine NEUTER = :neuter end + GENDERS = Set[Gender::MASCULINE, Gender::FEMININE, Gender::NEUTER] + GENDERS.freeze module Plurality PLURAL = :plural SINGULAR = :singular end + PLURALITIES = Set[Plurality::PLURAL, Plurality::SINGULAR] + PLURALITIES.freeze module GramaticalPerson FIRST_PERSON = :first_person SECOND_PERSON = :second_person THIRD_PERSON = :third_person - FOURTH_PERSON = :fourth_person - INTERROGATIVE = : :interrogative + INDIRECT = :indirect + INTERROGATIVE = :interrogative end + GRAMATICAL_PERSONS = Set[GramaticalPerson::FIRST_PERSON, GramaticalPerson::SECOND_PERSON, GramaticalPerson::THIRD_PERSON, GramaticalPerson::INDIRECT, GramaticalPerson::INTERROGATIVE] + GRAMATICAL_PERSONS.freeze module Subjectivity OBJECTIVE = :objective SUBJECTIVE = :subjective end + SUBJECTIVITIES = Set[Subjectivity::OBJECTIVE, Subjectivity::SUBJECTIVE] + SUBJECTIVITIES.freeze module Relation - NONE = :none - REFLECTIVE = :reflective + REFLEXIVE = :reflexive POSSESSIVE = :possessive end + RELATIONS = Set[Relation::REFLEXIVE, Relation::POSSESSIVE] + RELATIONS.freeze + + module Quantifier + ONE = :one + ANY = :any + SOME = :some + end + QUANTIFIERS = Set[Quantifier::ONE, Quantifier::ANY, Quantifier::SOME] + QUANTIFIERS.freeze module Definitive DEFINITE = :definite INDEFINITE = :indefinite end + DEFINITIVES = Set[Definitive::DEFINITE, Definitive::INDEFINITE] + DEFINITIVES.freeze + + module Classifier + PLURALITY = :plurality + GRAMATICAL_PERSON = :gramatical_person + RELATION = :relation + SUBJECTIVITY = :subjectivity + QUANTIFIER = :quantifier + GENDER = :gender + end + CLASSIFIERS = {Classifier::PLURALITY => PLURALITIES, Classifier::GRAMATICAL_PERSON => GRAMATICAL_PERSONS, Classifier::RELATION => RELATIONS, Classifier::SUBJECTIVITY => SUBJECTIVITIES, Classifier::QUANTIFIER => QUANTIFIERS, Classifier::GENDER => GENDERS} + CLASSIFIERS.freeze + + Pluralities = Struct.new(Plurality::SINGULAR, Plurality::PLURAL, keyword_init: true) + GramaticalPersons = Struct.new(GramaticalPerson::FIRST_PERSON, GramaticalPerson::SECOND_PERSON, GramaticalPerson::THIRD_PERSON, GramaticalPerson::INDIRECT, GramaticalPerson::INTERROGATIVE, keyword_init: true) + Relations = Struct.new(Relation::POSSESSIVE, Relation::REFLEXIVE, keyword_init: true) + Subjectivities = Struct.new(Subjectivity::OBJECTIVE, Subjectivity::SUBJECTIVE, keyword_init: true) + Quantifiers = Struct.new(Quantifier::ONE, Quantifier::ANY, Quantifier::SOME, keyword_init: true) + Genders = Struct.new(Gender::MASCULINE, Gender::FEMININE, Gender::NEUTER, keyword_init: true) + + Vocab = Struct.new(:word, Classifier::PLURALITY, Classifier::GRAMATICAL_PERSON, Classifier::RELATION, Classifier::SUBJECTIVITY, Classifier::QUANTIFIER, Classifier::GENDER, keyword_init: true) + PronounLexicon = Struct.new(Classifier::PLURALITY, Classifier::GRAMATICAL_PERSON, Classifier::RELATION, Classifier::SUBJECTIVITY, Classifier::QUANTIFIER, Classifier::GENDER, keyword_init: true) + + + DEFAULT_VOCABULARY = [ + # First person, singular + Vocab.new(word: 'I', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: :na, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na), + Vocab.new(word: 'me', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: :na, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + Vocab.new(word: 'my', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na), + Vocab.new(word: 'mine', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + Vocab.new(word: 'myself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + # Second person, singular/plural + Vocab.new(word: 'you', gramatical_person: GramaticalPerson::SECOND_PERSON, relation: :na, quantifier: :na), + Vocab.new(word: 'your', gramatical_person: GramaticalPerson::SECOND_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na), + Vocab.new(word: 'yours', gramatical_person: GramaticalPerson::SECOND_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + Vocab.new(word: 'yourself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::SECOND_PERSON, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + Vocab.new(word: 'yourselves', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::SECOND_PERSON, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + # Third person, singular, feminine + Vocab.new(word: 'she', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: :na, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na, gender: Gender::FEMININE), + Vocab.new(word: 'her', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: :na, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::FEMININE), + Vocab.new(word: 'her', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na, gender: Gender::FEMININE), + Vocab.new(word: 'hers', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::FEMININE), + Vocab.new(word: 'herself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::FEMININE), + # Third person, singular, masculine + Vocab.new(word: 'he', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: :na, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na, gender: Gender::MASCULINE), + Vocab.new(word: 'him', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: :na, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::MASCULINE), + Vocab.new(word: 'his', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, quantifier: :na, gender: Gender::MASCULINE), + Vocab.new(word: 'himself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::MASCULINE), + # Third person, singular, neuter + Vocab.new(word: 'it', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: :na, quantifier: :na, gender: Gender::NEUTER), + Vocab.new(word: 'its', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, quantifier: :na, gender: Gender::NEUTER), + Vocab.new(word: 'itself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::NEUTER), + #First person, plural + Vocab.new(word: 'we', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: :na, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na), + Vocab.new(word: 'us', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: :na, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + Vocab.new(word: 'our', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na), + Vocab.new(word: 'ours', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + Vocab.new(word: 'ourselves', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + # Third person, plural + Vocab.new(word: 'they', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: :na, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na), + Vocab.new(word: 'them', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: :na, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + Vocab.new(word: 'their', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na), + Vocab.new(word: 'theirs', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + Vocab.new(word: 'themselves', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + # Indirect person, singular, masculine + Vocab.new(word: 'one', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: Quantifier::ONE, gender: Gender::MASCULINE), + Vocab.new(word: 'one\'s', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: Quantifier::ONE, gender: Gender::MASCULINE), + Vocab.new(word: 'ones', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ONE, gender: Gender::MASCULINE), + Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ONE, gender: Gender::MASCULINE), + Vocab.new(word: 'someone', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: Quantifier::SOME, gender: Gender::MASCULINE), + Vocab.new(word: 'someone\'s', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: Quantifier::SOME, gender: Gender::MASCULINE), + Vocab.new(word: 'someones', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::SOME, gender: Gender::MASCULINE), + Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::SOME, gender: Gender::MASCULINE), + Vocab.new(word: 'anyone', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: Quantifier::ANY, gender: Gender::MASCULINE), + Vocab.new(word: 'anyone\'s', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: Quantifier::ANY, gender: Gender::MASCULINE), + Vocab.new(word: 'anyones', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ANY, gender: Gender::MASCULINE), + Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ANY, gender: Gender::MASCULINE), + # Indirect person, singular, feminine (same as masculine) + Vocab.new(word: 'one', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: Quantifier::ONE, gender: Gender::FEMININE), + Vocab.new(word: 'one\'s', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: Quantifier::ONE, gender: Gender::FEMININE), + Vocab.new(word: 'ones', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ONE, gender: Gender::FEMININE), + Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ONE, gender: Gender::FEMININE), + Vocab.new(word: 'someone', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: Quantifier::SOME, gender: Gender::FEMININE), + Vocab.new(word: 'someone\'s', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: Quantifier::SOME, gender: Gender::FEMININE), + Vocab.new(word: 'someones', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::SOME, gender: Gender::FEMININE), + Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::SOME, gender: Gender::FEMININE), + Vocab.new(word: 'anyone', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: Quantifier::ANY, gender: Gender::FEMININE), + Vocab.new(word: 'anyone\'s', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: Quantifier::ANY, gender: Gender::FEMININE), + Vocab.new(word: 'anyones', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ANY, gender: Gender::FEMININE), + Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ANY, gender: Gender::FEMININE), + # Indirect person, singular, neuter + Vocab.new(word: 'one', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: Quantifier::ONE, gender: Gender::NEUTER), + Vocab.new(word: 'one\'s', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: Quantifier::ONE, gender: Gender::NEUTER), + Vocab.new(word: 'ones', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ONE, gender: Gender::NEUTER), + Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ONE, gender: Gender::NEUTER), + Vocab.new(word: 'something', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: Quantifier::SOME, gender: Gender::NEUTER), + Vocab.new(word: 'something\'s', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: Quantifier::SOME, gender: Gender::NEUTER), + Vocab.new(word: 'somethings', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::SOME, gender: Gender::NEUTER), + Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::SOME, gender: Gender::NEUTER), + Vocab.new(word: 'anything', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: Quantifier::ANY, gender: Gender::NEUTER), + Vocab.new(word: 'anything\'s', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: Quantifier::ANY, gender: Gender::NEUTER), + Vocab.new(word: 'anythings', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ANY, gender: Gender::NEUTER), + Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: Quantifier::ANY, gender: Gender::NEUTER), + # Indirect person, plural, feminine + Vocab.new(word: 'everyone', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: :na, gender: Gender::FEMININE), + Vocab.new(word: 'everyone\'s', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na, gender: Gender::FEMININE), + Vocab.new(word: 'everyones', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::FEMININE), + Vocab.new(word: 'oneself', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::FEMININE), + # Indirect person, plural, masculine (same as feminine) + Vocab.new(word: 'everyone', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: :na, gender: Gender::MASCULINE), + Vocab.new(word: 'everyone\'s', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na, gender: Gender::MASCULINE), + Vocab.new(word: 'everyones', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::MASCULINE), + Vocab.new(word: 'oneself', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::MASCULINE), + # Indirect person, plural, neuter + Vocab.new(word: 'everything', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: :na, quantifier: :na, gender: Gender::NEUTER), + Vocab.new(word: 'everything\'s', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na, gender: Gender::NEUTER), + Vocab.new(word: 'everythings', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::NEUTER), + Vocab.new(word: 'oneself', plurality: Plurality::PLURAL, gramatical_person: GramaticalPerson::INDIRECT, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na, gender: Gender::NEUTER), + # Interrogative person, singular/plural + Vocab.new(word: 'who', gramatical_person: GramaticalPerson::INTERROGATIVE, relation: :na, subjectivity: Subjectivity::OBJECTIVE, quantifier: :na), + Vocab.new(word: 'whom', gramatical_person: GramaticalPerson::INTERROGATIVE, relation: :na, subjectivity: Subjectivity::SUBJECTIVE, quantifier: :na), + Vocab.new(word: 'whose', gramatical_person: GramaticalPerson::INTERROGATIVE, relation: Relation::POSSESSIVE, quantifier: :na), + ] + + def Lexicon.construct_pronoun_lexicon(vocabulary) + lexicon = PronounLexicon.new( + plurality: Pluralities.new(singular: Set[], plural: Set[]), + gramatical_person: GramaticalPersons.new(first_person: Set[], second_person: Set[], third_person: Set[], indirect: Set[], interrogative: Set[]), + relation: Relations.new(possessive: Set[], reflexive: Set[]), + subjectivity: Subjectivities.new(objective: Set[], subjective: Set[]), + quantifier: Quantifiers.new(one: Set[], some: Set[], any: Set[]), + gender: Genders.new(masculine: Set[], feminine: Set[], neuter: Set[]) + ) + + vocabulary.each do |vocab_word| + word_text = vocab_word.word + + vocab_word.each_pair do |key, value| + next if key == :word + + if value.nil? + CLASSIFIERS[key].each do |inferred_value| + lexicon[key][inferred_value].add(word_text) + end + else + lexicon[key][value].add(word_text) if value != :na + end + end + end + + lexicon.each do |classifier| + classifier.each do |class_set| + class_set.freeze + end + classifier.freeze + end + lexicon.freeze + + return lexicon + end + + @@PRONOUN_LEXICON = Lexicon::construct_pronoun_lexicon(Lexicon::DEFAULT_VOCABULARY) - Vocab = Struct.new(:word, :gender, :plurality, :gramatical_person, :subjectivity, keyword_init: true) + def noun(proper = true, plurality: nil, gramatical_person: nil, relation: nil, subjectivity: nil, quantifier: nil) + if proper + final_noun = @name + if plurality == Plurality::PLURAL + final_noun += 's' + final_noun += '\'' if relation == Relation::POSSESSIVE + elsif relation == Relation::POSSESSIVE + final_nount += '\'s' + end + return final_noun + end - def construct_lexicon(vocabulary) + noun_set = @@PRONOUN_LEXICON.gender[@gender] + noun_set = noun_set.intersection(@@PRONOUN_LEXICON.plurality[plurality]) if not plurality.nil? + noun_set = noun_set.intersection(@@PRONOUN_LEXICON.gramatical_person[gramatical_person]) if not gramatical_person.nil? + noun_set = noun_set.intersection(@@PRONOUN_LEXICON.relation[relation]) if not relation.nil? + noun_set = noun_set.intersection(@@PRONOUN_LEXICON.subjectivity[subjectivity]) if not subjectivity.nil? + noun_set = noun_set.intersection(@@PRONOUN_LEXICON.quantifier[quantifier]) if not quantifier.nil? + noun_set = noun_set.intersection(@@PRONOUN_LEXICON.relation[relation]) if not relation.nil? + + if relation.nil? + RELATIONS.each do |subtract_relation| + noun_set = noun_set.subtract(@@PRONOUN_LEXICON.relation[subtract_relation]) + end + end + + if quantifier.nil? + QUANTIFIERS.each do |subtract_quantifier| + noun_set = noun_set.subtract(@@PRONOUN_LEXICON.quantifier[subtract_quantifier]) + end + end + + if noun_set.size() != 1 + raise ArgumentError "filters applied to produce noun did not produce a single unique noun, possible nouns: #{noun_set}" + end + + noun_set.each do |result| + return result + end end - construct_lexicon([ - Vocab.new(word: 'I', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::NONE, subjectivity: Subjectivity::SUBJECTIVE), - Vocab.new(word: 'me', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::NONE, subjectivity: Subjectivity::OBJECTIVE), - Vocab.new(word: 'my', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE), - Vocab.new(word: 'mine', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE), - Vocab.new(word: 'myself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FIRST_PERSON, relation: Relation::REFLEXIVE, subjectivity: Subjectivity::OBJECTIVE), - Vocab.new(word: 'you', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::SECOND_PERSON, relation: Relation::NONE), - Vocab.new(word: 'your', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::SECOND_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE), - Vocab.new(word: 'yours', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::SECOND_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE), - Vocab.new(word: 'yourself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::SECOND_PERSON, relation: Relation::REFLECTIVE, subjectivity: Subjectivity::OBJECTIVE), - Vocab.new(word: 'she', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::NONE, subjectivity: Subjectivity::SUBJECTIVE, gender: Gender::FEMANINE), - Vocab.new(word: 'her', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::NONE, subjectivity: Subjectivity::OBJECTIVE, gender: Gender::FEMANINE), - Vocab.new(word: 'her', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE, gender: Gender::FEMANINE), - Vocab.new(word: 'hers', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE, gender: Gender::FEMANINE), - Vocab.new(word: 'herself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::REFLECTIVE, subjectivity: Subjectivity::OBJECTIVE, gender: Gender::FEMANINE), - Vocab.new(word: 'he', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::NONE, subjectivity: Subjectivity::SUBJECTIVE, gender: Gender::MASCULIN), - Vocab.new(word: 'him', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::NONE, subjectivity: Subjectivity::OBJECTIVE, gender: Gender::MASCULIN), - Vocab.new(word: 'his', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, gender: Gender::MASCULIN), - Vocab.new(word: 'himself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::REFLECTIVE, subjectivity: Subjectivity::OBJECTIVE, gender: Gender::MASCULIN), - Vocab.new(word: 'one', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FOURTH_PERSON, relation: Relation::NONE, subjectivity: Subjectivity::SUBJECTIVE), - Vocab.new(word: 'oneself', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::FOURTH_PERSON, relation: Relation::REFLECTIVE, subjectivity: Subjectivity::OBJECTIVE), - Vocab.new(word: 'who', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INTERROGATIVE, relation: Relation::NONE, subjectivity: Subjectivity::OBJECTIVE), - Vocab.new(word: 'whom', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INTERROGATIVE, relation: Relation::NONE, subjectivity: Subjectivity::SUBJECTIVE), - Vocab.new(word: 'whose', plurality: Plurality::SINGULAR, gramatical_person: GramaticalPerson::INTERROGATIVE, relation: Relation::POSSESSIVE), - ]) + # For legacy purposes + def pronoun(type = :normal) + if type == :normal + return noun(false, plurality: Plurality::Singular, gramatical_person: GramaticalPerson::THIRD_PERSON, subjectivity: Subjectivity::SUBJECTIVE ) + elsif type == :reflexive + return noun(false, plurality: Plurality::Singular, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::REFLEXIVE ) + elsif type == :possessive + return noun(false, plurality: Plurality::Singular, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::SUBJECTIVE ) + elsif type == :objective + return noun(false, plurality: Plurality::Singular, gramatical_person: GramaticalPerson::THIRD_PERSON, subjectivity: Subjectivity::OBJECTIVE ) + elsif type == :obj_poss + return noun(false, plurality: Plurality::Singular, gramatical_person: GramaticalPerson::THIRD_PERSON, relation: Relation::POSSESSIVE, subjectivity: Subjectivity::OBJECTIVE ) + else + raise ArgumentError "Unrecognized typed #{type}" + end + end end - -# interrogative [subjective] pronounds:who, what, why, where, when, whatever -# interrogative [objective] pronounds:whom, what, why, where, when, whatever -# indefinate pronounds: anything, anybody, anyone, something, somebody, someone, nothing, nobody, none, no one -# someone, something -# direct-reflexive-pronoun: himself -# indirect-reflective-pronoun: me - -# reflexive [objective] pronouns: myself, yourself, himself, herself, itself, ourselves, yourselves, themselves. -# possessive [subjective] adjective/determiner: my, your, his, her, its, our, their -# possessive [objective] pronoun: mine, yours, his, hers, its, ours, theirs -# objective pronoun: me, us, you, him, her, it, them, and whom -# subjective pronoun: I, you, we, he, she, it, they, and who - -# Determiners: this, the, my -# Determiners: articles (definite: the, indefinite: a/an), demonstratives(this, that), possessive determines (my, their), quantifiers (many, all, no. every). diff --git a/lib/aethyr/core/objects/traits/location.rb b/lib/aethyr/core/objects/traits/location.rb index 8045891d44d9ab0e7d9faad7941e818c71555735..bc6dcf0a25a403c21393a0108cfef13b48173f45 100644 --- a/lib/aethyr/core/objects/traits/location.rb +++ b/lib/aethyr/core/objects/traits/location.rb @@ -2,7 +2,6 @@ require 'aethyr/core/objects/info/terrain' require 'aethyr/core/util/log' require 'aethyr/core/objects/inventory' -require 'aethyr/core/objects/traits/pronoun' require 'aethyr/core/util/guid' require 'aethyr/core/objects/info/info' diff --git a/lib/aethyr/core/objects/traits/pronoun.rb b/lib/aethyr/core/objects/traits/pronoun.rb deleted file mode 100644 index 5cd32115f5a129419c7e7c8a90563d1123c9249c..0000000000000000000000000000000000000000 --- a/lib/aethyr/core/objects/traits/pronoun.rb +++ /dev/null @@ -1,51 +0,0 @@ -#The Pronoun mixin provides the pronoun function, which gives the correct pronoun -#based on the sex of the object. -module Pronoun - @@pronouns = { :normal => - { 'm' => 'he', - 'f' => 'she', - 'n' => 'it' }, - :possessive => - { 'm' => 'his', - 'f' => 'her', - 'n' => 'its' }, - :objective => - { 'm' => 'him', - 'f' => 'her', - 'n' => 'it' }, - :reflexive => - { 'm' => 'himself', - 'f' => 'herself', - 'n' => 'itself' }, - :obj_poss => - { 'm' => 'his', - 'f' => 'hers', - 'n' => 'its' } - } - - #This is the only function of the Pronoun mixin. It returns the correct pronoun - #based on the sex of the object. - #Type is the type of pronoun desired. - # - # :normal for 'he', 'she', 'it' - # - # :possessive for 'his', 'her', 'its' - # - # :objective for 'him', 'her', 'it' - # - # :obj_poss for 'his', 'hers', 'its' - # - # :reflexive for 'himself', 'herself', 'itself' - def pronoun(type = :normal) - if @@pronouns[type] - if @@pronouns[type][@sex].nil? - log "What the heck." - else - return @@pronouns[type][@sex] - end - else - log "No such thing: #{type}" - end - '' - end -end