Difference between revisions of "Scripting Props and Acts"

From SCI Wiki
Jump to navigationJump to search
 
 
(One intermediate revision by the same user not shown)
Line 10: Line 10:
 
Example:
 
Example:
 
<div class="CodeBlockHeader">Code:</div>
 
<div class="CodeBlockHeader">Code:</div>
<syntaxhighlight lang="sci">
+
<syntaxhighlight lang="sci" class="cs">
 
     (instance aShadow of Prop
 
     (instance aShadow of Prop
 
         (properties
 
         (properties
Line 40: Line 40:
 
For example:
 
For example:
 
<div class="CodeBlockHeader">Code:</div>
 
<div class="CodeBlockHeader">Code:</div>
<syntaxhighlight lang="sci">        (aShadow:init())</syntaxhighlight>
+
<syntaxhighlight lang="sci" class="cs">        (aShadow:init())</syntaxhighlight>
 
</blockquote>
 
</blockquote>
  
It's that easy. Of course, the prop or actor's script can contain any of the standard script methods: '''changeState''', '''handleEvent''' or '''doit'''.
+
It's that easy. Of course, the prop or actor's script can contain any of the standard script methods: '''changeState''', '''handleEvent''' or '''doit'''.
  
 
&nbsp;
 
&nbsp;

Latest revision as of 15:35, 5 August 2013

Chapter 3 - Scripting Props and Acts

In addition to a room having a script associated with it, props and actors can also have scripts. If you have a lot of actors and props in a room, all doing different things, it is much easier to associated the scripting logic for a particular actor with that actor instead of in the room's script.

Adding a shadow of the ego

For this exercise, we'll make a Prop that acts as the shadow of the ego. The Prop's script's doit method will check the ego's position, and adjust its own position accordingly.

Example:

Code:
    (instance aShadow of Prop
        (properties
            x 0
            y 0
            view 800
        )
        (method (init)
            (super:init())
            (self:ignoreActors() z(-90))
            (self:setScript(shadowScript))
        )
    )

    (instance shadowScript of Script
        (properties)
        (method (doit)
            (aShadow:
                posn((+ 20 (send gEgo:x)) (- (send gEgo:y) 90))
            )
            (super:doit())
        )
    )

And then, in the init method of the room, you do

For example:

Code:
        (aShadow:init())

It's that easy. Of course, the prop or actor's script can contain any of the standard script methods: changeState, handleEvent or doit.

 

< Previous: Chapter 2 - Regions and Locales Next: Chapter 4 - Loopers >