FlatRedBall
  • 🖥️Downloading FlatRedBall
  • 🏗️Building FlatRedBall From Source
    • Linking Games to FlatRedBall Engine Source
    • Linking FNA
  • ❓Need Help?
  • ✨FlatRedBall Features
  • 🎓Tutorials
    • Introduction To FlatRedBall
    • Quick Start Guide
    • Beefball - A Full FlatRedBall Tutorial Project
      • Creating a FlatRedBall Project
      • Creating an Entity
      • Creating a Screen
      • Controlling an Entity
      • Creating the Screen Collision
      • Advanced PlayerBall Controls
      • Creating the Puck Entity
      • Adding Multiple Players
      • Scoring and Restarting Rounds
      • Scoring Hud
      • Scoring Hud Logic
      • Adding Dashing
    • Platformer Tutorials
      • Platformer Basics
        • Creating an Entity
        • Controlling a Platformer Entity
        • Movement Values
        • Double Jump
      • Checkpoint and Level End
      • Climbing Ladders
      • Doors
      • GroundCollidedAgainst and Movement Values
      • Moving Platforms
      • Multiple Players
      • NPC Dialog
      • Breaking Blocks
        • New Project Setup
        • Creating Level1 Map
        • Creating the Block Entity
        • Block Removal
      • Dealing Damage
        • New Project Setup
        • Enemy Entity
        • Shooting Bullets
        • Damaging the Enemy
      • Enemy Movement
        • New Project Setup
        • Enemy Entity
        • Enemy Input Logic
        • Detecting Platform Edges
      • Ground Type and Water Movement
        • New Project Setup
        • Creating Level1 Map
        • Adding Ice and Water
        • Platformer Movement Values
      • Animation and Platformer Values
        • New Project Setup
        • Creating AnimationLayers
        • Modifying Platformer Values
      • Wall Sliding and Jumping
    • Damage Dealing
      • Setup
      • Team Index
      • Damage Events
      • IDamageArea Removal
      • Melee Damage
    • Entity Variants Using Inheritance
    • FlatRedBall.Forms
      • Getting Started with FlatRedBall.Forms
        • Setup
        • Working with Common Controls
        • Forms vs Gum in Code
      • Forms and Xbox360GamePad
      • Data Binding (BindingContext)
        • BindingContext Property
        • Binding FlatRedBall.Forms
        • Parent and Children Binding using BindingContext
        • ListBox Templates
      • Styling Forms
      • Defining New Forms Types
        • Adding New Types to FlatRedBall.Forms Library
      • Accessing Forms Events in Gum Runtimes
    • Top Down Games
      • Top Down Basics
        • Setup
        • Input Device
        • CurrentMovement
      • Enemy Movement
        • Enemy Pathfinding
        • Direct Enemy Control
      • GroundVelocity
      • Animation
      • Sorting
    • Post Processing
    • Rock Blaster - A Full FlatRedBall Tutorial Project
      • Introduction
      • Setup
      • Game Skeleton
      • Player Entity
      • Player Behavior
      • Rock Entity
      • Collision
      • Rock States
      • HUD
      • Multiple Players
      • Health
      • Health Part 2
      • Destroying Entities
      • Cleaning Up
    • Code-Only Projects (No Editor)
      • Creating a FlatRedBall Project
      • Adding a Circle
      • Loading Textures and Using Sprites
    • Code Tutorials
      • 3D Camera Setup
      • Adding FlatRedBall to a MonoGame/FNA Project
      • Adding WPF to an Existing Game
      • async and await
      • CLR Profiler
      • Collision Jitter
      • Culling
      • Customizing Cursor Visuals
        • Windows Desktop
        • windows-rt
      • Depth Buffer Z Fighting
      • Dictionaries and Enum Keys
      • FlatRedBall XNA in Windows Form
      • Improving Performance
        • CustomActivity Performance
        • Identifying Screen Creation Performance Issues
        • Rendering Performance
        • Manually Updated Objects
          • Introduction
          • Measuring Automatic Updates
          • Measuring Sprite Automatic Updates
          • Manual Particle Systems
      • Object Sorting
      • Pix
      • Rendering Sprites with Shaders
      • Tile-Based Movement
      • Velocity
    • Distribution
      • App Icon
      • Emptying bin Folder Using Probing Path
      • itch.io
      • Release Build
      • Steam
    • FlatRedBall and Velcro Physics
      • Using Velcro Physics with the FlatRedBall Editor
      • Code-Only Velcro Projects
    • FlatRedBall Editor Plugins
      • Introduction to FlatRedBall Plugins
      • Creating a Plugin Project
      • Creating a Plugin Class
      • Adding UI to FlatRedBall
      • Using MVVM
      • Creating a NamedObjectSave-Editing Plugin
      • Adding File Format Support
      • Adding Code Files to a Game Project
      • Errors
      • Exporting a Plugin
    • Additional FlatRedBall Editor Tutorials
      • How to Create a First Person Camera
      • How to Play Sounds
      • How to Share Reference Data Between Screens and Entities
    • Math Tutorials
      • Circle Collision
      • Determining required magnitude for trajectory
      • Introduction to Collision
      • Power of Two
      • Rectangle Collision
      • rotation
      • statistics
      • trigonometry
      • vector
      • matrix
      • interpolation
    • Overworld Tutorials
      • Spinning Mode 7
        • New Project Setup
        • Adding Camera Code
        • Fading In and Out
  • 🎞️Videos
  • 📐FlatRedBall Editor
    • Display Settings
    • Entities
      • BaseEntity
      • Constructor
      • ConvertToManuallyUpdated
      • CreatedByOtherEntities
      • CustomActivity
      • CustomDestroy
      • CustomInitialize
      • Destroying Entities
      • Entity Performance
      • Export Entity
      • Implements IClickable
      • Implements ICollidable
      • Implements IDamageArea
      • Implements IDrawableBatch
      • Implements IGumCollidable
      • Implements IVisible
      • Implements IWindow
        • SlideOnClick
      • Import Entity
      • Inheriting from FlatRedBall Types
      • LayerProvidedByContainer
      • MoveToLayer
      • PooledByFactory
      • Top Down Movement
        • TopDownSpeedMultiplier
      • Use Global Content
    • Events
      • ResolutionRrOrientationChanged
    • Factories
      • CreateNew
      • EntitySpawned
      • Initialize
      • SortAxis
    • Files
      • File Types
        • Animation Chain List (.achx)
        • Comma Separated Values (.csv)
          • Combining .csvs With Entities
          • CreatesDictionary
          • Cross Referencing CSVs
          • Instantiating Custom Types
          • OrderedList
          • SetCreatedClass
            • generate-data-class
          • uniformrowtype
        • Effect (.fx, .fxb)
        • Font (.fnt)
        • JSON (.json)
        • Model (.fbx)
        • MP3
        • Node Network (.nntx)
        • OpenDocument Spreadsheet (.ods)
        • ShapeCollections (.shcx)
        • SplineList (.splx)
        • Texture2D (.png)
        • Wave (.wav)
      • Accessing Files in Code
      • Adding File Objects to Managers
      • Destroy on Unload
      • File Build Tool
      • Folders
      • Global Content Files
      • IsDatabaseForLocalizing
      • IsManuallyUpdated
      • IncludeDirectoryRelativeToContainer
      • LoadedAtRuntime
      • LoadedOnlyWhenReferenced
      • Name
      • Platform Inclusions
      • Project Specific Files
      • RuntimeType
      • SourceFile
      • UseContentPipeline
      • Wildcard Files
    • FileVersion (.gluj)
    • Generated Code
    • Global Content Files
      • LoadAsynchronously
      • Reload
      • Setting Files At Runtime
    • Live Edit
      • Render Targets
    • Menu
      • Content
        • Additional Content
          • Using Runtime Types as Objects
          • creating-runtime-objects
          • runtime-object-charateristics
          • simple-line-of-text-tutorial
        • Introduction
        • pipeline-settings
      • File
        • New Project
      • Edit
        • Find File References
      • Plugins
        • Install Plugin
        • Manage Plugins
      • Project
        • View Projects
      • Settings
        • Camera Settings
        • File Associations
        • File Build Tools
        • Performance Settings
      • Update
        • Introduction
        • glue-reference-menu-frbdk
        • glue-reference-menu-libraries
    • Multi-Platform
      • Synced Projects
      • Changing Main Project Type
      • Android
        • Distribution
        • Setup
      • iOS
        • Certificates and Profiles
        • Copying Projects to Mac
        • Using Xamarin Build Host
      • Switch (Nintendo)
      • Web
    • Objects
      • Object Types
        • AxisAlignedRectangle
        • Camera
        • CameraControllingEntity
        • Circle
        • CollisionRelationship
        • Layer
          • DestinationRectangle
          • Is2D
        • Polygon
        • PositionedObjectList
        • RenderTarget2D
        • ShapeCollection
        • SoundEffectInstance
        • Sprite
        • Text
        • TileNodeNetwork
      • AddToManagers
      • AttachToCamera
      • AttachToContainer
      • CallActivity
      • Collidable Objects
      • EntireFile
      • ExposedInDerived
      • HasPublicProperty
      • IgnoresPausing
      • IncludeInIClickable
      • IncludeInICollidable
      • IsContainer
      • LayerOn
      • Map
      • SetByDerived
      • SourceFile
      • SourceType
    • Plugins
      • glue-gluevault-component-pages-rendertargetrenderer
      • glue-gluevault-component-pages-simple-command-console
      • glue-gluevault-component-pages-squid-gui-integration
      • kalldrexx-interactive-debugging-console
    • Profiling
    • Screens
      • AsyncLoadingState
      • BaseScreen
      • Constructor
      • Creating a New Screen
      • CustomDestroy
      • CustomInitialize
      • DefaultLayer
      • GameScreen
      • IsActivityFinished
      • IsLoadingScreen
      • LoadStaticContent
      • MoveToScreen
      • PauseAdjustedCurrentTime
      • Set as StartUp Screen
      • UnloadsContentManagerWhenDestroyed
    • States
      • InterpolateToState
      • InterpolateToState vs InterpolateBetween
      • State Categories
      • State Classes
      • States and Inheritance
      • Tunneling Category Variables
    • Variables
      • CreatesEvent
      • HasAccompanyingVelocityProperty
      • IsShared
      • Proper Variable Naming
      • SetByDerived
      • Type
      • Variable Order
    • Visual Studio Project (.csproj)
  • 🏃Animation Editor
    • Frame Time
    • Animation Shapes and Collision
  • Tiled
    • Tiled Basics
      • Introduction
      • Creating a GameScreen
      • Adding Collision
      • Colliding Entities Against TileShapeCollections
      • Working with Multiple Levels
      • Creating Entities from Tiles
      • Creating Entities from Object Layers
      • Accessing Tiled Properties
      • Working with Tiled Shapes
    • Tiled Files in Entities
    • TileEntityInstantiator
    • Using TiledObjects.Generated.xml
    • LayeredTileMap
      • Collisions
      • Destroy
      • FromTiledMapSave
      • Z
    • MapDrawableBatch
      • AddTile
      • CoordinateAdjustment
      • GetBottomLeftWorldCoordinateForOrderedTile
      • MergeOntoThis
      • NamedTileOrderedIndexes
      • PaintTile
      • PaintTileTextureCoordinates
      • ParallaxX
      • Paste
      • Properties
      • RemoveQuads
      • RenderingScale
      • SortAxis
    • TiledMapSave
    • TileShapeCollection
      • AddCollisionAtWorld
      • AddCollisionFrom
      • AddCollisionFromTilesWithProperty
      • AddMergedCollisionFromLayer
      • AddMergedCollisionFromTilesWithProperty
      • AdjustRepositionDirectionsOnAddAndRemove
      • CollideAgainst
      • CollideAgainstClosest
      • GetRectangleAtPosition
      • InsertCollidables
      • LastCollisionAxisAlignedRectangles
      • Rectangles
      • RemoveFromManagers
      • RemoveSurroundedCollision
  • 🟩Gum
    • Tutorials
      • Introduction and Setup
      • Screens in Gum
      • Gum Objects in Code
      • Events on Gum Objects
      • Events on Gum Objects Part 2
      • Exposed Variables
      • States
      • Adding Code to Gum Objects
    • Accessing Gum Screens in Code
    • Adding Components to Layers
    • Adding Gum Screens to FlatRedBall
    • Animations in Code
    • Components in FlatRedBall Entities
    • Converting Gum Coordinates
    • Creating Components in Code
    • GraphicalUiElement as IWindow
    • Gum Resolution
    • Gum Properties Tab
    • Gum Animations
      • How to Play Gum Screen Animations
      • Named Events
      • Setting Gum Animationchain Achx in Code
  • 🦴Spine
    • Setup
    • Atlas
    • Changing Spine Textures at Runtime
    • SpineDrawableBatch
      • Event
      • PlayAnimation
      • SetCollision
      • Skeleton
  • ⏸️Aseprite
    • AnimationChainList
  • 🏫API Documentation
    • FlatRedBall Engine
      • AI
        • LineOfSight
          • VisibilityGrid
        • Pathfinding
          • PositionedNode
          • Link
            • Cost
            • NodeLinkingTo
          • NodeNetwork
            • GetPath
            • UpdateShapes
            • Visible
          • TileNodeNetwork
            • AddAndLinkTiledNode
            • AddAndLinkTiledNodeWorld
            • OccupyTileWorld
            • SetCosts
      • Audio
        • AudioManager
          • AreSoundEffectsEnabled
          • CurrentlyPlayingSong
          • MasterSongVolume
          • MasterSoundVolume
          • Play
          • PlaySong
          • PlaySongs
          • StopSong
        • PositionedSound
        • Sound
      • Camera
        • AbsoluteRightXEdge
        • AbsoluteRightXEdgeAt
        • AddLayer
        • AddSpriteToBillboard
        • AspectRatio
        • AttachTo
        • BackgroundColor
        • CameraCullMode
        • ClearMinimumsAndMaximums
        • ClearsDepthBuffer
        • DestinationRectangle
        • DrawsShapes
        • DrawsToScreen
        • DrawsWorld
        • FarClipPlane
        • FieldOfView
        • FixAspectRatioYConstant
        • ForceUpdateDependencies
        • GetViewport
        • IsSpriteInView
        • KeepSpriteInScreen
        • Layer
        • Layers
        • Main
        • MaximumX
        • Orthogonal
        • OrthogonalHeight
        • OrthogonalWidth
        • PixelsPerUnitAt
        • Position
        • PositionRandomlyInView
        • RelativeXEdgeAt
        • RemoveLayer
        • RotationMatrix
        • SetBordersAtZ
        • SetLookAtRotationMatrix
        • SetSplitScreenViewport
        • UpdateViewProjectionMatrix
        • UpVector
        • UsePixelCoordinates
        • UsePixelCoordinates3D
        • View
      • Content
        • ContentLoadBatch
        • AnimationChain
          • AnimationChainListSave
        • ContentManager
          • AddUnloadMethod
          • FileAliases
          • IsAssetLoadedByName
          • Load
          • LoadFromGlobalIfExists
          • Multiple Content Managers
        • Math
          • Geometry
            • ShapeCollectionSave
        • Polygon
          • PolygonSave
        • Scene
          • CameraSave
          • SceneSave
        • SpriteEditorScene
          • Camera
      • Debugging
        • Debugger
          • CommandLineWrite
          • GetFullPerformanceInformation
          • TextBlue
          • WriteAutomaticallyUpdatedObjectInformation
      • Entities
        • CameraControllingEntity
        • IDamageable
        • IDamageArea
      • FlatRedBallServices
        • AddDisposable
        • AddManager
        • CornerGrabbingResize
        • Draw
        • ForceClientSizeUpdates
        • Game
        • GetManagerInformation
        • GlobalContentManager
        • GraphicsOptions
        • Initialize
        • IsLoaded
        • Load
        • Owner
        • Random
        • RenderAll
        • Unload
        • Update
        • WindowHandle
      • Graphics
        • Animation
          • AnimationChain
            • Clone
            • FrameToFrame
            • TotalLength
          • AnimationChainList
          • AnimationController
          • AnimationFrame
            • RelativeX
            • ShapeCollectionSave
            • Texture
          • IAnimationChainAnimatable
            • Animate
            • Animation and Timing
            • AnimationChains
            • AnimationSpeed
            • CurrentChainName
            • CurrentFrameIndex
            • JustChangedFrame
            • JustCycled
            • UseAnimationRelativePosition
        • BitmapFont
          • BMFC File
          • BitmapCharacterInfo
          • FNT File
          • Glyphs
          • LineHeightInPixels
          • RenderToTexture2D
        • BlendOperation
        • ColorOperation
          • Add
          • Color
          • ColorTextureAlpha
          • InterpolateColor
          • Modulate
          • Texture
        • GraphicsOptions
          • Filtering
          • IsFullScreen
          • ResolutionHeight
          • SetFullScreen
          • SetResolution
          • SizeOrOrientationChanged
          • TextureFilter
          • TextureLoadingColorKey
          • UseMultisampling
        • IColorable
          • Alpha
          • BlendOperation
          • Blue
          • ColorOperation
        • IDrawableBatch
          • Z
          • RenderState
        • IVisible
          • IgnoresParentVisibility
        • Layer
          • Layer Membership Details
          • LayerCameraSettings
          • Remove
          • RenderTarget
          • SortType
          • Sprites
          • UsePixelCoordinates
        • LayerCameraSettings
          • OrthogonalWidth
          • TopDestination
        • Particle
          • EmissionSettings
            • Drag
            • PixelSize
            • ScaleX
          • Emitter
        • PostProcessing
          • SwapChain
        • RenderBreak
        • Renderer
          • Draw
          • LastFrameRenderBreakList
          • RenderBreaksAllocatedThisFrame
        • Text
          • AdjustPositionForPixelPerfectDrawing
          • ColorOperation
          • DisplayText
          • GetWidth
          • Font
          • HorizontalAlignment
          • InsertNewLines
          • MaxWidth
          • MaxWidthBehavior
          • NewLineDistance
          • NumberOfLines
          • ScaleX
          • SetColor
          • SetPixelPerfectScale
          • VerticalAlignment
          • Width
        • TextManager
          • AddManuallyUpdated
          • AddText
          • AddToLayer
          • FilterTexts
          • RemoveText
        • Texture
          • RenderTargetSprite
          • ImageData
            • ApplyColorOperation
            • Fill
            • FromTexture2D
      • Gui
        • Cursor
          • Camera
          • ClickNoSlideThreshold
          • CustomUpdate
          • GetRay
          • IngnoreInputThisFrame
          • IsInWindow
          • IsOn
          • IsOn3d
          • PrimaryClick
          • PrimaryClickNoSlide
          • PrimaryPushTime
          • ScreenX
          • SecondaryClick
          • SetControllingGamepad
          • SetJoystickControl
          • TransformationMatrix
          • WindowOver
          • WidowPushed
          • WorldPosition
          • WorldX
          • WorldXAt
          • WorldYAt
          • XForUi
        • GuiManager
          • AddDominantWindow
          • BringsClickedWindowsToFront
          • BringToFront
          • GamepadsForUiControl
          • MakeRegularWindow
          • RemoveWindow
          • SortZAndLayerBased
          • Windows
        • IClickable
        • IInputReceiver
          • IWindow
            • CallClick
            • Enabled
          • ReceiveInput
      • Input
        • AnalogButton
        • AnalogStick
          • IsMaxPositionNormalized
        • DelegateBased1DInput
        • DelegateBased2DInput
        • DelegateBasedPressableInput
        • I1DInput
        • I2DInput
        • IMouseOver
        • InputDeviceBase
        • InputManager
          • ClearAllInput
          • InputReceiver
        • IPressableInput
        • Keyboard
          • Clear
          • ControlPositionedObject
          • Get2DInput
          • GetKey
          • GetStringTyped
          • IgnoreKeyForOneFrame
          • KeyDown
          • KeyPushed
        • Mouse
          • GrabbedPositionedObject
          • IsOn3D
          • ModifyMouseState
          • Restricting Mouse to Screen Bounds
          • SetScreenPosition
        • TouchScreen
          • LastFrameGestures
          • ReadsGestures
        • Windows
          • WindowsInputEventManager
        • Xbox360GamePad
          • ButtonDown
          • ButtonMap
          • ButtonPosition vs Button
          • ButtonPushed
          • ControlPositionedObject
          • CreateDefaultButtonMap
          • Deadzone
          • DeadzoneType
          • FakeIsConnected
          • GamepadLayout
          • IgnoreButtonForOneFrame
      • Instructions
        • DelegateInstruction
        • IInstructable
          • Call
          • Cnstructions
          • Set
        • Instruction
        • InstructionList
          • ExecuteAndRemoveOrCyclePassedInstructions
        • InstructionManager
          • Add
          • AddSafe
          • Instructions
          • MoveThrough
          • MoveTo
          • MoveToAccurate
          • ObjectsIgnoringPausing
          • PauseEngine
          • Pulse
          • RotateToAccurate
        • Reflection
          • LateBinder
          • PropertyCollection
        • MethodInstruction
        • StaticMethodInstruction
      • IO
        • Csv
          • CsvHeader
          • CsvFilemanager
            • Cells with Multiple Lines
            • Color
            • CsvDeserializelist
            • Rows with Lists
          • RuntimeCsvRepresentation
            • FromList
            • GenerateCsvString
        • FileManager
          • BinarySerialize
          • CloneObject
          • FromFileText
          • GetAllFilesInDirectory
          • GetUserFolder
          • InitializeUserFolder
          • RelativeDirectory
          • SaveEmbeddedResource
          • SaveText
          • Standardize
          • UserApplicationDataForThisApplication
          • XmlDeserialize
          • XmlSerialize
      • Localization
        • LocalizationManager
      • Managers
        • IManager
      • Math
        • IAttachableRemovable
        • AttachableList
          • FindByName
          • MakeOneWay
        • Collision
          • CollisionManager
            • Relationships
            • Update
        • Geometry
          • AxisAlignedCube
            • CollideAgainstBounce
          • AxisAlignedRectangle
            • Axis Alignment And Rotation
            • CollideAgainstMoveSoft
            • Color
            • GetRandomPositionInThis
            • KeepThisInsideOf
            • LastMoveCollisionReposition
            • Left
            • RepositionDirections
          • Capsule2D
          • Circle
            • CollideAgainst
            • CollideAgainstBounce
            • CollideAgainstMove
            • IsPointInside
            • LastCollisionTangent
            • LastMoveCollisionReposition
            • ProjectParentVelocityOnLastMoveCollisionTangent
            • Visible
            • Z
          • Colliding a List of Shapes Against Itself
          • FloatRectangle
          • ICollidable
          • IScalable
            • Scale
          • Line
            • Color
            • LastCollisionPoint
            • RelativePoint1
            • SetFromAbsoluteEndpoints
          • Point
          • Polygon
            • AbsolutePointPosition
            • Clone
            • CollideAgainstBounce
            • CollideAgainstMove and Attachments
            • CollideAgainstMove
            • Color
            • CreateEquilateral
            • CreateRectangle
            • ForceUpdateDependencies
            • IsPointInside
            • LastMoveCollisionReposition
            • OptimizeRadius
            • Points
            • Position
            • ProjectParentVelocityOnLastMoveCollisionTangent
            • ScaleBy
            • Thin Polygon Problem
            • VectorFrom
            • Visible
            • Z
          • Segment
            • ClosestPointTo
          • Shape
          • ShapeCollection
            • AttachTo
            • AxisAlignedRectangles
            • CollideAgainst
            • CollideAgainstBounceWithoutSnag
            • CollideAgainstMove
            • CollideAgainstMoveWithoutSnag
            • LastCollisionAxisAlignedRectangles
            • SortAscending
            • Visible
          • ShapeManager
            • AddToLayer
            • Remove
            • ShapeDrawingOrder
          • ShapeMerger
          • Shapes and 2D Collision
          • Sphere
        • IAttachable
          • Attachment Updates in the Engine
          • Detach
          • ParentRotationChangesPosition
          • ParentRotationChangesRotation
          • TopParent
        • IRotatable
          • RotationMatrix
        • MathFunctions
          • AbsoluteToWindow
          • AngleToAngle
          • AngleToVector
          • GetPointInCircle
          • GetPositionAfterTime
          • RegulatAngle
          • RotatePointAroundPoint
          • RoundFloat
          • RoundToInt
          • WidowToAbsolute
        • Paths
          • Path
        • PositionedObjectList
          • Add
          • AttachTo
          • Clear
          • GetFirstAfter
          • GetFirstAfterPosition
          • SortXInsertionAscending
        • Splines
          • Spline
            • GetPositionAtLengthAlongSpline
      • Performance
        • Measurement
          • Section
            • GetAndStartContextAndTime
            • Save
            • ToStringVerbose
      • PositionedObject
        • Acceleration
        • AttachTo
        • Children
        • Clone
        • Drag
        • ForceUpdatedependencies
        • ForceUpdatedependenciesDeep
        • Initialize
        • KeepTrackOfReal
        • LastPosition
        • Mirrored properties
        • ParentRotationChangesPosition
        • ParentRotationChangesRotation
        • Position
        • RelativePosition
        • RelativeRotationZ
        • RelativeVelocity
        • RemoveSelfFromListsBelongingTo
        • RotationZ
        • SetRelativeFromAbsolute
        • TimedActivity
        • TopParent
        • UpdateDependencies
        • Velocity
        • Z
      • Screens
        • Screen
          • ContentManagerName
          • CustomDestroy
          • IsActivityFinished
          • MoveToScreen
          • PauseThisScreen
        • ScreenManager
          • Activity
          • CurrentScreen
          • Start
      • Sprite
        • Alpha
        • AnimateSelf
        • AnimationChains
        • AnimationSpeed
        • Bottom
        • BottomTextureCoordinate
        • Changing a Sprite's Origin
        • ColorOperation
        • CurrentChainName
        • CurrentFrameIndex
        • IgnoreAnimationChainTextureFlip
        • Inheriting from the Sprite Class
        • JustCycled
        • LeftTextureCoordinate
        • PixelSize
        • Position
        • RightTextureCoordinate
        • SetAnimationChain
        • SetScaleXRatioToY
        • Sorting and Overlapping
        • Sprite vs Texture2d
        • Texture Coordinates
        • Texture
        • TextureAddressMode
        • TextureCoordinate
        • TextureFilter
        • TextureScale
        • TimeIntoAnimation
        • TopTextureCoordinate
        • UseAnimationRelativePosition
        • Vertices
        • VerticesForDrawing
        • Visible
      • SpriteList
      • SpriteManager
        • AddDrawableBatch
        • AddManagedInvisibleSprite
        • AddManualSprite
        • AddParticleSprite
        • AddPositionedObject
        • AddSprite
        • AddToLayer
        • AddZBufferedDrawableBatch
        • AddZBufferedSprite
        • AutomaticallyUpdatedSprites
        • Camera
        • ConvertToAutomaticallyUpdated
        • ConvertToManagedInvisible
        • ConvertToManuallyUpdated
        • ConvertToZBufferedSprite
        • DrawableBatches
        • ManagedPositionedObjects
        • ManualUpdate
        • MaxParticleCount
        • MoveToBack
        • OrderedSortType
          • Z
        • OrderedSprites
        • RemoveDrawableBatch
        • RemoveLayer
        • RemovePositionedObject
        • RemoveSprite
        • RemoveSpriteOneWay
        • SortTexturesSecondary
        • SortYSpritesSecondary
        • UnderAllDrawnLayer
      • TimeManager
        • Accumulating Time
        • CurrentScreenSecondsSince
        • CurrentTime
        • Profiling
        • SecondDifference
        • SecondsSince
        • SumTimeSection
        • SystemCurrentTime
        • TimeFactor
        • Working with TimeSpan
      • Utilities
        • StringFunctions
    • FlatRedBall.Forms
      • Controls
        • Button
        • CheckBox
        • ComboBox
        • FrameworkElement
          • DefaultFormsComponents
          • HandleTab
          • Show
          • Visual
        • Games
          • DialogBox
          • OnScreenKeyboard
          • SettingsView
        • ListBox
        • ListBoxItem
        • RadioButton
        • ScrollBar
        • ScrollViewer
        • Slider
        • StackPanel
        • TextBox
        • TreeView
        • TreeViewItem
      • MVVM
        • DependsOnAttribute
    • FlatRedBall Editor Plugin
      • customvariable
      • Introduction
      • flatredball-glue-elements-objectfinder
      • flatredball-glue-guidisplay-propertygriddisplayer
      • Introduction
      • flatredball-glue-projectmanager
      • Introduction
      • flatredball-glue-saveclasses-namedobjectsave
      • flatredball-glue-saveclasses-referencedfilesave
      • flatredball-glue
        • plugins
          • flatredball-glue-exportedinterfaces-igluestate
          • flatredball-glue-exportedinterfaces-igluxcommands-addreferencedfiletoglobalcontent
          • flatredball-glue-exportedinterfaces-igluxcommands
          • Introduction
          • flatredball-glue-exportedinterfaces-iprojectcommands-makeabsolute
          • flatredball-glue-exportedinterfaces-iprojectcommands
          • flatredball-glue-interfaces-icodegeneratorplugin
          • flatredball-glue-interfaces-imenustripplugin
          • Introduction
          • flatredball-glue-pluginbase-getfilesreferencedby
          • flatredball-glue-pluginbase
          • Introduction
        • vshelpers
          • codebuilditemadder
    • FlatRedBall Editor (Glue)
      • AssetTypeInfo
      • Cleaning Up Screens
      • CodeGeneration
        • ICodeBlock
      • CustomActivity
      • CustomLoadStaticContent
      • Entity
        • Introduction
        • glue-reference-entities-destroy
      • Game1CodeGenerator
      • GetFile
      • PauseThisScreen
      • SaveClasses
        • GlueSettingsSave
      • Screen
        • glue-reference-screens-pauseadjustedsecondssince
    • Live Edit
      • EditorVisuals
        • Circle
        • Text
      • Instance Creation
    • Gum Runtime
      • GraphicalUiElement
        • GetAbsoluteLeft
        • GetGraphicalUiElementByName
        • HasCursorover
        • InterpolateBetween
        • InterpolateTo
        • MoveToFrbLayer
        • RaiseChildrenEventsOutsideOfBounds
        • SetProperty
        • ShowLineRectangles
        • TestCollision
      • RenderingLibrary
        • camera
        • ipositionedsizedobject
        • graphics
          • Layer
          • text
            • textrenderingmode
    • iOS
      • uikit-uiviewcontroller
    • Microsoft.Xna.Framework
      • Audio
        • SoundEffect
        • SoundEffectInstance
      • Color
      • Introduction
      • Game
        • IsActive
        • IsFixedTimeStep
        • IsMouseVisible
        • TargetElapsedTime
      • GameWindow
        • Introduction
        • Introduction
        • handle
      • Graphics
        • Shared Parameters
        • model
        • spritebatch
        • GraphicsDevice
          • renderstate
          • SetRenderTarget
        • renderstate
          • referencealpha
        • Texture2D
          • Creating New Textures Programatically
      • GraphicsDeviceManager
        • supportedorientations
      • Media
        • MediaPlayer
        • Song
          • FromUri
      • Vector3
    • NAudio
      • NAudio_Song
    • SkiaGum
      • SkiaSpriteCanvas
      • Renderables
        • RenderableSkiaObject
    • State Interpolation
      • Tween
      • Tweener
      • TweenerManager
  • 🏘️Contributing
    • How to Contribute
    • Builds (Releases)
      • Gum
    • Writing Documentation
    • Contributing Code (Pull Requests)
    • Automated Test Project
    • Programming Style Guide
  • 🎮FlatRedBall Games
    • angry-boy
    • avatar-skate
    • avatar-word-wave
    • bobble-biker
    • box-the-gopher
    • cargo-crush
    • combo-red-moon-rising
    • cubism
    • eat-my-shuriken-and-die
    • elemento
    • food-battler
    • free-towels
    • gravi-dot
    • hyperdodge
    • juice-factory
    • operation-sd-space-defense
    • picture-puzzle-revolution
    • prismatic
    • quarantine
    • quest-for-freshness
    • star-stepper
    • steambirds
    • sticky-bump
    • tile-trip
    • trashman
    • tumble-heads
    • udder-chaos
    • without-escape
    • games-oniro
  • 🔴FlatRedBall Logo
  • Installing XNA in Visual Studio 2017
