mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-23 23:58:02 -05:00
Merge branch 'master' of https://github.com/codecombat/codecombat
This commit is contained in:
commit
d79d66c175
15 changed files with 54 additions and 118 deletions
|
@ -4,7 +4,7 @@ CodeCombat
|
|||
![](https://dl.dropboxusercontent.com/u/138899/GitHub%20Wikis/readme_00.png)
|
||||
[![Build Status](https://travis-ci.org/codecombat/codecombat.png?branch=master)](https://travis-ci.org/codecombat/codecombat)
|
||||
|
||||
CodeCombat is a multiplayer programming game for learning how to code. **See the [Archmage developer wiki](https://github.com/codecombat/codecombat/wiki) for a dev setup guide, extensive documentation, and much more.**
|
||||
CodeCombat is a multiplayer programming game for learning how to code. **See the [Archmage developer wiki](https://github.com/codecombat/codecombat/wiki/Archmage-Home) for a dev setup guide, extensive documentation, and much more.**
|
||||
|
||||
It's both a startup and a community project, completely open source under the [MIT and Creative Commons licenses](http://codecombat.com/legal). It's the largest open source [CoffeeScript](http://coffeescript.org/) project by lines of code, and since it's a game (with [really cool tech](https://github.com/codecombat/codecombat/wiki/Third-party-software-and-services)), it's really fun to hack on. Join us in teaching the world to code! Your contribution will go on to show millions of players how cool programming can be.
|
||||
|
||||
|
|
|
@ -13,7 +13,9 @@ module.exports = class SpriteBuilder
|
|||
|
||||
buildMovieClip: (animationName, movieClipArgs...) ->
|
||||
animData = @animationStore[animationName]
|
||||
console.log "couldn't find animData from", @animationStore, "for", animationName unless animData
|
||||
unless animData
|
||||
console.error "couldn't find animData from", @animationStore, "for", animationName
|
||||
return null
|
||||
locals = {}
|
||||
_.extend locals, @buildMovieClipShapes(animData.shapes)
|
||||
_.extend locals, @buildMovieClipContainers(animData.containers)
|
||||
|
|
|
@ -91,6 +91,7 @@ module.exports = class ThangType extends CocoModel
|
|||
for animation in @requiredRawAnimations()
|
||||
name = animation.animation
|
||||
mc = @vectorParser.buildMovieClip name
|
||||
continue unless mc
|
||||
@builder.addMovieClip mc, null, animation.scale * @options.resolutionFactor
|
||||
framesMap[animation.scale + "_" + name] = @builder._animations[name].frames
|
||||
|
||||
|
@ -98,6 +99,7 @@ module.exports = class ThangType extends CocoModel
|
|||
continue if name is 'portrait'
|
||||
scale = action.scale ? @get('scale') ? 1
|
||||
frames = framesMap[scale + "_" + action.animation]
|
||||
continue unless frames
|
||||
frames = @mapFrames(action.frames, frames[0]) if action.frames?
|
||||
next = true
|
||||
next = action.goesTo if action.goesTo
|
||||
|
@ -108,6 +110,7 @@ module.exports = class ThangType extends CocoModel
|
|||
continue if name is 'portrait'
|
||||
scale = @options.resolutionFactor * (action.scale or @get('scale') or 1)
|
||||
s = @vectorParser.buildContainerFromStore(action.container)
|
||||
continue unless s
|
||||
frame = @builder.addFrame(s, s.bounds, scale)
|
||||
@builder.addAnimation name, [frame], false
|
||||
|
||||
|
|
|
@ -9,4 +9,7 @@
|
|||
bottom: 0
|
||||
top: 50px
|
||||
border: 2px solid black
|
||||
border-top: none
|
||||
border-top: none
|
||||
|
||||
.active > a, .active > a:hover, .active > a:focus
|
||||
background-color: white !important
|
|
@ -16,10 +16,13 @@
|
|||
li.navbar-btn
|
||||
margin-right: 5px
|
||||
|
||||
.nav-tabs
|
||||
border-bottom: 0 !important
|
||||
.active > a, .active > a:hover, .active > a:focus
|
||||
background-color: #eee !important
|
||||
#level-editor-top-nav
|
||||
.nav-tabs
|
||||
border-bottom: 0 !important
|
||||
.active > a, .active > a:hover, .active > a:focus
|
||||
background-color: $BG !important
|
||||
border-color: darken($BG, 50%)
|
||||
border-bottom: 0
|
||||
|
||||
.outer-content
|
||||
background-color: $BG
|
||||
|
|
|
@ -9,4 +9,7 @@
|
|||
bottom: 0
|
||||
top: 50px
|
||||
border: 2px solid black
|
||||
border-top: none
|
||||
border-top: none
|
||||
|
||||
.active > a, .active > a:hover, .active > a:focus
|
||||
background-color: white !important
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
.well
|
||||
text-align: center
|
||||
input
|
||||
height: 14px
|
||||
padding: 10px
|
||||
|
||||
#thang-props
|
||||
|
@ -15,51 +13,3 @@
|
|||
#all-thangs-link
|
||||
float: left
|
||||
cursor: pointer
|
||||
|
||||
//#editor-level-thang-edit-modal
|
||||
// h3
|
||||
// display: inline-block
|
||||
//
|
||||
// .modal-body
|
||||
// height: 400px
|
||||
//
|
||||
// #choose-component-sidebar
|
||||
// width: 40%
|
||||
// box-sizing: border-box
|
||||
// padding: 10px
|
||||
// position: absolute
|
||||
// right: 0
|
||||
// height: 100%
|
||||
// top: 0
|
||||
//
|
||||
// h4
|
||||
// margin-top: 0
|
||||
//
|
||||
// ul.available-components-list
|
||||
// position: absolute
|
||||
// top: 40px
|
||||
// bottom: 0
|
||||
// right: 0
|
||||
// overflow: scroll
|
||||
// width: 100%
|
||||
//
|
||||
// margin: 0
|
||||
// list-style-type: none
|
||||
//
|
||||
// li
|
||||
// cursor: pointer
|
||||
//
|
||||
// #edit-thang-treema
|
||||
// box-sizing: border-box
|
||||
// float: left
|
||||
// width: 55%
|
||||
// position: absolute
|
||||
// top: 0
|
||||
// bottom: 0
|
||||
// overflow: scroll
|
||||
//
|
||||
// .treema-ace.treema-edit
|
||||
// max-width: 100%
|
||||
// & > div
|
||||
// width: inherit
|
||||
//
|
||||
|
|
|
@ -47,7 +47,7 @@ block content
|
|||
| Use the Level Editor in these steps, give or take:
|
||||
ul
|
||||
li
|
||||
a(href="https://docs.google.com/document/d/117tMcL95T1KY8BDisr0iGi5Frb2ZvBJTC0us5hyQkJY/edit?usp=sharing", data-i18n="contribute.artisan_join_step1") Read the documentation.
|
||||
a(href="https://github.com/codecombat/codecombat/wiki/Artisan-Home", data-i18n="contribute.artisan_join_step1") Read the documentation.
|
||||
li
|
||||
a(href="/editor/level", data-i18n="contribute.artisan_join_step2") Create a new level and explore existing levels.
|
||||
li
|
||||
|
|
|
@ -154,7 +154,7 @@ block content
|
|||
| Use the Level Editor in these steps, give or take:
|
||||
ul
|
||||
li
|
||||
a(href="https://docs.google.com/document/d/117tMcL95T1KY8BDisr0iGi5Frb2ZvBJTC0us5hyQkJY/edit?usp=sharing", data-i18n="contribute.artisan_join_step1") Read the documentation.
|
||||
a(href="https://github.com/codecombat/codecombat/wiki/Artisan-Home", data-i18n="contribute.artisan_join_step1") Read the documentation.
|
||||
li
|
||||
a(href="/editor/level", data-i18n="contribute.artisan_join_step2") Create a new level and explore existing levels.
|
||||
li
|
||||
|
|
|
@ -9,18 +9,18 @@ nav.navbar.navbar-default(role='navigation')
|
|||
.collapse.navbar-collapse
|
||||
ul.nav.navbar-nav.nav-tabs
|
||||
li.active
|
||||
a(href="#code" data-toggle="tab") Code
|
||||
a(href="#component-code" data-toggle="tab") Code
|
||||
li
|
||||
a(href="#config-schema" data-toggle="tab") Config Schema
|
||||
a(href="#component-config-schema" data-toggle="tab") Config Schema
|
||||
li
|
||||
a(href="#settings" data-toggle="tab") Settings
|
||||
a(href="#component-settings" data-toggle="tab") Settings
|
||||
ul.nav.navbar-nav.navbar-right
|
||||
li(data-i18n="editor.level_component_btn_new").btn.btn-primary.navbar-btn#create-new-component-button Create New Component
|
||||
|
||||
.tab-content
|
||||
.tab-pane.active#code
|
||||
.tab-pane.active#component-code
|
||||
#component-code-editor
|
||||
.tab-pane#config-schema
|
||||
.tab-pane#component-config-schema
|
||||
#config-schema-treema
|
||||
.tab-pane#settings
|
||||
.tab-pane#component-settings
|
||||
#edit-component-treema
|
||||
|
|
|
@ -62,46 +62,6 @@ block outer_content
|
|||
a(data-delay="3000", href="#", data-i18n="common.delay_3_sec") 3 seconds
|
||||
a(data-delay="5000", href="#", data-i18n="common.delay_5_sec") 5 seconds
|
||||
a(data-delay="90019001", href="#", data-i18n="common.manual") Manual
|
||||
|
||||
|
||||
|
||||
//.top-controls-area
|
||||
// h2.level-title-header
|
||||
// span(data-i18n="editor.level_title") Level Editor
|
||||
// span :
|
||||
// span.level-title #{level.attributes.name}
|
||||
//
|
||||
// .level-control-buttons
|
||||
// button(data-toggle="coco-modal", data-target="modal/revert", data-i18n="revert.revert").btn.btn-primary#revert-button Revert
|
||||
// button(data-i18n="common.save").btn.btn-primary#commit-level-start-button Save
|
||||
// button(data-i18n="common.fork").btn.btn-primary#fork-level-start-button Fork
|
||||
// .btn-group.play-button-group
|
||||
// button(title="⌃↩ or ⌘↩: Play preview of current level", data-i18n="common.play")#play-button.btn.btn-inverse.banner Play!
|
||||
// button.btn.btn-inverse.banner.dropdown-toggle(data-toggle="dropdown")
|
||||
// i.icon-cog.icon-white
|
||||
//
|
||||
//
|
||||
// ul.dropdown-menu
|
||||
// li
|
||||
// span(data-i18n="editor.level_some_options").dropdown-menu-header Some Options?
|
||||
// li.divider
|
||||
// li
|
||||
// a(data-delay="1000", href="#", data-i18n="common.delay_1_sec") 1 second
|
||||
// a(data-delay="3000", href="#", data-i18n="common.delay_3_sec") 3 seconds
|
||||
// a(data-delay="5000", href="#", data-i18n="common.delay_5_sec") 5 seconds
|
||||
// a(data-delay="90019001", href="#", data-i18n="common.manual") Manual
|
||||
//
|
||||
// ul.nav.nav-tabs
|
||||
// li.active
|
||||
// a(href="#editor-level-thangs-tab-view", data-toggle="tab", data-i18n="editor.level_tab_thangs") Thangs
|
||||
// li
|
||||
// a(href="#editor-level-scripts-tab-view", data-toggle="tab", data-i18n="editor.level_tab_scripts") Scripts
|
||||
// li
|
||||
// a(href="#editor-level-settings-tab-view", data-toggle="tab", data-i18n="editor.level_tab_settings") Settings
|
||||
// li
|
||||
// a(href="#editor-level-components-tab-view", data-toggle="tab", data-i18n="editor.level_tab_components") Components
|
||||
// li
|
||||
// a(href="#editor-level-systems-tab-view", data-toggle="tab", data-i18n="editor.level_tab_systems") Systems
|
||||
|
||||
div.tab-content#level-editor-tabs
|
||||
div.tab-pane.active#editor-level-thangs-tab-view
|
||||
|
|
|
@ -9,18 +9,18 @@ nav.navbar.navbar-default(role='navigation')
|
|||
.collapse.navbar-collapse
|
||||
ul.nav.navbar-nav.nav-tabs
|
||||
li.active
|
||||
a(href="#code" data-toggle="tab") Code
|
||||
a(href="#system-code" data-toggle="tab") Code
|
||||
li
|
||||
a(href="#config-schema" data-toggle="tab") Config Schema
|
||||
a(href="#system-config-schema" data-toggle="tab") Config Schema
|
||||
li
|
||||
a(href="#settings" data-toggle="tab") Settings
|
||||
a(href="#system-settings" data-toggle="tab") Settings
|
||||
ul.nav.navbar-nav.navbar-right
|
||||
li(data-i18n="editor.level_system_btn_new").btn.btn-primary.navbar-btn#create-new-system-button Create New System
|
||||
|
||||
.tab-content
|
||||
.tab-pane.active#code
|
||||
.tab-pane.active#system-code
|
||||
#system-code-editor
|
||||
.tab-pane#config-schema
|
||||
.tab-pane#system-config-schema
|
||||
#config-schema-treema
|
||||
.tab-pane#settings
|
||||
.tab-pane#system-settings
|
||||
#edit-system-treema
|
||||
|
|
|
@ -41,10 +41,12 @@ module.exports = class ThangTypeEditView extends View
|
|||
@thangType = new ThangType(_id: @thangTypeID)
|
||||
@thangType.saveBackups = true
|
||||
@thangType.fetch()
|
||||
@thangType.once('sync', @onThangTypeSync)
|
||||
@thangType.schema().once 'sync', @onThangTypeSync, @
|
||||
@thangType.once 'sync', @onThangTypeSync, @
|
||||
@refreshAnimation = _.debounce @refreshAnimation, 500
|
||||
|
||||
onThangTypeSync: =>
|
||||
onThangTypeSync: ->
|
||||
return unless @thangType.loaded and ThangType.hasSchema()
|
||||
@startsLoading = false
|
||||
@files = new DocumentFiles(@thangType)
|
||||
@files.fetch()
|
||||
|
@ -210,6 +212,7 @@ module.exports = class ThangTypeEditView extends View
|
|||
showMovieClip: (animationName) ->
|
||||
vectorParser = new SpriteBuilder(@thangType)
|
||||
movieClip = vectorParser.buildMovieClip(animationName)
|
||||
return unless movieClip
|
||||
reg = @thangType.get('positions')?.registration
|
||||
if reg
|
||||
movieClip.regX = -reg.x
|
||||
|
@ -303,13 +306,18 @@ module.exports = class ThangTypeEditView extends View
|
|||
|
||||
clearRawData: ->
|
||||
@thangType.resetRawData()
|
||||
@thangType.set 'actions', undefined
|
||||
@clearDisplayObject()
|
||||
@treema.set('/', @getThangData())
|
||||
|
||||
getThangData: ->
|
||||
data = _.cloneDeep(@thangType.attributes)
|
||||
data = _.pick data, (value, key) => not (key in ['components'])
|
||||
|
||||
buildTreema: ->
|
||||
data = _.cloneDeep(@thangType.attributes)
|
||||
data = @getThangData()
|
||||
schema = _.cloneDeep ThangType.schema.attributes
|
||||
schema.properties = _.pick schema.properties, (value, key) => not (key in ['components'])
|
||||
data = _.pick data, (value, key) => not (key in ['components'])
|
||||
options =
|
||||
data: data
|
||||
schema: schema
|
||||
|
|
|
@ -13,6 +13,7 @@ module.exports = class RevertModal extends ModalView
|
|||
id = $(e.target).val()
|
||||
CocoModel.backedUp[id].revert()
|
||||
$(e.target).closest('tr').remove()
|
||||
@reloadOnClose = true
|
||||
|
||||
getRenderData: ->
|
||||
c = super()
|
||||
|
@ -20,4 +21,7 @@ module.exports = class RevertModal extends ModalView
|
|||
models = (m for m in models when m.hasLocalChanges())
|
||||
c.models = models
|
||||
c
|
||||
|
||||
|
||||
onHidden: ->
|
||||
console.log 'reload?', @reloadOnClose
|
||||
location.reload() if @reloadOnClose
|
||||
|
|
|
@ -499,4 +499,4 @@ module.exports = class SpellView extends View
|
|||
super()
|
||||
@firepad?.dispose()
|
||||
@ace.destroy()
|
||||
@debugView.destroy()
|
||||
@debugView?.destroy()
|
||||
|
|
Loading…
Reference in a new issue