Refactor ModVersion into Mod and ModVersion
* Remove V1 of the mod version parser and shift V2 up to be V1 * Add a parser for mod.cg files, and refactor the the mod-version.cg files to push the appropriate content up to the mod.cg * Remove the concept of "silent" from BaseModel along with logging each event as they are fired (which is what really prompted the need for it in the first place) * Move use of the Storage class to be completely the province of the controllers most closely related to models affected * Convert the ModVersionController to the ModController and have it take on responsibility for choosing the mod version * Update BaseModel to support simple accessors for the current state * Update CraftingPlan to be able to remove uncraftable items * Implement the Mod model
This commit is contained in:
@@ -105,7 +105,7 @@ module.exports = class BaseController extends Backbone.View
|
||||
# Object Overrides #############################################################################
|
||||
|
||||
toString: ->
|
||||
return "#{@constructor.name}(#{@cid})"
|
||||
return "#{@constructor.name}.#{@cid}"
|
||||
|
||||
# Private Methods ##############################################################################
|
||||
|
||||
|
||||
@@ -25,8 +25,6 @@ module.exports = class CraftingTableController extends BaseController
|
||||
@imageLoader = options.imageLoader
|
||||
@modPack = options.modPack
|
||||
|
||||
@model.plan.silent = false
|
||||
|
||||
# Event Methods ################################################################################
|
||||
|
||||
onNextClicked: ->
|
||||
|
||||
@@ -26,8 +26,8 @@ module.exports = class ItemPageController extends BaseController
|
||||
options.templateName = 'item_page'
|
||||
super options
|
||||
|
||||
@imageLoader = options.imageLoader
|
||||
@storage = options.storage
|
||||
@_imageLoader = options.imageLoader
|
||||
@_storage = options.storage
|
||||
|
||||
# Event Methods ################################################################################
|
||||
|
||||
@@ -37,23 +37,21 @@ module.exports = class ItemPageController extends BaseController
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onWillRender: ->
|
||||
@storage.register 'crafting-plan', @model.plan, 'includingTools'
|
||||
@model.modPack.on Event.add, (modVersion)=>
|
||||
@storage.register "mod-version:#{modVersion.slug}", modVersion, 'enabled'
|
||||
@_storage.register 'crafting-plan', @model.plan, 'includingTools'
|
||||
super
|
||||
|
||||
onDidRender: ->
|
||||
@wantController = @addChild InventoryController, '.want',
|
||||
editable: true
|
||||
icon: '/images/fishing_rod.png'
|
||||
imageLoader: @imageLoader
|
||||
imageLoader: @_imageLoader
|
||||
model: @model.plan.want
|
||||
modPack: @model.modPack
|
||||
title: 'Items you want'
|
||||
|
||||
@haveController = @addChild InventoryController, '.have',
|
||||
editable: true,
|
||||
imageLoader: @imageLoader
|
||||
imageLoader: @_imageLoader
|
||||
model: @model.plan.have
|
||||
modPack: @model.modPack
|
||||
nameFinder: new NameFinder @model.modPack, includeGatherable:true
|
||||
@@ -62,17 +60,20 @@ module.exports = class ItemPageController extends BaseController
|
||||
@needController = @addChild InventoryController, '.need',
|
||||
editable: false
|
||||
icon: '/images/boots.png'
|
||||
imageLoader: @imageLoader
|
||||
imageLoader: @_imageLoader
|
||||
model: @model.plan.need
|
||||
modPack: @model.modPack
|
||||
title: "Items you'll need"
|
||||
|
||||
@craftingTableController = @addChild CraftingTableController, '.view__crafting_table',
|
||||
imageLoader: @imageLoader
|
||||
imageLoader: @_imageLoader
|
||||
model: @model.table
|
||||
modPack: @model.modPack
|
||||
|
||||
@modPackController = @addChild ModPackController, '.view__mod_pack', model:@model.modPack
|
||||
@modPackController = @addChild ModPackController, '.view__mod_pack',
|
||||
model: @model.modPack
|
||||
plan: @model.plan
|
||||
storage: @_storage
|
||||
|
||||
@$('.want .toolbar').append '<label><input class="includeTools" type="checkbox"> include tools</label>'
|
||||
@$includeToolsBox = @$('.includeTools')
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
###
|
||||
Crafting Guide - mod_controller.coffee
|
||||
|
||||
Copyright (c) 2014-2015 by Redwood Labs
|
||||
All rights reserved.
|
||||
###
|
||||
|
||||
BaseController = require './base_controller'
|
||||
{Event} = require '../constants'
|
||||
Mod = require '../models/mod'
|
||||
{RequiredMods} = require '../constants'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
module.exports = class ModController extends BaseController
|
||||
|
||||
constructor: (options={})->
|
||||
if not options.model? then throw new Error 'options.model is required'
|
||||
if not options.plan? then throw new Error 'options.plan is required'
|
||||
options.templateName = 'mod'
|
||||
super options
|
||||
|
||||
@_plan = options.plan
|
||||
@_storage = options.storage
|
||||
|
||||
# Event Methods ################################################################################
|
||||
|
||||
onEnabledChanged: ->
|
||||
return unless @rendered
|
||||
enabled = @$(':checked').length > 0
|
||||
if enabled
|
||||
@model.activeVersion = Mod.Version.Latest
|
||||
else
|
||||
@model.activeVersion = Mod.Version.None
|
||||
@_plan.removeUncraftableItems()
|
||||
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onWillRender: ->
|
||||
if not @model.isLoaded then @model.fetch()
|
||||
if @_storage? then @_storage.register "mod:#{@model.slug}", @model, 'activeVersion'
|
||||
|
||||
@model.on Event.change + ':activeModVersion', (mod, modVersion)=>
|
||||
if modVersion? and not modVersion.isLoaded then modVersion.fetch()
|
||||
|
||||
onDidRender: ->
|
||||
@$enabled = @$('td:nth-child(1) input')
|
||||
@$name = @$('td:nth-child(2) p')
|
||||
@$description = @$('td:nth-child(3) p')
|
||||
super
|
||||
|
||||
refresh: ->
|
||||
if @model.slug in RequiredMods
|
||||
@$enabled.attr 'checked', 'checked'
|
||||
@$enabled.attr 'disabled', 'disabled'
|
||||
else
|
||||
@$enabled.removeAttr 'disabled'
|
||||
if @model.activeVersion is Mod.Version.None
|
||||
@$enabled.removeAttr 'checked'
|
||||
else
|
||||
@$enabled.attr 'checked', 'checked'
|
||||
|
||||
@$name.html "#{@model.name}"
|
||||
@$description.html "#{@model.description}"
|
||||
|
||||
# Backbone.View Overrides ######################################################################
|
||||
|
||||
events:
|
||||
'change input[type="checkbox"]': 'onEnabledChanged'
|
||||
@@ -5,22 +5,25 @@ Copyright (c) 2014-2015 by Redwood Labs
|
||||
All rights reserved.
|
||||
###
|
||||
|
||||
BaseController = require './base_controller'
|
||||
{DefaultModVersions} = require '../constants'
|
||||
{Duration} = require '../constants'
|
||||
ModVersion = require '../models/mod_version'
|
||||
ModVersionController = require './mod_version_controller'
|
||||
BaseController = require './base_controller'
|
||||
{DefaultMods} = require '../constants'
|
||||
{Duration} = require '../constants'
|
||||
Mod = require '../models/mod'
|
||||
ModController = require './mod_controller'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
module.exports = class ModPackController extends BaseController
|
||||
|
||||
constructor: (options={})->
|
||||
if not options.model? then throw new Error "options.model is required"
|
||||
options.templateName = 'mod_pack'
|
||||
if not options.model? then throw new Error 'options.model is required'
|
||||
if not options.plan? then throw new Error 'options.plan is required'
|
||||
options.templateName = 'mod_pack'
|
||||
super options
|
||||
|
||||
@_controllers = []
|
||||
@_plan = options.plan
|
||||
@_storage = options.storage
|
||||
|
||||
# Event Methods ################################################################################
|
||||
|
||||
@@ -31,10 +34,8 @@ module.exports = class ModPackController extends BaseController
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onWillRender: ->
|
||||
for attributes in DefaultModVersions
|
||||
modVersion = new ModVersion attributes
|
||||
modVersion.fetch()
|
||||
@model.addModVersion modVersion
|
||||
for name in DefaultMods
|
||||
@model.addMod new Mod name:name
|
||||
|
||||
onDidRender: ->
|
||||
@$table = @$('table')
|
||||
@@ -48,14 +49,14 @@ module.exports = class ModPackController extends BaseController
|
||||
return
|
||||
|
||||
index = 0
|
||||
modVersions = @model.getModVersions()
|
||||
while index < Math.min @_controllers.length, modVersions.length
|
||||
mods = @model.getMods()
|
||||
while index < Math.min @_controllers.length, mods.length
|
||||
controller = @_controllers[index]
|
||||
controller.model = modVersions[index]
|
||||
controller.model = mods[index]
|
||||
index++
|
||||
|
||||
while @_controllers.length < modVersions.length
|
||||
controller = new ModVersionController model:modVersions[index]
|
||||
while @_controllers.length < mods.length
|
||||
controller = new ModController model:mods[index], plan:@_plan, storage:@_storage
|
||||
controller.render()
|
||||
@_controllers.push controller
|
||||
controller.$el.hide duration:0
|
||||
@@ -63,7 +64,7 @@ module.exports = class ModPackController extends BaseController
|
||||
controller.$el.slideDown duration:Duration.normal
|
||||
index++
|
||||
|
||||
while @_controllers.length > modVersions.length
|
||||
while @_controllers.length > mods.length
|
||||
controller = @_controllers.pop()
|
||||
controller.$el.slideUp duration:Duration.normal, complete:-> controller.$el.remove()
|
||||
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
###
|
||||
Crafting Guide - mod_version_controller.coffee
|
||||
|
||||
Copyright (c) 2014-2015 by Redwood Labs
|
||||
All rights reserved.
|
||||
###
|
||||
|
||||
BaseController = require './base_controller'
|
||||
{RequiredMods} = require '../constants'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
module.exports = class ModVersionController extends BaseController
|
||||
|
||||
constructor: (options={})->
|
||||
if not options.model? then throw new Error "options.model is required"
|
||||
options.templateName = 'mod_version'
|
||||
super options
|
||||
|
||||
# Event Methods ################################################################################
|
||||
|
||||
onEnabledChanged: ->
|
||||
return unless @rendered
|
||||
|
||||
@model.enabled = @$(':checked').length > 0
|
||||
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onDidRender: ->
|
||||
@$enabled = @$('td:nth-child(1) input')
|
||||
@$name = @$('td:nth-child(2) p')
|
||||
@$description = @$('td:nth-child(3) p')
|
||||
super
|
||||
|
||||
refresh: ->
|
||||
if @model.name in RequiredMods
|
||||
@$enabled.attr 'checked', 'checked'
|
||||
@$enabled.attr 'disabled', 'disabled'
|
||||
else
|
||||
@$enabled.removeAttr 'disabled'
|
||||
if @model.enabled then @$enabled.attr('checked', 'checked') else @$enabled.removeAttr('checked')
|
||||
|
||||
@$name.html "#{@model.name} (#{@model.version})"
|
||||
@$description.html "#{@model.description}"
|
||||
|
||||
# Backbone.View Overrides ######################################################################
|
||||
|
||||
events:
|
||||
'change input[type="checkbox"]': 'onEnabledChanged'
|
||||
Reference in New Issue
Block a user