Initial version of the new crafting table
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user