Initial version of the new crafting table

This commit is contained in:
Andrew Miner
2015-01-08 11:03:43 -08:00
parent 9f79722378
commit 9424af9d84
26 changed files with 280 additions and 228 deletions
@@ -5,14 +5,8 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
BaseController = require './base_controller'
{Duration} = require '../constants'
{Event} = require '../constants'
InventoryParser = require '../models/inventory_parser'
{Key} = require '../constants'
StackController = require './stack_controller'
url = require 'url'
{UrlParam} = require '../constants'
BaseController = require './base_controller'
CraftingGridController = require './crafting_grid_controller'
########################################################################################################################
@@ -23,139 +17,11 @@ module.exports = class CraftingTableController extends BaseController
options.templateName = 'crafting_table'
super options
@_parser = new InventoryParser
@_resetStackControllers()
@model.modPack.on Event.change, => @onModPackChanged()
# Event Methods ################################################################################
onModPackChanged: ->
return unless @rendered
@model.modPack.enableModsForItem @$nameField.val()
@_updateNameAutocomplete()
@_craft()
onHaveFieldChanged: ->
return unless @rendered
@model.have.clear()
@_parser.parse @$haveField.val(), @model.have
@_craft()
onIncludingToolsFieldChanged: ->
return unless @rendered
@model.includingTools = @$('input[name="including_tools"]:checked').length > 0
@_craft()
onNameFieldChanged: ->
return unless @rendered
name = @$nameField.val()
@model.name = name
@_craft()
if name.length is 0
setTimeout (=> @$nameField.blur()), Duration.snap
onNameFieldFocused: ->
return unless @rendered
@$nameField.val ""
@$nameField.autocomplete 'search'
onNameFieldKeyPress: (event)->
if event.which is Key.Return
@$nameField.autocomplete('close')
onQuantityFieldChanged: ->
return unless @rendered
@model.quantity = parseInt @$quantityField.find(":selected").val()
@_craft()
# BaseController Overrides #####################################################################
onDidRender: ->
@$haveField = @$('textarea[name="have"]')
@$includingToolsField = @$('input[name="including_tools"]')
@$nameField = @$('input[name="name"]')
@$quantityField = @$('select[name="quantity"]')
@$needList = @$('td.need table')
@$makeList = @$('td.make table')
@$resultList = @$('td.result table')
@_updateNameAutocomplete()
@_craft()
@gridController = @addChild CraftingGridController, '.view__crafting_grid', model:@model.grid
@$nextButton = @$('button[name="next"]')
@$prevButton = @$('button[name="prev"]')
super
refresh: ->
@$nameField.val @model.name
@$quantityField.val @model.quantity
if @model.includingTools
@$includingToolsField.attr 'checked', 'checked'
else
@$includingToolsField.removeAttr 'checked'
@$needList.empty()
@$makeList.empty()
@$resultList.empty()
makeController = (name, stack)=>
controller = new StackController model:stack, modPack:@model.modPack
controller.render()
this["$#{name}List"].append controller.$el
this["_#{name}Controllers"].push controller
if @model.plan?
@_resetStackControllers()
@model.plan.need.each (stack)=> makeController 'need', stack
slugs = {}
for recipe in @model.plan.steps
slug = recipe.item.slug
if not slugs[slug]?
slugs[slug] = true
stack = @model.plan.make.getStack slug
makeController 'make', stack
@model.plan.result.each (stack)=> makeController 'result', stack
super
# Backbone.View Overrides ######################################################################
events:
'input textarea[name="have"]': 'onHaveFieldChanged'
'focus input[name="name"]': 'onNameFieldFocused'
'input input[name="name"]': 'onNameFieldChanged'
'keypress input[name="name"]': 'onNameFieldKeyPress'
'input select[name="quantity"]': 'onQuantityFieldChanged'
'change input[name="including_tools"]': 'onIncludingToolsFieldChanged'
# Private Methods ##############################################################################
_craft: ->
if @model.modPack.hasRecipe @model.name
router.navigate "/item/#{encodeURIComponent(@model.name)}"
else
router.navigate "/item"
@model.craft()
@refresh()
_resetStackControllers: ->
@_needControllers = []
@_makeControllers = []
@_resultControllers = []
_updateNameAutocomplete: ->
onChanged = => @onNameFieldChanged()
@$nameField.autocomplete
source: @model.modPack.gatherRecipeNames()
delay: 0
minLength: 0
change: onChanged
close: onChanged
select: onChanged