Add in next/prev buttons for crafting table

This commit is contained in:
Andrew Miner
2015-01-08 12:34:33 -08:00
parent 9424af9d84
commit fb3db0f393
12 changed files with 662 additions and 7 deletions
@@ -17,11 +17,35 @@ module.exports = class CraftingTableController extends BaseController
options.templateName = 'crafting_table'
super options
# Event Methods ################################################################################
onNextClicked: ->
@model.step += 1
onPrevClicked: ->
@model.step -= 1
# BaseController Overrides #####################################################################
onDidRender: ->
@gridController = @addChild CraftingGridController, '.view__crafting_grid', model:@model.grid
@$nextButton = @$('button[name="next"]')
@$prevButton = @$('button[name="prev"]')
@$next = @$('.next')
@$prev = @$('.prev')
super
refresh: ->
@$prev.removeClass 'enabled'
@$next.removeClass 'enabled'
if @model.hasSteps
if @model.hasPrevStep then @$prev.addClass 'enabled'
if @model.hasNextStep then @$next.addClass 'enabled'
super
# Backbone.View Overrides ######################################################################
events:
'click .next': 'onNextClicked'
'click .prev': 'onPrevClicked'
+52 -5
View File
@@ -15,23 +15,70 @@ module.exports = class CraftingTable extends BaseModel
constructor: (attributes={}, options={})->
if not attributes.plan? then throw new Error "attributes.plan is required"
attributes.grid ?= new CraftingGrid modPack:attributes.plan.modPack
attributes.step ?= 0
super attributes, options
@plan.on 'change', => @reset()
@_step = 0
@_steps = []
Object.defineProperties this, {
hasNextStep: { get:@hasNextStep }
hasPrevStep: { get:@hasPrevStep }
hasSteps: { get:@hasSteps }
step: { get:@getStep, set:@setStep }
}
# Public Methods ###############################################################################
reset: ->
logger.trace "CraftingTable.reset()"
@_compactSteps()
@step = 0
@grid.recipe = @plan.steps[0]
return this
# Property Methods #############################################################################
hasNextStep: ->
return @_step + 1 < @_steps.length
hasPrevStep: ->
return @_step > 0
getStep: ->
return @_step
setStep: (newStep)->
newStep = Math.max 0, Math.min @_steps.length, newStep
@_step = newStep
@grid.recipe = @_steps[@_step]?.recipe
@trigger 'change', this
return this
hasSteps: ->
return @_steps.length > 0
# Object Overrides #############################################################################
toString: ->
return "#{@constructor.name} (#{@cid}) { plan:#{@plan}, step:#{@step} }"
return "#{@constructor.name} (#{@cid}) { plan:#{@plan}, step:#{@_step} }"
# Private Methods ##############################################################################
_compactSteps: ->
@_steps = []
currentStep = null
for recipe in @plan.steps
if currentStep?
if currentStep.recipe.name is recipe.name
currentStep.multiplier += 1
else
currentStep = null
if not currentStep
currentStep = multiplier:1, recipe:recipe
@_steps.push currentStep
return @_steps
+1
View File
@@ -27,6 +27,7 @@ module.exports = class Recipe extends BaseModel
getItemSlugAt: (index)->
patternDigit = @pattern[index]
return null unless patternDigit?
return null unless patternDigit.match /[0-9]/
stack = @input[parseInt(patternDigit)]
return null unless stack?