Files
itgmania212121/Docs/Themerdocs/Examples/anatomy_of_an_actor.lua
T
freem 64cd9f898d Various changes to things in the Docs folder:
* remove unused WindowsNotes.txt
* various sm-ssc -> StepMania (and similar) changes
* Rewrote a bit of recommended_practices.txt
* Fix a copy/paste typo in anatomy_of_an_actor.lua
* many other things I can't remember; namely newlines at the end of files
2014-09-14 19:17:17 -05:00

75 lines
3.4 KiB
Lua

-- How actor creation works:
-- Actors are created from tables.
-- The elements in the table are used to set various attributes of the actor
-- or commands that the actor can execute.
-- Unless stated otherwise, assume that all elements are optional, few
-- attributes or commands are required.
-- Different Actor types have different attributes that can be set.
-- Any element with a name that ends in "Command" must be a function and can
-- later be executed by using the playcommand or queuecommand functions on
-- that actor.
-- Any element with a name that ends in "MessageCommand" must be a function
-- and will be executed whenever that message is broadcast.
-- The functions used for commands and messages are automatically passed a
-- "self" parameter, which is the actor. Message functions are also passed
-- a params table containing parameters that were broadcast with the
-- message. playcommand can be used to pass a parameters table to the
-- command, but queuecommand cannot.
-- For ActorFrame and actors that inherit from it, array elements of the
-- table are added as children.
-- Any element in the table that is not recognized as an attribute, command,
-- or child is discarded.
-- Some actors also fetch metrics from metrics.ini to control some aspect.
-- Metrics loaded will be listed in entries for individual actor types.
-- There are some helper functions like LoadActor and LoadFont, which are
-- documented in Docs/Luadoc/lua.xml.
-- This is a simple actor with no visual aspect and basic commands.
Def.Actor{
-- Attributes:
-- You should always supply a name for an actor. The name is used when
-- finding the actor with GetChild.
Name= "simple",
-- The base rotation and zoom. X, Y, and Z are all settable, though only
-- X is listed in this example. Rotation is in degrees.
BaseRotationX= 15,
BaseZoomX= .5,
-- The Init command is run for every actor after all the attributes are set
-- and all children have been loaded.
-- It's important to note that the Init command runs during screen
-- creation, before the screen has changed. If you use
-- SCREENMAN:GetTopScreen() in the Init command, you will not get the
-- screen that is being created because it isn't finished being created.
InitCommand= function(self)
Trace("Init command running for " .. self:GetName())
end,
-- The On command runs after screen creation has finished.
OnCommand= function(self)
Trace("On command running for " .. self:GetName())
-- Queue the Exa command to execute when all tweening has finished.
self:queuecommand("Exa")
end,
ExaCommand= function(self)
Trace("Exa command running for " .. self:GetName())
-- Execute the Tera command right now.
self:playcommand("Tera", {foo= 1, bar= 2})
end,
TeraCommand= function(self, params)
Trace("Tera command running for " .. self:GetName() .. ": " .. params.foo .. ", " .. params.bar)
-- Broadcast a message that will execute the Giga command for every actor
-- that has it.
MESSAGEMAN:Broadcast("Giga", {foo= 1, bar= 2})
end,
GigaMessageCommand= function(self, params)
Trace("Giga command running for " .. self:GetName() .. ": " .. params.foo .. ", " .. params.bar)
end
}
-- It is important to note that the things in Def are functions and you are
-- passing them a table when you use them. "Def.Actor{}", "Def.Actor({})",
-- and "local foo= {} Def.Actor(foo)" are all equivalent in effect, but
-- some forms make is easier to write well organized code.