Add in next/prev buttons for crafting table
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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?
|
||||
|
||||
Reference in New Issue
Block a user