Sending flag history to the World for to make flag Thangs during simulation.

This commit is contained in:
Nick Winter 2014-08-23 17:26:56 -07:00
parent 2e23247521
commit f59084e651
12 changed files with 93 additions and 29 deletions

View file

@ -459,9 +459,9 @@ self.finalizePreload = function finalizePreload() {
self.world.finalizePreload(self.onWorldLoaded);
};
self.updateFlags = function updateFlags(flags) {
self.addFlagEvent = function addFlagEvent(flagEvent) {
if(!self.world || self.world.framesSerializedSoFar == self.world.frames.length) return;
self.world.updateFlags(flags);
self.world.addFlagEvent(flagEvent);
};
self.addEventListener('message', function(event) {

View file

@ -13,7 +13,7 @@ module.exports = class Angel extends CocoClass
abortTimeoutDuration: 500 # give in-process or dying workers this long to give up
subscriptions:
'self-wizard:target-changed': 'onSelfWizardTargetChanged'
'level:flag-updated': 'onFlagEvent'
constructor: (@shared) ->
super()
@ -208,10 +208,9 @@ module.exports = class Angel extends CocoClass
@worker.addEventListener 'message', @onWorkerMessage
@worker.creationTime = new Date()
onSelfWizardTargetChanged: (e) ->
onFlagEvent: (e) ->
return unless @running and @work.realTime
targetPos = e.sender.targetPos
@worker.postMessage func: 'updateFlags', args: [{type: 'wizard', targetPos: targetPos}]
@worker.postMessage func: 'addFlagEvent', args: e
#### Synchronous code for running worlds on main thread (profiling / IE9) ####

View file

@ -35,10 +35,6 @@ module.exports = class CoordinateDisplay extends createjs.Container
onMouseOut: (e) -> @mouseInBounds = false
onMouseMove: (e) ->
if @mouseInBounds and key.shift
$('#surface').addClass('flag-cursor') unless $('#surface').hasClass('flag-cursor')
else if @mouseInBounds
$('#surface').removeClass('flag-cursor') if $('#surface').hasClass('flag-cursor')
wop = @camera.screenToWorld x: e.x, y: e.y
wop.x = Math.round(wop.x)
wop.y = Math.round(wop.y)

View file

@ -37,6 +37,8 @@ module.exports = class Label extends CocoClass
build: ->
@layer.removeChild @background if @background
@layer.removeChild @label if @label
@label = null
@background = null
return unless @text # null or '' should both be skipped
o = @buildLabelOptions()
@layer.addChild @label = @buildLabel o
@ -53,6 +55,17 @@ module.exports = class Label extends CocoClass
@label.y = @background.y = @sprite.imageObject.y + offset.y
null
show: ->
return unless @label
@layer.addChild @label
@layer.addChild @background
@layer.updateLayerOrder()
hide: ->
return unless @label
@layer.removeChild @background
@layer.removeChild @label
buildLabelOptions: ->
o = {}
st = {dialogue: 'D', say: 'S', name: 'N'}[@style]

View file

@ -69,6 +69,7 @@ module.exports = Surface = class Surface extends CocoClass
'camera:zoom-updated': 'onZoomUpdated'
'playback:real-time-playback-started': 'onRealTimePlaybackStarted'
'playback:real-time-playback-ended': 'onRealTimePlaybackEnded'
'level:flag-selected': 'onFlagSelected'
shortcuts:
'ctrl+\\, ⌘+\\': 'onToggleDebug'
@ -526,7 +527,9 @@ module.exports = Surface = class Surface extends CocoClass
onMouseDown: (e) =>
return if @disabled
onBackground = not @stage.hitTest e.stageX, e.stageY
Backbone.Mediator.publish 'surface:stage-mouse-down', onBackground: onBackground, x: e.stageX, y: e.stageY, originalEvent: e
event = onBackground: onBackground, x: e.stageX, y: e.stageY, originalEvent: e
Backbone.Mediator.publish 'surface:stage-mouse-down', event
@placeFlag event if @realTime
onMouseUp: (e) =>
return if @disabled
@ -616,10 +619,35 @@ module.exports = Surface = class Surface extends CocoClass
onRealTimePlaybackStarted: (e) ->
@realTime = true
@onResize()
@spriteBoss.selfWizardSprite?.imageObject.visible = false
@flags = {}
@flagHistory = []
onRealTimePlaybackEnded: (e) ->
@realTime = false
@onResize()
@spriteBoss.selfWizardSprite?.imageObject.visible = true
onFlagSelected: (e) ->
@canvas.addClass("flag-selected")
@flagColor = e.color
placeFlag: (e) ->
return unless @flagColor
wop = @camera.screenToWorld x: e.x, y: e.y
targetPos = x: wop.x, y: wop.y
flag = player: me.id, team: me.team, color: @flagColor, targetPos: targetPos, time: @world.dt * @world.frames.length + 1, active: true
@flags[@flagColor] = flag
@flagHistory.push flag
Backbone.Mediator.publish 'level:flag-updated', flag
console.log 'trying to place flag at', @world.dt * @currentFrame, 'and think it will happen by', flag.time
removeFlag: (e) ->
delete @flags[e.color]
console.log e.color, 'deleted'
flag = player: me.id, team: me.team, color: e.color, time: @world.dt * @world.frames.length + 1, active: false
@flagHistory.push flag
Backbone.Mediator.publish 'level:flag-updated', flag
# paths - TODO: move to SpriteBoss? but only update on frame drawing instead of on every frame update?

View file

@ -35,7 +35,6 @@ module.exports = class WizardSprite extends IndieSprite
@targetPos = @thang.pos
if @isSelf
@setNameLabel me.displayName()
@setColorHue me.get('wizardColor1')
else if options.name
@setNameLabel options.name
@ -66,7 +65,6 @@ module.exports = class WizardSprite extends IndieSprite
continue if playerID is me.id # ignore changes for self wizard sprite
@setNameLabel state.name
continue unless state.wizard?
@setColorHue state.wizard.wizardColor1
if targetID = state.wizard.targetSprite
return console.warn 'Wizard Sprite couldn\'t find target sprite', targetID unless targetID of @options.sprites
@setTarget @options.sprites[targetID]
@ -91,17 +89,13 @@ module.exports = class WizardSprite extends IndieSprite
@imageObject.scaleX = @imageObject.scaleY = @imageObject.alpha = 0
createjs.Tween.get(@imageObject)
.to({scaleX: 1, scaleY: 1, alpha: 1}, 1000, createjs.Ease.getPowInOut(2.2))
@labels.name?.show()
animateOut: (callback) ->
tween = createjs.Tween.get(@imageObject)
.to({scaleX: 0, scaleY: 0, alpha: 0}, 1000, createjs.Ease.getPowInOut(2.2))
tween.call(callback) if callback
setColorHue: (newColorHue) ->
# TODO: is this needed any more?
return if @colorHue is newColorHue
@colorHue = newColorHue
#@updateColorFilters()
@labels.name?.hide()
setEditing: (@editing) ->
if @editing

View file

@ -36,6 +36,7 @@ module.exports = class World
@systems = []
@systemMap = {}
@scriptNotes = []
@flagHistory = []
@rand = new Rand 0 # Existence System may change this seed
@frames = [new WorldFrame(@, 0)]
@ -169,8 +170,8 @@ module.exports = class World
abort: ->
@aborted = true
updateFlags: (@flags) ->
console.log "updated flags", @flags
addFlagEvent: (flagEvent) ->
@flagHistory.push flagEvent
loadFromLevel: (level, willSimulate=true) ->
@levelComponents = level.levelComponents

View file

@ -57,6 +57,39 @@ module.exports =
'level:victory-hidden':
{} # TODO schema
'level:flag-selected':
type: 'object'
additionalProperties: false
properties:
color:
type: 'string'
enum: ['red', 'green', 'blue']
'level:flag-updated':
type: 'object'
additionalProperties: false
required: ['player', 'color', 'time', 'active']
properties:
player:
type: 'string'
team:
type: 'string'
color:
type: 'string'
enum: ['red', 'green', 'blue']
time:
type: 'number'
minimum: 0
active:
type: 'boolean'
targetPos:
type: 'object'
additionalProperties: false
required: ['x', 'y']
properties:
x: {type: 'number'}
y: {type: 'number'}
'next-game-pressed':
{} # TODO schema

View file

@ -225,10 +225,6 @@ table.table
.ui-slider-handle
border: 1px solid black !important
.flag-cursor
cursor: crosshair
// Fonts
.header-font

View file

@ -46,7 +46,10 @@ body.is-playing
display: block
z-index: 1
@include transition(0.5s ease-out)
&.flag-selected
cursor: crosshair
min-width: 1024px
position: relative

View file

@ -72,6 +72,9 @@ module.exports = class PlayLevelView extends RootView
shortcuts:
'ctrl+s': 'onCtrlS'
'r': -> Backbone.Mediator.publish 'level:flag-selected', color: 'red'
'g': -> Backbone.Mediator.publish 'level:flag-selected', color: 'green'
'b': -> Backbone.Mediator.publish 'level:flag-selected', color: 'blue'
# Initial Setup #############################################################
@ -517,7 +520,7 @@ module.exports = class PlayLevelView extends RootView
# Real-time playback
onRealTimePlaybackStarted: (e) ->
@$el.addClass 'real-time'
@$el.addClass('real-time').focus()
@onWindowResize()
onRealTimePlaybackEnded: (e) ->

View file

@ -43,11 +43,9 @@ module.exports = class CastButtonView extends CocoView
@$el.detach().prependTo(spellView.toolbarView.$el).show()
onCastButtonClick: (e) ->
console.log "cas fast yo"
Backbone.Mediator.publish 'tome:manual-cast', {}
onCastRealTimeButtonClick: (e) ->
console.log "cas real time yo"
Backbone.Mediator.publish 'tome:manual-cast', {realTime: true}
onCastOptionsClick: (e) =>