Powered by GitBook
On this page
  • Introduction
  • A simple situation
  • Lists in Other Entities
  • Initialize lasts one Screen
  • Factories and inheritance
  • Factories and inheritance chains
  • Factories and Multiple Lists of the Same Type

Was this helpful?

Edit on GitHub
Export as PDF
  1. FlatRedBall Editor
  2. Factories

Initialize

PreviousEntitySpawnedNextSortAxis

Last updated 1 year ago

Was this helpful?

Introduction

Factories must have their Initialize method called before they are used. In many cases the Initialize method is automatically called in Glue generated code. This article explores when the Initialize method is called for you and when you must call it yourself. The Initialize method also controls which list is populated by a factory. This article also discusses this, specifically as it applies to inheritance. For an in-depth look at using Factories, see the

A simple situation

First we'll look at a very simple scenario. Consider an Entity called "Enemy". In this example, Enemy has its "CreatedByOtherEntities" set to true, meaning Glue will automatically generate a Factory called EnemyFactory. Let's say that there is also a Screen called GameScreen, and that GameScreen has a PositionedObjectList of Enemies. To summarize, if the following conditions are met, then Initialize will be called:

  • An Entity has CreatedByOtherEntities set to true

  • A Screen has a PositionedObjectList of the Entity mentioned in the previous point

Glue assumes that newly-created Enemies should be put in the PositionedObjectList in GameScreen (assuming GameScreen is the current Screen). In other words, the EnemyFactory can be used when GameScreen is live; the GameScreen will automatically call Initialize on the EnemyFactory. If GameScreen did not have a list of Enemies, Glue would not automatically Initialize the EnemyFactory. This means that if you intend to use EnemyFactory's CreateNew method in a Screen which does not contain a PositionedObjectList of Enemies, then you must manually call Initialize on EnemyFactory. Also, keep in mind that if you are manually calling Initialize, then you must manually call Destroy on the Factory. Destroy should probably be called in your Screen's CustomDestroy method.

Lists in Other Entities

PositionedObjectLists in Entities will not Initialize factories: Entities that include PositionedObjectLists of Entities that have an associated factory will not Initialize the factory. In this case you must either place a PositionedObjectList in your Screen, or you must manually call Initialize on the factory passing in the PositionedObjectList in your Entity. Therefore, if working with a Bullet object in an Entity, your code might look like this:

BulletFactory.Initialize(this.BulletList, ContentManagerName);

Initialize lasts one Screen

An Initialize call (whether in custom or generated code) will only put the Factory in a valid state for the given Screen. In other words, if GameScreen automatically calls Initialize on EnemyFactory, other Screens must still call Initialize (and Destroy) on EnemyFactory if your code calls EnemyFactory.CreateNew. The Initialize call expires at the end of the current Screen and must be called again (either manually or through generated code).

