Sei sulla pagina 1di 11

Wikibooks

Blender 3D: Noob to


Pro/Intro-GE-Source
< Blender 3D: Noob to Pro

Applicable Blender version: 2.43. Learn more

Mission Statement: The purpose of this


section is to show a programmer how to
make sense of the blender game engine
source code. It is not intended for those
who cannot code in C++. If you're one of the
people who have a basic understanding,
I'm being careful to use keywords that if
you google, should provide enough
information to understand.

When you press P, several things are sent


to the GE before anything can be done.
What might these be?

StartKetsjiShell(struct
ScrArea *area,
char*
scenename,

struct Main* maggie1,


struct SpaceIpo *sipo,
int
always_use_expand_framing)

Blender uses a lot of structs and classes.


You need to have a working understanding
of these as well as inheritance before we
can move on. For a refresher: http://www-
numi.fnal.gov/offline_software/srt_public_
context/WebDocs/Companion/cxx_crib/in
heritance.html

The SCA_IObject class


source/gameengine/GameLogic/SCA_IObj
ect.cpp and SCA_IObject.h

This class encapsulates a lot of other


things, so we can start here and move
downwards to the things that it controls.
First off it uses vectors to store all the
different Sensors, Controllers and
Actuators that are linked to the object. A
vector is like an array, but it is dynamic
and has built in functions.
We will begin by examining how sensors
are added.

typedef
std::vector<SCA_ISensor *>
SCA_SensorList;

SCA_SensorList
m_sensors;

The first line here is a typedef so it just


tells us that we can create a vector of
SCA_ISensor by using the name
SCA_Sensor list.
The second line creates the vector with the
name, m_sensors

void
SCA_IObject::AddSensor(SCA_
ISensor* act)<br />
{
m_sensors.push_back(act);
}

This function allows the parents of an


SCA_IObject to add new sensors by calling:
SCA_IObject.AddSensor(keyboard);
pseudocode

So now you know how Objects in the GE


create sensors (and actuators and
controllers, its the same :) So lets look at
how Sensors are grabbed! Since they are
dynamically added the program can't make
assumptions about how many are there or
what they will be. Thus there is this helper
function:

1''SCA_ISensor*
SCA_IObject::FindSensor(con
st STR_String& sensorname)
2{
3 SCA_ISensor*
foundsensor = NULL;
4
5 for
(SCA_SensorList::iterator
its = m_sensors.begin();!
(its==m_sensors.end());its+
+)
6 {
7 if ((*its)-
>GetName() == sensorname)
8 {<br />
9
foundsensor = (*its);
10
break;
11 }
12 }
13 return foundsensor;
14}''

Put simply, you give this the name of a


sensor and it returns a pointer to the
sensor.
for the newbies: I know you learned all
about classes when i asked you to, but just
in case:) the first word, "SCA_ISensor*" this
tells us that the function will return a
pointer to a SCA_ISensor. And based on
the functions arguments, we know that
when you call FindSensor you must give it a
string between the parenthesis.
in line 3 you create an empty pointer which
you will use to store the sensor that you
find. Then you loop and go through each
sensor in the vector of sensors (remember,
it was named m_sensors) until you find the
one that matches the name. If you don't
find one, you return NULL.
void SCA_IObject::Suspend(void) What this
does is it loops through all of the sensors
and sends each one a "suspend" call. What
this does is change a variable named,
"m_suspended" which makes stops the
sensors from running when they are called
with their Activate() function.

Retrieved from
"https://en.wikibooks.org/w/index.php?
title=Blender_3D:_Noob_to_Pro/Intro-GE-
Source&oldid=3101948"
Last edited 3 years ago by Animajoss…

Content is available under CC BY-SA 3.0 unless


otherwise noted.

Potrebbero piacerti anche