64cd9f898d
* 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
75 lines
3.4 KiB
Lua
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.
|