Add "Make this tool" button

This commit is contained in:
Andrew Miner
2015-11-15 11:02:59 -08:00
parent cf4d07075b
commit 74f6d2db53
9 changed files with 166 additions and 108 deletions
@@ -34,6 +34,9 @@ module.exports = class CraftPageController extends PageController
@modPack = options.modPack
@storage = options.storage
@model.craftsman.want.on Event.change, => @onWantInventoryChanged()
@model.craftsman.have.on Event.change, => @onHaveInventoryChanged()
# Event Methods ################################################################################
onHaveInventoryChanged: ->
@@ -42,30 +45,20 @@ module.exports = class CraftPageController extends PageController
onMoveNeedToHave: (itemSlug)->
quantity = @needInventoryController.model.quantityOf itemSlug
@model.craftsman.have.add itemSlug, quantity
@onHaveInventoryChanged()
onRemoveFromHaveInventory: (itemSlug)->
@model.craftsman.have.remove itemSlug
@onHaveInventoryChanged()
onRemoveFromWant: (itemSlug)->
@model.craftsman.want.remove itemSlug
@onWantInventoryChange()
onStepComplete: (stepController)->
step = stepController.model
for stack in step.recipe.output
@model.craftsman.have.add stack.itemSlug, stack.quantity * step.multiplier
@onHaveInventoryChanged()
onWantInventoryChange: ->
onWantInventoryChanged: ->
text = @model.craftsman.want.unparse()
url = Url.crafting inventoryText:text
router.navigate url
if @model.craftsman.want.isEmpty
@model.craftsman.have.clear()
@onHaveInventoryChanged()
# PageController Overrides #####################################################################
@@ -87,7 +80,7 @@ module.exports = class CraftPageController extends PageController
modPack: @modPack
firstButtonType: 'remove'
@wantInventoryController.on Event.button.first, (c, s)=> @onRemoveFromWant(s)
@wantInventoryController.on Event.change, (c)=> @onWantInventoryChange()
@wantInventoryController.on Event.change, (c)=> @onWantInventoryChanged()
@haveInventoryController = @addChild InventoryController, '.have .view__inventory',
imageLoader: @imageLoader
@@ -140,8 +133,31 @@ module.exports = class CraftPageController extends PageController
# Private Methods ################################################################################
_addTools: (controller)->
controller.model.addToolsTo @model.craftsman.want
_completeStep: (controller)->
controller.model.completeInto @model.craftsman.have
_isAddingToolsPossible: (controller)->
tools = controller.model.recipe.tools
return false unless tools.length > 0
have = @model.craftsman.have
want = @model.craftsman.want
for stack in tools
return false if have.hasAtLeast stack.itemSlug
return false if want.hasAtLeast stack.itemSlug
return true
_isStepCompletable: (controller)->
return not @model.craftsman.want.hasAtLeast controller.model.outputItemSlug
recipe = controller.model.recipe
for stack in recipe.output
return false if @model.craftsman.want.hasAtLeast stack.itemSlug
return true
_refreshSectionVisibility: ->
return unless @_rendered
@@ -174,11 +190,13 @@ module.exports = class CraftPageController extends PageController
controller = @_stepControllers[index]
if not controller?
controller = new StepController
canComplete: (controller)=> @_isStepCompletable(controller)
canAddTools: (controller)=> @_isAddingToolsPossible controller
canComplete: (controller)=> @_isStepCompletable controller
onComplete: (controller)=> @_completeStep controller
onAddTools: (controller)=> @_addTools controller
imageLoader: @imageLoader
model: step
modPack: @modPack
controller.on Event.button.complete, (c)=> @onStepComplete(c)
controller.render()
@$stepsContainer.append controller.$el
@@ -6,12 +6,12 @@ All rights reserved.
###
$ = require 'jquery'
BaseController = require './base_controller'
ItemSelector = require '../models/item_selector'
ItemSelectorElementController = require './item_selector_element_controller'
_ = require 'underscore'
BaseController = require './base_controller'
{Duration} = require '../constants'
{Event} = require '../constants'
ItemSelector = require '../models/item_selector'
ItemSelectorElementController = require './item_selector_element_controller'
{Key} = require '../constants'
########################################################################################################################
@@ -55,22 +55,21 @@ module.exports = class MinimalRecipeController extends BaseController
# Property Methods #############################################################################
getMultiplier: ->
@_multiplier ?= 1
return @_multiplier
setMultiplier: (newMultiplier)->
oldMultiplier = @_multiplier
return if newMultiplier is oldMultiplier
@_multiplier = newMultiplier
@_refreshMultiplier()
@trigger Event.change + ':multiplier', this, oldMultiplier, newMultiplier
@trigger Event.change, this
Object.defineProperties @prototype,
multiplier: {get:@prototype.getMultiplier, set:@prototype.setMultiplier}
multiplier:
get: ->
@_multiplier ?= 1
return @_multiplier
set: (newMultiplier)->
oldMultiplier = @_multiplier
return if newMultiplier is oldMultiplier
@_multiplier = newMultiplier
@_refreshMultiplier()
@trigger Event.change + ':multiplier', this, oldMultiplier, newMultiplier
@trigger Event.change, this
# Backbone.View Methods ########################################################################
+32 -11
View File
@@ -22,15 +22,22 @@ module.exports = class StepController extends BaseController
options.templateName = 'step'
super options
@canAddTools = options.canAddTools or (controller)-> true
@canComplete = options.canComplete or (controller)-> true
@onComplete = options.onComplete or (controller)-> # do nothing
@onAddTools = options.onAddTools or (controller)-> # do nothing
@imageLoader = options.imageLoader
@modPack = options.modPack
# Event Methods ################################################################################
onCompleteClicked: (event)->
event.preventDefault()
@trigger Event.button.complete, this
onCompleteButtonClicked: (event)->
return if @$completeButton.hasClass 'disabled'
@onComplete this
onToolButtonClicked: (event)->
return if @$toolButton.hasClass 'disabled'
@onAddTools this
# BaseController Overrides #####################################################################
@@ -46,9 +53,10 @@ module.exports = class StepController extends BaseController
model: @model.recipe
modPack: @modPack
@$header = @$('h3')
@$completePanel = @$('.complete')
@$completeImage = @$('.complete img')
@$completeButton = @$('.button.complete')
@$header = @$('h3')
@$toolButton = @$('.button.tool')
@$toolButtonLabel = @$('.button.tool p')
super
onWillChangeModel: (oldModel, newModel)->
@@ -63,10 +71,8 @@ module.exports = class StepController extends BaseController
@recipeController.model = @model.recipe
@recipeController.multiplier = @model.multiplier
if @canComplete(this)
@$completePanel.addClass 'disabled'
else
@$completePanel.removeClass 'disabled'
@_refreshCompleteButton()
@_refreshToolButton()
super
@@ -74,4 +80,19 @@ module.exports = class StepController extends BaseController
events: ->
return _.extend super,
'click .complete a': 'onCompleteClicked'
'click .button.complete': 'onCompleteButtonClicked'
'click .button.tool': 'onToolButtonClicked'
# Private Methods ##############################################################################
_refreshToolButton: ->
if @canAddTools this
@$toolButton.removeClass 'disabled'
else
@$toolButton.addClass 'disabled'
_refreshCompleteButton: ->
if @canComplete this
@$completeButton.removeClass 'disabled'
else
@$completeButton.addClass 'disabled'