Factories and inheritance

In the section above, we discussed that Glue will automatically generate code to call Initialize on a given Factory if the current Screen has a PositionedObjectList of the associated Entity. However, let's consider a more complicated situation: In this example we will use an Entity called Enemy which is the base Entity for three other Entities as shown in the following diagram:

  • Enemy

    • Orc

    • Dragon

    • Troll

We'll assume that Orc, Dragon, and Troll are all Entities which have matching Factories - that is, they all have CreatedByOtherEntities set to true. As mentioned above, if there is a PositionedObjectList of Orc, Dragon, or Troll, then the associated Factory will automatically have Initialize called. However, it is common to create PositionedObjectLists of base types to simplify custom code. In other words, GameScreen may have a PositionedObjectList of type Enemy. In this case, Glue also assumes that you intend to associate the List of the base type (Enemy in this example) with any of the derived types (Orc, Dragon, and Troll). Therefore, if you have a PositionedObjectList of Enemy, then OrcFactory, DragonFactory, and TrollFactory will all be initialized automatically. Also, they will be initialized using the PositionedObjectList of Enemies, so any Troll, Dragon, or Orc that you create will be put in that list.

Factories and inheritance chains

Next let's look at a situation where there are three entities in an inheritance chain:

  • Enemy

    • Dragon

      • RedDragon

