MainLoop

package
v0.0.0-...-c858641 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 14, 2025 License: MIT Imports: 22 Imported by: 0

Documentation

Overview

graphics.gd/classdb/MainLoop is the abstract base class for a Godot project's game loop. It is inherited by graphics.gd/classdb/SceneTree, which is the default game loop implementation used in Godot projects, though it is also possible to write and use one's own graphics.gd/classdb/MainLoop subclass instead of the scene tree.

Upon the application start, a graphics.gd/classdb/MainLoop implementation must be provided to the OS; otherwise, the application will exit. This happens automatically (and a graphics.gd/classdb/SceneTree is created) unless a graphics.gd/classdb/MainLoop graphics.gd/classdb/Script is provided from the command line (with e.g. godot -s my_loop.gd) or the graphics.gd/classdb/ProjectSettings "application/run/main_loop_type" project setting is overwritten.

Here is an example script implementing a simple graphics.gd/classdb/MainLoop:

package main

import (
	"graphics.gd/classdb/Input"
	"graphics.gd/classdb/MainLoop"
	"graphics.gd/variant/Float"
)

type MyMainLoop struct {
	MainLoop.Extension[MyMainLoop]

	timeElapsed Float.X
}

func (m *MyMainLoop) Initialize() {
	println("Initialized:")
	println("  Starting time: ", m.timeElapsed)
}

func (m *MyMainLoop) Process(delta Float.X) bool {
	m.timeElapsed += delta
	return Input.GetMouseButtonMask() != 0 || Input.IsKeyPressed(Input.KeyEscape)
}

func (m *MyMainLoop) Finalize() {
	println("Finalized:")
	println("  End time: ", m.timeElapsed)
}

Index

Constants

View Source
const NotificationApplicationFocusIn Object.Notification = 2016 //gd:MainLoop.NOTIFICATION_APPLICATION_FOCUS_IN
View Source
const NotificationApplicationFocusOut Object.Notification = 2017 //gd:MainLoop.NOTIFICATION_APPLICATION_FOCUS_OUT
View Source
const NotificationApplicationPaused Object.Notification = 2015 //gd:MainLoop.NOTIFICATION_APPLICATION_PAUSED
View Source
const NotificationApplicationResumed Object.Notification = 2014 //gd:MainLoop.NOTIFICATION_APPLICATION_RESUMED
View Source
const NotificationCrash Object.Notification = 2012 //gd:MainLoop.NOTIFICATION_CRASH
View Source
const NotificationOsImeUpdate Object.Notification = 2013 //gd:MainLoop.NOTIFICATION_OS_IME_UPDATE
View Source
const NotificationOsMemoryWarning Object.Notification = 2009 //gd:MainLoop.NOTIFICATION_OS_MEMORY_WARNING
View Source
const NotificationTextServerChanged Object.Notification = 2018 //gd:MainLoop.NOTIFICATION_TEXT_SERVER_CHANGED
View Source
const NotificationTranslationChanged Object.Notification = 2010 //gd:MainLoop.NOTIFICATION_TRANSLATION_CHANGED
View Source
const NotificationWmAbout Object.Notification = 2011 //gd:MainLoop.NOTIFICATION_WM_ABOUT

Variables

This section is empty.

Functions

This section is empty.

Types

type Advanced

type Advanced = class

Advanced exposes a 1:1 low-level instance of the class, undocumented, for those who know what they are doing.

type Any

type Any interface {
	gd.IsClass
	AsMainLoop() Instance
}

type Extension

type Extension[T gdclass.Interface] struct{ gdclass.Extension[T, Instance] }

Extension can be embedded in a new struct to create an extension of this class. T should be the type that is embedding this [Extension]See Interface for methods that can be overridden by T.

func (*Extension[T]) AsMainLoop

func (self *Extension[T]) AsMainLoop() Instance

func (*Extension[T]) AsObject

func (self *Extension[T]) AsObject() [1]gd.Object

type ID

type ID Object.ID

ID is a typed object ID (reference) to an instance of this class, use it to store references to objects with unknown lifetimes, as an ID will not panic on use if the underlying object has been destroyed.

func (ID) Instance

func (id ID) Instance() (Instance, bool)

type Implementation

type Implementation = implementation

Implementation implements Interface with empty methods.

type Instance

type Instance [1]gdclass.MainLoop

Instance of the class with convieniently typed arguments and results.

var Nil Instance

Nil is a nil/null instance of the class. Equivalent to the zero value.

func New

func New() Instance

func (Instance) AsMainLoop

func (self Instance) AsMainLoop() Instance

func (Instance) AsObject

func (self Instance) AsObject() [1]gd.Object

func (Instance) ID

func (self Instance) ID() ID

func (Instance) OnOnRequestPermissionsResult

func (self Instance) OnOnRequestPermissionsResult(cb func(permission string, granted bool), flags ...Signal.Flags)

func (*Instance) SetObject

func (self *Instance) SetObject(obj [1]gd.Object) bool

func (Instance) Virtual

func (self Instance) Virtual(name string) reflect.Value

type Interface

type Interface interface {
	// Called once during initialization.
	Initialize()
	// Called each physics frame with the time since the last physics frame as argument ('delta', in seconds). Equivalent to [graphics.gd/classdb/Node.Instance.PhysicsProcess].
	//
	// If implemented, the method must return a boolean value. true ends the main loop, while false lets it proceed to the next frame.
	//
	// Note: 'delta' will be larger than expected if running at a framerate lower than [graphics.gd/classdb/Engine.PhysicsTicksPerSecond] / [graphics.gd/classdb/Engine.MaxPhysicsStepsPerFrame] FPS. This is done to avoid "spiral of death" scenarios where performance would plummet due to an ever-increasing number of physics steps per frame. This behavior affects both [Interface.Process] and [Interface.PhysicsProcess]. As a result, avoid using 'delta' for time measurements in real-world seconds. Use the [graphics.gd/classdb/Time] singleton's methods for this purpose instead, such as [graphics.gd/classdb/Time.GetTicksUsec].
	PhysicsProcess(delta Float.X) bool
	// Called each process (idle) frame with the time since the last process frame as argument (in seconds). Equivalent to [graphics.gd/classdb/Node.Instance.Process].
	//
	// If implemented, the method must return a boolean value. true ends the main loop, while false lets it proceed to the next frame.
	//
	// Note: 'delta' will be larger than expected if running at a framerate lower than [graphics.gd/classdb/Engine.PhysicsTicksPerSecond] / [graphics.gd/classdb/Engine.MaxPhysicsStepsPerFrame] FPS. This is done to avoid "spiral of death" scenarios where performance would plummet due to an ever-increasing number of physics steps per frame. This behavior affects both [Interface.Process] and [Interface.PhysicsProcess]. As a result, avoid using 'delta' for time measurements in real-world seconds. Use the [graphics.gd/classdb/Time] singleton's methods for this purpose instead, such as [graphics.gd/classdb/Time.GetTicksUsec].
	Process(delta Float.X) bool
	// Called before the program exits.
	Finalize()
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL