system for watching sprite changes over time while skipping
This commit is contained in:
@@ -298,15 +298,17 @@
|
||||
(skySprite.makeGraphic (Std.int setSprite.width) (Std.int setSprite.height) skyColor true)))
|
||||
(set skySprite.x setSprite.x)
|
||||
(set skySprite.y 0)
|
||||
(set skySprite.cameras [camera])
|
||||
(flxMovie.setCameras skySprite [camera])
|
||||
(.add (first spriteLayers.members) skySprite)
|
||||
|
||||
(FlxG.cameras.remove flxMovie.uiCamera false)
|
||||
(FlxG.cameras.remove flxMovie.screenCamera false)
|
||||
(FlxG.cameras.remove flxMovie.spriteChangeDebugCamera false)
|
||||
(FlxG.cameras.add camera false)
|
||||
(FlxG.cameras.add flxMovie.screenCamera false)
|
||||
(FlxG.cameras.add flxMovie.uiCamera false)
|
||||
(set setSprite.cameras [camera])
|
||||
(FlxG.cameras.add flxMovie.spriteChangeDebugCamera false)
|
||||
(flxMovie.setCameras setSprite [camera])
|
||||
(.add (first spriteLayers.members) setSprite)
|
||||
(cc))
|
||||
|
||||
@@ -529,7 +531,7 @@
|
||||
(character.actor.setGraphicSize flxMovie.ACTOR_WIDTH)
|
||||
(character.actor.updateHitbox))
|
||||
|
||||
(set character.actor.cameras [camera])
|
||||
(flxMovie.setCameras character.actor [camera])
|
||||
(set character.actor.flipX ?!(= character.stageFacing character.actor.defaultFacing))
|
||||
// For characters whose images are forward-facing portraits, it's wrong to flip them based on facing:
|
||||
(when character.actor.portraitFacingForward
|
||||
@@ -956,7 +958,7 @@
|
||||
|
||||
(prop &mut :Bool oldScaleBehavior false)
|
||||
(method :Void showProp [:FlxSprite prop :StagePosition position :Appearance appearance :FlxCamera camera :Continuation cc]
|
||||
(set prop.cameras [camera])
|
||||
(flxMovie.setCameras prop [camera])
|
||||
(let [width (min (max prop.width PROP_MIN_WIDTH) PROP_MAX_WIDTH)]
|
||||
(unless (and !oldScaleBehavior (flxMovie.textProps.contains prop))
|
||||
(whenLet [FirstAppearance appearance]
|
||||
|
@@ -30,6 +30,7 @@ class FlxMovie extends Movie<FlxSprite, ActorFlxSprite, FlxSound, FlxSound, FlxS
|
||||
}
|
||||
public var uiCamera:FlxCamera;
|
||||
public var screenCamera:FlxCamera;
|
||||
public var spriteChangeDebugCamera:FlxCamera;
|
||||
|
||||
var tempCamerasOrder:Array<FlxCamera> = [];
|
||||
var tempCameras:Map<FlxCamera,Bool> = [];
|
||||
@@ -38,6 +39,8 @@ class FlxMovie extends Movie<FlxSprite, ActorFlxSprite, FlxSound, FlxSound, FlxS
|
||||
|
||||
public var nextFrameActions:Array<Void->Void> = [];
|
||||
|
||||
// This is overridden by HollywooFlixelDSL
|
||||
public dynamic function setCameras(sprite:FlxSprite, cameras:Array<flixel.FlxCamera>):Void {}
|
||||
|
||||
public var textProps:Array<FlxSprite> = [];
|
||||
public var propScales:JsonMap<JsonFloat>;
|
||||
|
@@ -9,6 +9,20 @@
|
||||
(function :Dynamic callPrivate [:Dynamic obj :String method &rest :Array<Dynamic> args]
|
||||
(Reflect.callMethod obj (Reflect.field obj method) args))
|
||||
|
||||
(defMacro doOnUpdateWhile [condition &body b]
|
||||
(let [funcName (symbol)]
|
||||
`(withFunctions
|
||||
[
|
||||
(,funcName []
|
||||
(when ,condition
|
||||
(nextFrameActions.push
|
||||
->:Void {
|
||||
,@b
|
||||
(,funcName)
|
||||
})))
|
||||
]
|
||||
(,funcName))))
|
||||
|
||||
(method newFlxTextProp [:String key :String text :Int size :FlxColor color &opt :String font]
|
||||
(let [prop (SpriteTools.textPlate text size 0 color FlxColor.TRANSPARENT null font)]
|
||||
(_addProp key prop)
|
||||
@@ -518,7 +532,28 @@
|
||||
(set uiCamera (new flixel.FlxCamera))
|
||||
(set uiCamera.bgColor FlxColor.TRANSPARENT)
|
||||
(flixel.FlxG.cameras.add uiCamera false)
|
||||
(set kiss_flixel.SimpleWindow.defaultCamera uiCamera)))
|
||||
(set kiss_flixel.SimpleWindow.defaultCamera uiCamera))
|
||||
(unless spriteChangeDebugCamera
|
||||
(set spriteChangeDebugCamera (new flixel.FlxCamera))
|
||||
(set spriteChangeDebugCamera.bgColor FlxColor.TRANSPARENT)
|
||||
(FlxG.cameras.add spriteChangeDebugCamera)
|
||||
(dictSet kiss_flixel.SpriteTools.ignoreCameras spriteChangeDebugCamera true)))
|
||||
|
||||
// If a sprite could possibly be targeted for change debugging, then its cameras always need to be set using (flxMovie.setCameras...)
|
||||
(preload (set this.setCameras ->:Void [:FlxSprite sprite :Array<flixel.FlxCamera> cameras] {
|
||||
(set sprite.cameras cameras)
|
||||
(when debuggingSprite
|
||||
(debugSpriteChanges debuggingSprite))
|
||||
}))
|
||||
|
||||
(prop &mut :FlxSprite debuggingSprite null)
|
||||
(method :Void debugSpriteChanges [:FlxSprite sprite]
|
||||
(set debuggingSprite sprite)
|
||||
(FlxG.state.add sprite)
|
||||
(unless sprite.cameras
|
||||
(set sprite.cameras []))
|
||||
(sprite.cameras.push spriteChangeDebugCamera)
|
||||
(spriteChangeDebugCamera.follow sprite))
|
||||
|
||||
(preload
|
||||
// I think it's safe to leave a cleaned-up movie as this reference,
|
||||
@@ -769,20 +804,6 @@
|
||||
(thing.destroy))))
|
||||
(m.clear))
|
||||
|
||||
(defMacro doOnUpdateWhile [condition &body b]
|
||||
(let [funcName (symbol)]
|
||||
`(withFunctions
|
||||
[
|
||||
(,funcName []
|
||||
(when ,condition
|
||||
(nextFrameActions.push
|
||||
->:Void {
|
||||
,@b
|
||||
(,funcName)
|
||||
})))
|
||||
]
|
||||
(,funcName))))
|
||||
|
||||
(defMacro addSkips [flxMovieClass]
|
||||
`{
|
||||
(method &override :Void prepareForSkip []
|
||||
@@ -822,6 +843,8 @@
|
||||
(set kiss_flixel.SimpleWindow.defaultCamera FlxG.camera)
|
||||
(when (flixel.FlxG.cameras.list.contains screenCamera)
|
||||
(flixel.FlxG.cameras.remove screenCamera true))
|
||||
(when (flixel.FlxG.cameras.list.contains spriteChangeDebugCamera)
|
||||
(flixel.FlxG.cameras.remove spriteChangeDebugCamera true))
|
||||
|
||||
// I hope this disposes of references to actors, props, sets, etc.:
|
||||
(scenes.clear)
|
||||
|
Reference in New Issue
Block a user