We'll assume RedDragon is an Entity that is CreatedByOtherEntities, so there is a RedDragonFactory. As explained above, RedDragonFactory will be automatically Instantiated in a Screen if:

  • The screen includes a PositionedObjectList of type Enemy

-- OR --

  • The Screen includes a PositionedObjectList of type RedDragon

Factories and Multiple Lists of the Same Type

If your screen contains multiple lists of the same type, Glue will generate code to add entities to all lists. For example, if your game has an entity called Enemy and you have two lists (GroundEnemies and AirEnemies), then any Enemy factory (or factory of entity deriving from Enemy) will insert into both lists. A list can be removed from automatic association with a factory in Glue (this requires GLUX version 3 or greater). This value is true by default, but can be set to false to prevent Glue from automatically associating any factories with the list.

Factory-List association can also be adjusted in code by calling RemoveList. To remove the lists from the factory:

Factories.EnemyFactory.RemoveList(GroundEnemies);
Factories.EnemyFactory.RemoveList(AirEnemies);

But what if the Screen only contains a PositionedObjectList of Dragon (the type "inbetween" Enemy and RedDragon)? In this situation, Glue does not assume you intend to have the RedDragonFactory instantiated. Glue will only automatically instantiate the RedDragonFactory if there is a PositionedObjectList of the most base Entity (Enemy in this case) or most derived (RedDragon in this case) in a given Screen. However, you can still customize how the behavior of the Factory works using the Action and manually adding newly-created Entities to any List.

📐
tutorial on "Created by Other Entities"
EntitySpawned