Files
website/src/scripts/models/item.coffee
T
Andrew Miner 83868e2760 Massive refactoring to clean up models
* Tweak style of quantity label in output box to be more visible
* Move data files for all mods under a directory for the specific
  version of the mod
* Add a `silent` property to the base model to prevent models which
  shouldn't be observed from emitting events
* Change the term "itemSlug" to just "slug" across the board
* Change all models so that they don't require their parent in their
  constructors and so that they don't automatically add themselves to
  their parents lists
* Remove a bunch of unnecessary event triggering
* Tighten up access to various lists of children across all models
* Refactor the guts of the V2 parser into an abstract base class so
  it can be used for other parsers in the future
* Remove a number of unused methods
2015-01-17 11:49:07 -08:00

67 lines
2.1 KiB
CoffeeScript

###
Crafting Guide - item.coffee
Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
BaseCollection = require './base_collection'
BaseModel = require './base_model'
{Event} = require '../constants'
Recipe = require './recipe'
########################################################################################################################
module.exports = class Item extends BaseModel
constructor: (attributes={}, options={})->
if not attributes.name? then throw new Error 'attributes.name is required'
attributes.isGatherable ?= false
attributes.slug ?= _.slugify attributes.name
super attributes, options
@_recipes = []
Object.defineProperties this,
'isCraftable': { get:-> @_recipes.length > 0 }
# Public Methods ###############################################################################
addRecipe: (recipe)->
if recipe.slug isnt @slug then throw new Error "cannot add a recipe for #{recipe.slug} to #{@slug}"
@_recipes.push recipe
eachRecipe: (callback)->
for recipe in @_recipes
callback recipe
getPrimaryRecipe: ->
return @_recipes[0]
compareTo: (that)->
if this.slug isnt that.slug
return if this.slug < that.slug then -1 else +1
if this.name isnt that.name
return if this.name < that.name then -1 else +1
return 0
# Object Overrides #############################################################################
toString: ->
result = []
result.push @constructor.name
result.push ' ('; result.push @cid; result.push ') { '
result.push 'name:"'; result.push @name; result.push '", '
result.push 'isGatherable:'; result.push @isGatherable
if _.slugify(@name) isnt @slug
result.push ', slug:'; result.push @slug
if @recipes.length > 0
result.push ', recipes:«'
result.push @_recipes.length
result.push ' items»'
result.push '}'
return result.join ''