Fix support for multiblock recipes
This commit is contained in:
+22
-22
@@ -1,11 +1,11 @@
|
||||
###
|
||||
Crafting Guide - multiblock_controller.coffee
|
||||
#
|
||||
# Crafting Guide - multiblock_controller.coffee
|
||||
#
|
||||
# Copyright (c) 2014-2017 by Redwood Labs
|
||||
# All rights reserved.
|
||||
#
|
||||
|
||||
Copyright (c) 2014-2015 by Redwood Labs
|
||||
All rights reserved.
|
||||
###
|
||||
|
||||
BaseController = require '../../../base_controller'
|
||||
BaseController = require "../../../base_controller"
|
||||
ItemDisplay = require "../../../../models/site/item_display"
|
||||
|
||||
########################################################################################################################
|
||||
@@ -26,9 +26,9 @@ module.exports = class MultiblockController extends BaseController
|
||||
@::MAX_DROP_DELAY = 250 # ms
|
||||
|
||||
constructor: (options={})->
|
||||
if not options.imageLoader? then throw new Error 'options.imageLoader is required'
|
||||
if not options.modPack? then throw new Error 'options.modPack is required'
|
||||
options.templateName = 'item_page/multiblock_viewer/multiblock'
|
||||
if not options.imageLoader? then throw new Error "options.imageLoader is required"
|
||||
if not options.modPack? then throw new Error "options.modPack is required"
|
||||
options.templateName = "item_page/multiblock_viewer/multiblock"
|
||||
super options
|
||||
|
||||
@_currentLayer = 0
|
||||
@@ -64,11 +64,11 @@ module.exports = class MultiblockController extends BaseController
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onDidRender: ->
|
||||
@$outline = @$('.outline')
|
||||
@$outline = @$(".outline")
|
||||
super
|
||||
|
||||
refresh: ->
|
||||
@$el.css 'height':@_computeMinHeight(), 'width':@_computeMinWidth()
|
||||
@$el.css "height":@_computeMinHeight(), "width":@_computeMinWidth()
|
||||
|
||||
@_refreshBlockCache()
|
||||
@_refreshAllBlocks()
|
||||
@@ -77,7 +77,7 @@ module.exports = class MultiblockController extends BaseController
|
||||
# Private Methods ##############################################################################
|
||||
|
||||
_computePosition: (x, y, z, options={})->
|
||||
if not @model? then return left:0, top:-@IMAGE_SIZE, 'z-index':0, opacity:0.0
|
||||
if not @model? then return left:0, top:-@IMAGE_SIZE, "z-index":0, opacity:0.0
|
||||
|
||||
options.hideUpperLayers ?= false
|
||||
pxWidth = @$el.width()
|
||||
@@ -94,7 +94,7 @@ module.exports = class MultiblockController extends BaseController
|
||||
|
||||
zindex = ((@model.width - x) + (@model.depth - z) + ((@model.width * @model.depth) * y)) * 2
|
||||
|
||||
return left:left, top:top, 'z-index':zindex, opacity:opacity
|
||||
return left:left, top:top, "z-index":zindex, opacity:opacity
|
||||
|
||||
_computeMinHeight: ->
|
||||
return 0 unless @model?
|
||||
@@ -131,14 +131,14 @@ module.exports = class MultiblockController extends BaseController
|
||||
for z in [0...@model.depth]
|
||||
@_blockCache[x][y][z] ?= null
|
||||
|
||||
for el in @$('.block')
|
||||
for el in @$(".block")
|
||||
$el = $(el)
|
||||
@_blockCache[$el.data('x')][$el.data('y')][$el.data('z')] = $el
|
||||
@_blockCache[$el.data("x")][$el.data("y")][$el.data("z")] = $el
|
||||
|
||||
_refreshBlock: (x, y, z)->
|
||||
return unless @model?
|
||||
|
||||
stack = @model.getStackAt x, y, z
|
||||
stack = @model.getInputAt x, y, z
|
||||
$block = @_blockCache[x][y][z]
|
||||
position = @_computePosition x, y, z, hideUpperLayers:true
|
||||
move = false
|
||||
@@ -147,7 +147,7 @@ module.exports = class MultiblockController extends BaseController
|
||||
itemDisplay = new ItemDisplay stack.item
|
||||
|
||||
if not $block?
|
||||
$block = $("<img alt='#{itemDisplay.itemName}' class='block' />")
|
||||
$block = $("<img alt=\"#{itemDisplay.itemName}\" class=\"block\" />")
|
||||
$block.css position, top:-@IMAGE_SIZE, opacity:0.0
|
||||
@_registerHoverHandlers $block, y, itemDisplay
|
||||
@_imageLoader.load itemDisplay.iconUrl, $block
|
||||
@@ -155,10 +155,10 @@ module.exports = class MultiblockController extends BaseController
|
||||
@$el.append $block
|
||||
move = true
|
||||
else
|
||||
$block.attr 'src', itemDisplay.iconUrl
|
||||
$block.attr "src", itemDisplay.iconUrl
|
||||
move = true
|
||||
else if $block?
|
||||
$block.attr 'src', ''
|
||||
$block.attr "src", ""
|
||||
move = true
|
||||
|
||||
if move then _.delay (-> $block.css position), @_randomDropDelay()
|
||||
@@ -175,10 +175,10 @@ module.exports = class MultiblockController extends BaseController
|
||||
_registerHoverHandlers: ($el, y, itemDisplay)->
|
||||
startHovering = =>
|
||||
return unless y is @_currentLayer
|
||||
zIndex = parseInt($el.css('z-index')) + 1
|
||||
zIndex = parseInt($el.css("z-index")) + 1
|
||||
zIndex = if _.isNaN(zIndex) then 0 else zIndex
|
||||
|
||||
@$outline.css opacity:1.0, top:$el.css('top'), left:$el.css('left'), 'z-index':zIndex
|
||||
@$outline.css opacity:1.0, top:$el.css("top"), left:$el.css("left"), "z-index":zIndex
|
||||
@_onHovering itemDisplay
|
||||
|
||||
if @_hoverTimer? then clearTimeout @_hoverTimer
|
||||
|
||||
@@ -5,19 +5,20 @@
|
||||
# All rights reserved.
|
||||
#
|
||||
|
||||
BaseController = require '../../base_controller'
|
||||
InventoryController = require '../../common/inventory/inventory_controller'
|
||||
MultiblockController = require './multiblock/multiblock_controller'
|
||||
BaseController = require "../../base_controller"
|
||||
InventoryController = require "../../common/inventory/inventory_controller"
|
||||
MultiblockController = require "./multiblock/multiblock_controller"
|
||||
MultiblockDisplay = require "../../../models/site/multiblock_display"
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
module.exports = class MultiblockViewerController extends BaseController
|
||||
|
||||
constructor: (options={})->
|
||||
if not options.imageLoader? then throw new Error 'options.imageLoader is required'
|
||||
if not options.modPack? then throw new Error 'options.modPack is required'
|
||||
if not options.router? then throw new Error 'options.router is required'
|
||||
options.templateName = 'item_page/multiblock_viewer'
|
||||
if not options.imageLoader? then throw new Error "options.imageLoader is required"
|
||||
if not options.modPack? then throw new Error "options.modPack is required"
|
||||
if not options.router? then throw new Error "options.router is required"
|
||||
options.templateName = "item_page/multiblock_viewer"
|
||||
super options
|
||||
|
||||
@_imageLoader = options.imageLoader
|
||||
@@ -28,66 +29,70 @@ module.exports = class MultiblockViewerController extends BaseController
|
||||
# Event Methods ################################################################################
|
||||
|
||||
onBackClicked: ->
|
||||
return if @$backButton.hasClass 'disabled'
|
||||
tracker.trackEvent c.tracking.category.multiblock, 'back'
|
||||
return if @$backButton.hasClass "disabled"
|
||||
tracker.trackEvent c.tracking.category.multiblock, "back"
|
||||
@multiblockController.goBackLayer()
|
||||
@refresh()
|
||||
|
||||
onNextClicked: ->
|
||||
return if @$nextButton.hasClass 'disabled'
|
||||
tracker.trackEvent c.tracking.category.multiblock, 'next'
|
||||
return if @$nextButton.hasClass "disabled"
|
||||
tracker.trackEvent c.tracking.category.multiblock, "next"
|
||||
@multiblockController.goNextLayer()
|
||||
@refresh()
|
||||
|
||||
onBlockHovered: (itemDisplay)->
|
||||
if itemDisplay?
|
||||
@$captionText.html itemDisplay.itemName
|
||||
@$captionText.html itemDisplay.name
|
||||
@_imageLoader.load itemDisplay.iconUrl, @$captionIcon
|
||||
else
|
||||
@$captionText.html ' '
|
||||
@$captionIcon.attr 'src', '/images/empty.png'
|
||||
@$captionText.html " "
|
||||
@$captionIcon.attr "src", "/images/empty.png"
|
||||
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onDidRender: ->
|
||||
@completeInventoryController = @addChild InventoryController, '.view__inventory.complete',
|
||||
@completeInventoryController = @addChild InventoryController, ".view__inventory.complete",
|
||||
editable: false
|
||||
imageLoader: @_imageLoader
|
||||
modPack: @_modPack
|
||||
router: @_router
|
||||
|
||||
@layerInventoryController = @addChild InventoryController, '.view__inventory.layer',
|
||||
@layerInventoryController = @addChild InventoryController, ".view__inventory.layer",
|
||||
editable: false
|
||||
imageLoader: @_imageLoader
|
||||
modPack: @_modPack
|
||||
router: @_router
|
||||
|
||||
@multiblockController = @addChild MultiblockController, '.view__multiblock',
|
||||
@multiblockController = @addChild MultiblockController, ".view__multiblock",
|
||||
imageLoader: @_imageLoader
|
||||
modPack: @_modPack
|
||||
onHovering: (itemDisplay)=> @onBlockHovered(itemDisplay)
|
||||
|
||||
@$backButton = @$('.button.back')
|
||||
@$nextButton = @$('.button.next')
|
||||
@$captionText = @$('.caption p')
|
||||
@$captionIcon = @$('.caption img')
|
||||
@$backButton = @$(".button.back")
|
||||
@$nextButton = @$(".button.next")
|
||||
@$captionText = @$(".caption p")
|
||||
@$captionIcon = @$(".caption img")
|
||||
super
|
||||
|
||||
onWillChangeModel: (oldModel, newModel)->
|
||||
@_display = new MultiblockDisplay newModel
|
||||
super oldModel, newModel
|
||||
|
||||
refresh: ->
|
||||
if @model?
|
||||
@completeInventoryController.model = @model.inventory
|
||||
@layerInventoryController.model = @model.getLayerInventory @multiblockController.currentLayer
|
||||
if @model? and @_display?
|
||||
@completeInventoryController.model = @_display.getInventory()
|
||||
@layerInventoryController.model = @_display.getInventory @multiblockController.currentLayer
|
||||
@multiblockController.model = @model
|
||||
|
||||
if @multiblockController.hasBackLayer()
|
||||
@$backButton.removeClass 'disabled'
|
||||
@$backButton.removeClass "disabled"
|
||||
else
|
||||
@$backButton.addClass 'disabled'
|
||||
@$backButton.addClass "disabled"
|
||||
|
||||
if @multiblockController.hasNextLayer()
|
||||
@$nextButton.removeClass 'disabled'
|
||||
@$nextButton.removeClass "disabled"
|
||||
else
|
||||
@$nextButton.addClass 'disabled'
|
||||
@$nextButton.addClass "disabled"
|
||||
|
||||
super
|
||||
|
||||
@@ -95,5 +100,5 @@ module.exports = class MultiblockViewerController extends BaseController
|
||||
|
||||
events: ->
|
||||
_.extend super,
|
||||
'click .button.back': 'onBackClicked'
|
||||
'click .button.next': 'onNextClicked'
|
||||
"click .button.back": "onBackClicked"
|
||||
"click .button.next": "onNextClicked"
|
||||
|
||||
Reference in New Issue
Block a user