Noah Petherbridge
c5353df211
Instead of the loadscreen eager-loading ALL level chunks to Go Images, only load the chunks within the "LoadingViewport" - which is the on-screen Viewport plus a margin of chunks off the screen edges. During gameplay, every few ticks, reevaluate which chunks are inside or outside the LoadingViewport; for chunks outside, free their SDL2 textures and free their cached bitmaps to keep overall memory usage down. The AzulianTag-Forest level now stays under 200 Textures at any given time and the loadscreen goes faster as it doesn't have to load every chunk's images up front. The LoadUnloadChunk feature can be turned on/off with feature flags. If disabled the old behavior is restored: loadscreen loads all images and the LoadUnloadChunks function is not run. Other changes: * loadscreen: do not free textures in the Hide() function as this runs on a different goroutine and may break. The 4 wallpaper textures are OK to keep in memory anyway, the loadscreen is reused often! * Free more leaked textures: on the Inventory frame and when an actor calls Self.Destroy() * Stop leaking goroutines in the PubSub feature of the doodad script engine; scripting.Supervisor.Teardown() sends a stop signal to all scripts to clean up neatly. Canvas.Destroy() tears down its scripting supervisor automatically.
127 lines
3.6 KiB
Go
127 lines
3.6 KiB
Go
package balance
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.kirsle.net/go/render"
|
|
)
|
|
|
|
// Numbers.
|
|
var (
|
|
// Window dimensions.
|
|
Width = 1024
|
|
Height = 768
|
|
|
|
// Title screen height needed for the main menu. Phones in landscape
|
|
// mode will switch to the horizontal layout if less than this height.
|
|
TitleScreenResponsiveHeight = 600
|
|
|
|
// Speed to scroll a canvas with arrow keys in Edit Mode.
|
|
CanvasScrollSpeed = 8
|
|
FollowActorMaxScrollSpeed = 64
|
|
|
|
// Window scrolling behavior in Play Mode.
|
|
ScrollboxOffset = render.Point{ // from center of screen
|
|
X: 60,
|
|
Y: 60,
|
|
}
|
|
|
|
// Player speeds
|
|
PlayerMaxVelocity float64 = 7
|
|
PlayerJumpVelocity float64 = -23
|
|
PlayerAcceleration float64 = 0.12
|
|
Gravity float64 = 7
|
|
GravityAcceleration float64 = 0.1
|
|
SlopeMaxHeight = 8 // max pixel height for player to walk up a slope
|
|
|
|
// Default chunk size for canvases.
|
|
ChunkSize = 128
|
|
|
|
// Default size for a new Doodad.
|
|
DoodadSize = 100
|
|
|
|
// Size of Undo/Redo history for map editor.
|
|
UndoHistory = 20
|
|
|
|
// Options for brush size.
|
|
BrushSizeOptions = []int{
|
|
0,
|
|
1,
|
|
2,
|
|
4,
|
|
8,
|
|
16,
|
|
24,
|
|
32,
|
|
48,
|
|
64,
|
|
}
|
|
DefaultEraserBrushSize = 8
|
|
MaxEraserBrushSize = 32 // the bigger, the slower
|
|
|
|
// Default font filename selected for Text Tool in the editor.
|
|
// TODO: better centralize font filenames, here and in theme.go
|
|
TextToolDefaultFont = SansSerifFont
|
|
|
|
// Interval for auto-save in the editor
|
|
AutoSaveInterval = 5 * time.Minute
|
|
|
|
// Default player character doodad in Play Mode.
|
|
PlayerCharacterDoodad = "boy.doodad"
|
|
|
|
// Levelpack and level names for the title screen.
|
|
DemoLevelPack = "assets/levelpacks/001000-TUTORIAL.levelpack"
|
|
DemoLevelName = []string{
|
|
"Tutorial 1.level",
|
|
"Tutorial 2.level",
|
|
"Tutorial 3.level",
|
|
}
|
|
|
|
// Level attachment filename for the custom wallpaper.
|
|
// NOTE: due to hard-coded "assets/wallpapers/" prefix in uix/canvas.go#LoadLevel.
|
|
CustomWallpaperFilename = "custom.b64img"
|
|
CustomWallpaperEmbedPath = "assets/wallpapers/custom.b64img"
|
|
|
|
// Publishing: Doodads-embedded-within-levels.
|
|
EmbeddedDoodadsBasePath = "assets/doodads/"
|
|
EmbeddedWallpaperBasePath = "assets/wallpapers/"
|
|
|
|
// File formats: save new levels and doodads gzip compressed
|
|
CompressDrawings = true
|
|
|
|
// Play Mode Touchscreen controls.
|
|
PlayModeIdleTimeout = 2200 * time.Millisecond
|
|
PlayModeAlphaStep = 8 // 0-255 alpha, steps per tick for fade in
|
|
PlayModeAlphaMax = 220
|
|
|
|
// Invulnerability time in seconds at respawn from checkpoint, in case
|
|
// enemies are spawn camping.
|
|
RespawnGodModeTimer = 3 * time.Second
|
|
|
|
// GameController thresholds.
|
|
GameControllerMouseMoveMax float64 = 20 // Max pixels per tick to simulate mouse movement.
|
|
GameControllerScrollMin float64 = 0.3 // Minimum threshold for a right-stick scroll event.
|
|
|
|
// Limits on the Flood Fill tool so it doesn't run away on us.
|
|
FloodToolVoidLimit = 600 // If clicking the void, +- 1000 px limit
|
|
FloodToolLimit = 1200 // If clicking a valid color on the level
|
|
|
|
// Eager render level chunks to images during the load screen.
|
|
// Originally chunks rendered to image and SDL texture on-demand, the loadscreen was
|
|
// added to eager load (to image) the whole entire level at once (SDL textures were
|
|
// still on demand, as they scroll into screen). Control this in-game with
|
|
// `boolProp eager-render false` and the loadscreen will go quicker cuz it won't
|
|
// load the whole entire level. Maybe useful to explore memory issues.
|
|
EagerRenderLevelChunks = true
|
|
|
|
// Number of chunks margin outside the Canvas Viewport for the LoadingViewport.
|
|
LoadingViewportMarginChunks = 2
|
|
CanvasLoadUnloadModuloTicks uint64 = 4
|
|
)
|
|
|
|
// Edit Mode Values
|
|
var (
|
|
// Number of Doodads per row in the palette.
|
|
UIDoodadsPerRow = 2
|
|
)
|