Remove outdated documentation

This commit is contained in:
Rémi Verschelde 2015-12-12 20:53:57 +01:00
parent 101049518a
commit 61eb037d5d
45 changed files with 3 additions and 26907 deletions

8
.gitignore vendored
View File

@ -24,8 +24,9 @@ tools/editor/editor_icons.cpp
make.bat make.bat
log.txt log.txt
# Doxygen generated documentation # Documentation generated by doxygen or scripts
doc/doxygen/* doc/doxygen/
doc/html/
# Javascript specific # Javascript specific
*.bc *.bc
@ -189,9 +190,6 @@ AutoTest.Net/
# Installshield output folder # Installshield output folder
[Ee]xpress/ [Ee]xpress/
# dumpdoc generated files
doc/html/class_list
# DocProject is a documentation generator add-in # DocProject is a documentation generator add-in
DocProject/buildhelp/ DocProject/buildhelp/
DocProject/Help/*.HxT DocProject/Help/*.HxT

File diff suppressed because it is too large Load Diff

View File

@ -1,33 +0,0 @@
deferred:
ar ag ab gl - accumulation RGB + glow
nx ny mx my? - normal, motion
dr dg db sm - diffuse, shademodel
sr sg sb sp - specular OR shadeparams
ar ag ab gl
nx ny sp sp
dr dg db se
444 6
se can be 6 bits, 2 for shade model
shade models:
0 - none
1 - wrap
2 - toon
3 - fresne
sp: 2 bits what - 6 bits param
16

View File

@ -1,40 +0,0 @@
-Oceano
-Portales
-Grilla
-Personaje
-Auto (?)
-Fisica
-Fisica Idle
-Low level APIS (Server)
-Sonido Posicional
-Custom Shaders
-HDR
-Trees Waving
-luces
-fixed material
-shader material
-synctoaudio speech and speex
-particulas con gif animados para mostrar que es cada parametro
-soporte de syntax hilight de gdscript para editores mas comunes
-instanciar enemigos usando duplicate
-simulated motion con animacion
-animation player controla otro animation player (tipo camina de lugar a otro y saluda)
-corutinas y loops con yield para animation, audio, etc
-CCD (bullets)
-custom gizmos, editor plugins en script
Clases que necesitan tutorial.
Animation/AnimationPlayer
Area2D (space override, notifications)
custom container demo
custon drawing in a canvas item
ignore mouse on top of button
input in a game, with _unhandled_input
demo containers
Control, anchors e input event handling
lots of 2D physics examples
dictionary and array doc of passing by reference?

File diff suppressed because it is too large Load Diff

View File

@ -1,295 +0,0 @@
class PhysicsTestBase extends MainLoopScripted {
bodies=[]
type_mesh_map={}
type_shape_map={}
cameratr=Transform()
function body_changed_transform(p_transform, p_velocity, p_angular_velocity,p_sleeping, p_visual_instance) {
VisualServer.instance_set_transform(p_visual_instance,p_transform);
}
function create_body(p_shape, p_body_mode, p_location, p_active=true) {
local mesh_instance = VisualServer.instance_create( type_mesh_map[p_shape] )
local body = PhysicsServer.body_create(RID(),p_body_mode,!p_active)
PhysicsServer.body_add_shape(body,type_shape_map[p_shape])
local query = PhysicsServer.query_create(this,"body_changed_transform",mesh_instance)
PhysicsServer.query_body_state(query, body)
PhysicsServer.body_set_state( body, PhysicsServer.BODY_STATE_TRANSFORM, p_location )
bodies.append( body )
return body
}
function create_static_plane(p_plane) {
local plane_shape = PhysicsServer.shape_create(PhysicsServer.SHAPE_PLANE)
PhysicsServer.shape_set_data( plane_shape, p_plane );
local b = PhysicsServer.body_create(RID(), PhysicsServer.BODY_MODE_STATIC );
PhysicsServer.body_add_shape(b, plane_shape);
return b;
}
function configure_body( p_body, p_mass, p_friction, p_bounce) {
PhysicsServer.body_set_param( p_body, PhysicsServer.BODY_PARAM_MASS, p_mass );
PhysicsServer.body_set_param( p_body, PhysicsServer.BODY_PARAM_FRICTION, p_friction );
PhysicsServer.body_set_param( p_body, PhysicsServer.BODY_PARAM_BOUNCE, p_bounce );
}
function init_shapes() {
/* SPHERE SHAPE */
local sphere_mesh = VisualServer.make_sphere_mesh(10,20,1.0);
local sphere_material = VisualServer.fixed_material_create();
//VisualServer.material_set_flag( sphere_material, VisualServer.MATERIAL_FLAG_WIREFRAME, true );
VisualServer.fixed_material_set_parameter( sphere_material, VisualServer.FIXED_MATERIAL_PARAM_DIFFUSE, Color(0.7,0.8,3.0) );
VisualServer.mesh_surface_set_material( sphere_mesh, 0, sphere_material );
type_mesh_map[PhysicsServer.SHAPE_SPHERE] <- sphere_mesh;
local sphere_shape=PhysicsServer.shape_create(PhysicsServer.SHAPE_SPHERE);
PhysicsServer.shape_set_data( sphere_shape, 1.0 );
type_shape_map[PhysicsServer.SHAPE_SPHERE] <- sphere_shape;
/* BOX SHAPE */
local box_planes = GeometryUtils.build_box_planes(Vector3(0.5,0.5,0.5));
local box_material = VisualServer.fixed_material_create();
VisualServer.fixed_material_set_parameter( box_material, VisualServer.FIXED_MATERIAL_PARAM_DIFFUSE, Color(1.0,0.2,0.2) );
local box_mesh = VisualServer.mesh_create();
VisualServer.mesh_add_surface_from_planes(box_mesh,box_planes);
VisualServer.mesh_surface_set_material( box_mesh, 0, box_material );
type_mesh_map[PhysicsServer.SHAPE_BOX]<- box_mesh;
local box_shape=PhysicsServer.shape_create(PhysicsServer.SHAPE_BOX);
PhysicsServer.shape_set_data( box_shape, Vector3(0.5,0.5,0.5) );
type_shape_map[PhysicsServer.SHAPE_BOX]<- box_shape;
/* CYLINDER SHAPE */
local cylinder_planes = GeometryUtils.build_cylinder_planes(0.5,1,12
,Vector3.AXIS_Z);
local cylinder_material = VisualServer.fixed_material_create();
VisualServer.fixed_material_set_parameter( cylinder_material, VisualServer.FIXED_MATERIAL_PARAM_DIFFUSE, Color(0.3,0.4,1.0) );
local cylinder_mesh = VisualServer.mesh_create();
VisualServer.mesh_add_surface_from_planes(cylinder_mesh,cylinder_planes);
VisualServer.mesh_surface_set_material( cylinder_mesh, 0, cylinder_material );
type_mesh_map[PhysicsServer.SHAPE_CYLINDER]<- cylinder_mesh;
local cylinder_shape=PhysicsServer.shape_create(PhysicsServer.SHAPE_CYLINDER);
local cylinder_params={}
cylinder_params["radius"]<- 0.5;
cylinder_params["height"]<- 2;
PhysicsServer.shape_set_data( cylinder_shape, cylinder_params );
type_shape_map[PhysicsServer.SHAPE_CYLINDER]<- cylinder_shape;
/* CAPSULE SHAPE */
local capsule_planes = GeometryUtils.build_capsule_planes(0.5,0.7,12,Vector3.AXIS_Z);
local capsule_material = VisualServer.fixed_material_create();
VisualServer.fixed_material_set_parameter( capsule_material, VisualServer.FIXED_MATERIAL_PARAM_DIFFUSE, Color(0.3,0.4,1.0) );
local capsule_mesh = VisualServer.mesh_create();
VisualServer.mesh_add_surface_from_planes(capsule_mesh,capsule_planes);
VisualServer.mesh_surface_set_material( capsule_mesh, 0, capsule_material );
type_mesh_map[PhysicsServer.SHAPE_CAPSULE]<-capsule_mesh;
local capsule_shape=PhysicsServer.shape_create(PhysicsServer.SHAPE_CAPSULE);
local capsule_params={}
capsule_params["radius"]<- 0.5;
capsule_params["height"]<- 1.4;
PhysicsServer.shape_set_data( capsule_shape, capsule_params );
type_shape_map[PhysicsServer.SHAPE_CAPSULE]<- capsule_shape;
/* CONVEX SHAPE */
local convex_planes = GeometryUtils.build_cylinder_planes(0.5,0.7,5,Vector3.AXIS_Z);
local convex_material = VisualServer.fixed_material_create();
VisualServer.fixed_material_set_parameter( convex_material, VisualServer.FIXED_MATERIAL_PARAM_DIFFUSE, Color(0.8,0.2,0.9));
local convex_mesh = VisualServer.mesh_create();
VisualServer.mesh_add_surface_from_planes(convex_mesh,convex_planes);
VisualServer.mesh_surface_set_material( convex_mesh, 0, convex_material );
type_mesh_map[PhysicsServer.SHAPE_CONVEX_POLYGON]<- convex_mesh;
local convex_shape=PhysicsServer.shape_create(PhysicsServer.SHAPE_CONVEX_POLYGON);
PhysicsServer.shape_set_data( convex_shape, convex_planes );
type_shape_map[PhysicsServer.SHAPE_CONVEX_POLYGON]<- convex_shape;
}
function make_trimesh(p_faces,p_xform=Transform()) {
local trimesh_shape = PhysicsServer.shape_create(PhysicsServer.SHAPE_CONCAVE_POLYGON);
PhysicsServer.shape_set_data(trimesh_shape, p_faces);
p_faces=PhysicsServer.shape_get_data(trimesh_shape); // optimized one
normals=[]
for (i=0;i<p_faces.length()/3;i++) {
p=Plane( p_faces[i*3+0],p_faces[i*3+1], p_faces[i*3+2] );
normals.append(p.normal);
normals.append(p.normal);
normals.append(p.normal);
}
local trimesh_mesh = VisualServer.mesh_create();
VisualServer.mesh_add_surface(trimesh_mesh, VS::PRIMITIVE_TRIANGLES, VS::ARRAY_FORMAT_VERTEX|VS::ARRAY_FORMAT_NORMAL, p_faces.length() );
VisualServer.mesh_surface_set_array(trimesh_mesh,0,VS::ARRAY_VERTEX, p_faces );
VisualServer.mesh_surface_set_array(trimesh_mesh,0,VS::ARRAY_NORMAL, normals );
local trimesh_mat = VisualServer.fixed_material_create();
VisualServer.fixed_material_set_parameter( trimesh_mat, VisualServer.FIXED_MATERIAL_PARAM_DIFFUSE, Color(1.0,0.5,0.8));
//VisualServer.material_set_flag( trimesh_mat, VisualServer.MATERIAL_FLAG_UNSHADED,true);
VisualServer.mesh_surface_set_material( trimesh_mesh, 0, trimesh_mat );
local triins = VisualServer.instance_create(trimesh_mesh);
local tribody = PhysicsServer.body_create(RID(), PhysicsServer.BODY_MODE_STATIC);
PhysicsServer.body_add_shape(tribody, trimesh_shape);
tritrans = p_xform;
PhysicsServer.body_set_state( tribody, PhysicsServer.BODY_STATE_TRANSFORM, tritrans );
VisualServer.instance_set_transform( triins, tritrans );
//RID trimesh_material = VisualServer.fixed_material_create();
//VisualServer.material_generate( trimesh_material, Color(0.2,0.4,0.6) );
//VisualServer.mesh_surface_set_material( trimesh_mesh, 0, trimesh_material );
}
function make_grid(p_width,p_height,p_cellsize,p_cellheight,p_xform=Transform()) {
local grid = []
for (local i =0;i<p_width;i++) {
local row = []
for (local j=0;j<p_height;j++) {
local val = 1.0+Math.random(-p_cellheight, p_cellheight );
row.append(val)
}
grid.append(row)
}
local faces=[]
for (local i =1;i<p_width;i++) {
for (local j=1;j<p_height;j++) {
function MAKE_VERTEX(m_x,m_z) {
local v= Vector3( (m_x-p_width/2)*p_cellsize, grid[m_x][m_z], (m_z-p_height/2)*p_cellsize )
faces.push_back(v)
}
MAKE_VERTEX(i,j-1)
MAKE_VERTEX(i,j)
MAKE_VERTEX(i-1,j)
MAKE_VERTEX(i-1,j-1)
MAKE_VERTEX(i,j-1)
MAKE_VERTEX(i-1,j)
}
}
make_trimesh(faces,p_xform);
}
quit=false
transform = Transform()
camera=RID()
function init_internal() {}
function iteration_internal(time) {}
//public
function input_event(p_event) {
}
function request_quit() {
quit=true;
}
function init() {
init_shapes();
/* LIGHT */
local lightaux = VisualServer.light_create( VisualServer.LIGHT_DIRECTIONAL );
//VisualServer.light_set_color( lightaux, VisualServer.LIGHT_COLOR_AMBIENT, Color(0.0,0.0,0.0) );
VisualServer.light_set_shadow(lightaux,true);
local light = VisualServer.instance_create( lightaux );
local t=Transform()
t.rotate(Vector3(1.0,0,0),0.6);
VisualServer.instance_set_transform(light,t);
/* CAMERA */
camera = VisualServer.camera_create();
local viewport = VisualServer.viewport_create();
VisualServer.viewport_attach_camera( viewport, camera );
VisualServer.viewport_set_parent(viewport, RID() );
VisualServer.camera_set_perspective(camera,60,0.1,20.0);
cameratr=Transform( Matrix3(), Vector3(0,2,8))
VisualServer.camera_set_transform(camera,cameratr);
quit=false;
init_internal()
}
function iteration(p_time) {
// VisualServer.camera_set_transform(camera,cameratr);
iteration_internal(p_time)
return quit;
}
function idle(p_time) {
return quit;
}
function finish() {
}
constructor() {
MainLoopScripted.constructor();
}
}
return PhysicsTestBase;

View File

@ -1,42 +0,0 @@
include("test_base.sq")
class TestFall extends PhysicsTestBase {
fall_elements=10
function init_internal() {
for (local i=0;i<10;i++) {
local shape_idx=[
PhysicsServer.SHAPE_SPHERE,
PhysicsServer.SHAPE_BOX,
PhysicsServer.SHAPE_CAPSULE,
PhysicsServer.SHAPE_CYLINDER,
PhysicsServer.SHAPE_CONVEX_POLYGON
];
local stype=shape_idx[i%5];
// stype=PhysicsServer.SHAPE_SPHERE;
local t=Transform()
t.set_origin(Vector3(-0.7+0.0*i,3.5+4.1*i,0))
t.rotate_basis(Vector3(1,0,0),Math.PI/4*i)
local b = create_body(stype,PhysicsServer.BODY_MODE_RIGID,t);
}
create_static_plane( Plane( Vector3(0,1,0), -1) );
}
constructor() {
PhysicsTestBase.constructor()
}
}
return TestFall

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

View File

@ -1,12 +0,0 @@
/*************************************************/
/* $filename */
/*************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/*************************************************/
/* Source code within this file is: */
/* (c) 2007-2010 Juan Linietsky, Ariel Manzur */
/* All Rights Reserved. */
/*************************************************/

File diff suppressed because one or more lines are too long

View File

@ -1,459 +0,0 @@
<html><link href="main.css" rel="stylesheet" type="text/css" /><body><table class="top_table"><tr><td class="top_table"><image src="images/logo.png" /></td><td class="top_table"><a href="index.html">Index</a></td><td class="top_table"><a href="alphabetical.html">Classes</a></td><td class="top_table"><a href="category.html">Categories</a></td><td><a href="inheritance.html">Inheritance</a></td></tr></table><hr /><div class="class"><a name="@Global Scope"><h3 class="title class_title">@Global Scope</h3></a><div class="description class_description">
Global scope constants and variables.
</div><br /><div class="category"><span class="category">Category: </span><a class="category_ref" href="category.html#CATEGORY_Core">Core</a></div><h4>Public Variables:</h4><div class="member_list"><li><div class="member"><a class="datatype_existing" href="Globals.html">Globals </a><span class="identifier member_name"> Globals </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="IP.html">IP </a><span class="identifier member_name"> IP </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="Geometry.html">Geometry </a><span class="identifier member_name"> Geometry </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="ResourceLoader.html">ResourceLoader </a><span class="identifier member_name"> ResourceLoader </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="ResourceSaver.html">ResourceSaver </a><span class="identifier member_name"> ResourceSaver </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="PathRemap.html">PathRemap </a><span class="identifier member_name"> PathRemap </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="OS.html">OS </a><span class="identifier member_name"> OS </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="TranslationServer.html">TranslationServer </a><span class="identifier member_name"> TranslationServer </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="TranslationServer.html">TranslationServer </a><span class="identifier member_name"> TS </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="SceneIO.html">SceneIO </a><span class="identifier member_name"> SceneIO </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="VisualServer.html">VisualServer </a><span class="identifier member_name"> VisualServer </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="VisualServer.html">VisualServer </a><span class="identifier member_name"> VS </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="AudioServer.html">AudioServer </a><span class="identifier member_name"> AudioServer </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="AudioServer.html">AudioServer </a><span class="identifier member_name"> AS </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="PhysicsServer.html">PhysicsServer </a><span class="identifier member_name"> PhysicsServer </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="PhysicsServer.html">PhysicsServer </a><span class="identifier member_name"> PS </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="Physics2DServer.html">Physics2DServer </a><span class="identifier member_name"> Physics2DServer </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="Physics2DServer.html">Physics2DServer </a><span class="identifier member_name"> PS2D </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="SpatialSound2DServer.html">SpatialSound2DServer </a><span class="identifier member_name"> SpatialSoundServer </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="SpatialSound2DServer.html">SpatialSound2DServer </a><span class="identifier member_name"> SS </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="SpatialSound2DServer.html">SpatialSound2DServer </a><span class="identifier member_name"> SpatialSound2DServer </span><span class="member_description">
</span></div></li><li><div class="member"><a class="datatype_existing" href="SpatialSound2DServer.html">SpatialSound2DServer </a><span class="identifier member_name"> SS2D </span><span class="member_description">
</span></div></li></div><h4>Constants:</h4><div class="constant_list"><li><div class="constant"><span class="identifier constant_name">MARGIN_LEFT </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">MARGIN_TOP </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">MARGIN_RIGHT </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">MARGIN_BOTTOM </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">VERTICAL </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">HORIZONTAL </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">HALIGN_LEFT </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">HALIGN_CENTER </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">HALIGN_RIGHT </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">VALIGN_TOP </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">VALIGN_CENTER </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">VALIGN_BOTTOM </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">SPKEY </span><span class="symbol">= </span><span class="constant_value">16777216 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ESCAPE </span><span class="symbol">= </span><span class="constant_value">16777217 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_TAB </span><span class="symbol">= </span><span class="constant_value">16777218 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BACKTAB </span><span class="symbol">= </span><span class="constant_value">16777219 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BACKSPACE </span><span class="symbol">= </span><span class="constant_value">16777220 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_RETURN </span><span class="symbol">= </span><span class="constant_value">16777221 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ENTER </span><span class="symbol">= </span><span class="constant_value">16777222 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_INSERT </span><span class="symbol">= </span><span class="constant_value">16777223 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_DELETE </span><span class="symbol">= </span><span class="constant_value">16777224 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PAUSE </span><span class="symbol">= </span><span class="constant_value">16777225 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PRINT </span><span class="symbol">= </span><span class="constant_value">16777226 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SYSREQ </span><span class="symbol">= </span><span class="constant_value">16777227 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_CLEAR </span><span class="symbol">= </span><span class="constant_value">16777228 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_HOME </span><span class="symbol">= </span><span class="constant_value">16777229 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_END </span><span class="symbol">= </span><span class="constant_value">16777230 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LEFT </span><span class="symbol">= </span><span class="constant_value">16777231 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_UP </span><span class="symbol">= </span><span class="constant_value">16777232 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_RIGHT </span><span class="symbol">= </span><span class="constant_value">16777233 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_DOWN </span><span class="symbol">= </span><span class="constant_value">16777234 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PAGEUP </span><span class="symbol">= </span><span class="constant_value">16777235 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PAGEDOWN </span><span class="symbol">= </span><span class="constant_value">16777236 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SHIFT </span><span class="symbol">= </span><span class="constant_value">16777237 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_CONTROL </span><span class="symbol">= </span><span class="constant_value">16777238 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_META </span><span class="symbol">= </span><span class="constant_value">16777239 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ALT </span><span class="symbol">= </span><span class="constant_value">16777240 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_CAPSLOCK </span><span class="symbol">= </span><span class="constant_value">16777241 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_NUMLOCK </span><span class="symbol">= </span><span class="constant_value">16777242 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SCROLLLOCK </span><span class="symbol">= </span><span class="constant_value">16777243 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F1 </span><span class="symbol">= </span><span class="constant_value">16777244 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F2 </span><span class="symbol">= </span><span class="constant_value">16777245 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F3 </span><span class="symbol">= </span><span class="constant_value">16777246 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F4 </span><span class="symbol">= </span><span class="constant_value">16777247 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F5 </span><span class="symbol">= </span><span class="constant_value">16777248 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F6 </span><span class="symbol">= </span><span class="constant_value">16777249 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F7 </span><span class="symbol">= </span><span class="constant_value">16777250 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F8 </span><span class="symbol">= </span><span class="constant_value">16777251 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F9 </span><span class="symbol">= </span><span class="constant_value">16777252 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F10 </span><span class="symbol">= </span><span class="constant_value">16777253 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F11 </span><span class="symbol">= </span><span class="constant_value">16777254 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F12 </span><span class="symbol">= </span><span class="constant_value">16777255 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F13 </span><span class="symbol">= </span><span class="constant_value">16777256 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F14 </span><span class="symbol">= </span><span class="constant_value">16777257 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F15 </span><span class="symbol">= </span><span class="constant_value">16777258 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F16 </span><span class="symbol">= </span><span class="constant_value">16777259 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_ENTER </span><span class="symbol">= </span><span class="constant_value">16777344 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_MULTIPLY </span><span class="symbol">= </span><span class="constant_value">16777345 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_DIVIDE </span><span class="symbol">= </span><span class="constant_value">16777346 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_SUBSTRACT </span><span class="symbol">= </span><span class="constant_value">16777347 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_PERIOD </span><span class="symbol">= </span><span class="constant_value">16777348 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_ADD </span><span class="symbol">= </span><span class="constant_value">16777349 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_0 </span><span class="symbol">= </span><span class="constant_value">16777350 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_1 </span><span class="symbol">= </span><span class="constant_value">16777351 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_2 </span><span class="symbol">= </span><span class="constant_value">16777352 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_3 </span><span class="symbol">= </span><span class="constant_value">16777353 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_4 </span><span class="symbol">= </span><span class="constant_value">16777354 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_5 </span><span class="symbol">= </span><span class="constant_value">16777355 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_6 </span><span class="symbol">= </span><span class="constant_value">16777356 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_7 </span><span class="symbol">= </span><span class="constant_value">16777357 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_8 </span><span class="symbol">= </span><span class="constant_value">16777358 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_KP_9 </span><span class="symbol">= </span><span class="constant_value">16777359 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SUPER_L </span><span class="symbol">= </span><span class="constant_value">16777260 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SUPER_R </span><span class="symbol">= </span><span class="constant_value">16777261 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MENU </span><span class="symbol">= </span><span class="constant_value">16777262 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_HYPER_L </span><span class="symbol">= </span><span class="constant_value">16777263 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_HYPER_R </span><span class="symbol">= </span><span class="constant_value">16777264 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_HELP </span><span class="symbol">= </span><span class="constant_value">16777265 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_DIRECTION_L </span><span class="symbol">= </span><span class="constant_value">16777266 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_DIRECTION_R </span><span class="symbol">= </span><span class="constant_value">16777267 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BACK </span><span class="symbol">= </span><span class="constant_value">16777280 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_FORWARD </span><span class="symbol">= </span><span class="constant_value">16777281 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_STOP </span><span class="symbol">= </span><span class="constant_value">16777282 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_REFRESH </span><span class="symbol">= </span><span class="constant_value">16777283 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_VOLUMEDOWN </span><span class="symbol">= </span><span class="constant_value">16777284 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_VOLUMEMUTE </span><span class="symbol">= </span><span class="constant_value">16777285 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_VOLUMEUP </span><span class="symbol">= </span><span class="constant_value">16777286 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BASSBOOST </span><span class="symbol">= </span><span class="constant_value">16777287 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BASSUP </span><span class="symbol">= </span><span class="constant_value">16777288 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BASSDOWN </span><span class="symbol">= </span><span class="constant_value">16777289 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_TREBLEUP </span><span class="symbol">= </span><span class="constant_value">16777290 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_TREBLEDOWN </span><span class="symbol">= </span><span class="constant_value">16777291 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MEDIAPLAY </span><span class="symbol">= </span><span class="constant_value">16777292 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MEDIASTOP </span><span class="symbol">= </span><span class="constant_value">16777293 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MEDIAPREVIOUS </span><span class="symbol">= </span><span class="constant_value">16777294 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MEDIANEXT </span><span class="symbol">= </span><span class="constant_value">16777295 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MEDIARECORD </span><span class="symbol">= </span><span class="constant_value">16777296 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_HOMEPAGE </span><span class="symbol">= </span><span class="constant_value">16777297 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_FAVORITES </span><span class="symbol">= </span><span class="constant_value">16777298 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SEARCH </span><span class="symbol">= </span><span class="constant_value">16777299 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_STANDBY </span><span class="symbol">= </span><span class="constant_value">16777300 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_OPENURL </span><span class="symbol">= </span><span class="constant_value">16777301 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCHMAIL </span><span class="symbol">= </span><span class="constant_value">16777302 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCHMEDIA </span><span class="symbol">= </span><span class="constant_value">16777303 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH0 </span><span class="symbol">= </span><span class="constant_value">16777304 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH1 </span><span class="symbol">= </span><span class="constant_value">16777305 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH2 </span><span class="symbol">= </span><span class="constant_value">16777306 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH3 </span><span class="symbol">= </span><span class="constant_value">16777307 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH4 </span><span class="symbol">= </span><span class="constant_value">16777308 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH5 </span><span class="symbol">= </span><span class="constant_value">16777309 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH6 </span><span class="symbol">= </span><span class="constant_value">16777310 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH7 </span><span class="symbol">= </span><span class="constant_value">16777311 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH8 </span><span class="symbol">= </span><span class="constant_value">16777312 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCH9 </span><span class="symbol">= </span><span class="constant_value">16777313 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCHA </span><span class="symbol">= </span><span class="constant_value">16777314 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCHB </span><span class="symbol">= </span><span class="constant_value">16777315 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCHC </span><span class="symbol">= </span><span class="constant_value">16777316 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCHD </span><span class="symbol">= </span><span class="constant_value">16777317 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCHE </span><span class="symbol">= </span><span class="constant_value">16777318 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LAUNCHF </span><span class="symbol">= </span><span class="constant_value">16777319 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_UNKNOWN </span><span class="symbol">= </span><span class="constant_value">33554431 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SPACE </span><span class="symbol">= </span><span class="constant_value">32 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_EXCLAM </span><span class="symbol">= </span><span class="constant_value">33 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_QUOTEDBL </span><span class="symbol">= </span><span class="constant_value">34 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_NUMBERSIGN </span><span class="symbol">= </span><span class="constant_value">35 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_DOLLAR </span><span class="symbol">= </span><span class="constant_value">36 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PERCENT </span><span class="symbol">= </span><span class="constant_value">37 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_AMPERSAND </span><span class="symbol">= </span><span class="constant_value">38 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_APOSTROPHE </span><span class="symbol">= </span><span class="constant_value">39 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PARENLEFT </span><span class="symbol">= </span><span class="constant_value">40 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PARENRIGHT </span><span class="symbol">= </span><span class="constant_value">41 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ASTERISK </span><span class="symbol">= </span><span class="constant_value">42 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PLUS </span><span class="symbol">= </span><span class="constant_value">43 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_COMMA </span><span class="symbol">= </span><span class="constant_value">44 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MINUS </span><span class="symbol">= </span><span class="constant_value">45 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PERIOD </span><span class="symbol">= </span><span class="constant_value">46 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SLASH </span><span class="symbol">= </span><span class="constant_value">47 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_0 </span><span class="symbol">= </span><span class="constant_value">48 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_1 </span><span class="symbol">= </span><span class="constant_value">49 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_2 </span><span class="symbol">= </span><span class="constant_value">50 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_3 </span><span class="symbol">= </span><span class="constant_value">51 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_4 </span><span class="symbol">= </span><span class="constant_value">52 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_5 </span><span class="symbol">= </span><span class="constant_value">53 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_6 </span><span class="symbol">= </span><span class="constant_value">54 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_7 </span><span class="symbol">= </span><span class="constant_value">55 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_8 </span><span class="symbol">= </span><span class="constant_value">56 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_9 </span><span class="symbol">= </span><span class="constant_value">57 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_COLON </span><span class="symbol">= </span><span class="constant_value">58 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SEMICOLON </span><span class="symbol">= </span><span class="constant_value">59 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_LESS </span><span class="symbol">= </span><span class="constant_value">60 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_EQUAL </span><span class="symbol">= </span><span class="constant_value">61 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_GREATER </span><span class="symbol">= </span><span class="constant_value">62 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_QUESTION </span><span class="symbol">= </span><span class="constant_value">63 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_AT </span><span class="symbol">= </span><span class="constant_value">64 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_A </span><span class="symbol">= </span><span class="constant_value">65 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_B </span><span class="symbol">= </span><span class="constant_value">66 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_C </span><span class="symbol">= </span><span class="constant_value">67 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_D </span><span class="symbol">= </span><span class="constant_value">68 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_E </span><span class="symbol">= </span><span class="constant_value">69 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_F </span><span class="symbol">= </span><span class="constant_value">70 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_G </span><span class="symbol">= </span><span class="constant_value">71 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_H </span><span class="symbol">= </span><span class="constant_value">72 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_I </span><span class="symbol">= </span><span class="constant_value">73 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_J </span><span class="symbol">= </span><span class="constant_value">74 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_K </span><span class="symbol">= </span><span class="constant_value">75 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_L </span><span class="symbol">= </span><span class="constant_value">76 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_M </span><span class="symbol">= </span><span class="constant_value">77 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_N </span><span class="symbol">= </span><span class="constant_value">78 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_O </span><span class="symbol">= </span><span class="constant_value">79 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_P </span><span class="symbol">= </span><span class="constant_value">80 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_Q </span><span class="symbol">= </span><span class="constant_value">81 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_R </span><span class="symbol">= </span><span class="constant_value">82 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_S </span><span class="symbol">= </span><span class="constant_value">83 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_T </span><span class="symbol">= </span><span class="constant_value">84 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_U </span><span class="symbol">= </span><span class="constant_value">85 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_V </span><span class="symbol">= </span><span class="constant_value">86 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_W </span><span class="symbol">= </span><span class="constant_value">87 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_X </span><span class="symbol">= </span><span class="constant_value">88 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_Y </span><span class="symbol">= </span><span class="constant_value">89 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_Z </span><span class="symbol">= </span><span class="constant_value">90 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BRACKETLEFT </span><span class="symbol">= </span><span class="constant_value">91 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BACKSLASH </span><span class="symbol">= </span><span class="constant_value">92 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BRACKETRIGHT </span><span class="symbol">= </span><span class="constant_value">93 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ASCIICIRCUM </span><span class="symbol">= </span><span class="constant_value">94 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_UNDERSCORE </span><span class="symbol">= </span><span class="constant_value">95 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_QUOTELEFT </span><span class="symbol">= </span><span class="constant_value">96 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BRACELEFT </span><span class="symbol">= </span><span class="constant_value">123 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BAR </span><span class="symbol">= </span><span class="constant_value">124 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BRACERIGHT </span><span class="symbol">= </span><span class="constant_value">125 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ASCIITILDE </span><span class="symbol">= </span><span class="constant_value">126 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_NOBREAKSPACE </span><span class="symbol">= </span><span class="constant_value">160 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_EXCLAMDOWN </span><span class="symbol">= </span><span class="constant_value">161 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_CENT </span><span class="symbol">= </span><span class="constant_value">162 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_STERLING </span><span class="symbol">= </span><span class="constant_value">163 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_CURRENCY </span><span class="symbol">= </span><span class="constant_value">164 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_YEN </span><span class="symbol">= </span><span class="constant_value">165 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_BROKENBAR </span><span class="symbol">= </span><span class="constant_value">166 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SECTION </span><span class="symbol">= </span><span class="constant_value">167 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_DIAERESIS </span><span class="symbol">= </span><span class="constant_value">168 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_COPYRIGHT </span><span class="symbol">= </span><span class="constant_value">169 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ORDFEMININE </span><span class="symbol">= </span><span class="constant_value">170 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_GUILLEMOTLEFT </span><span class="symbol">= </span><span class="constant_value">171 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_NOTSIGN </span><span class="symbol">= </span><span class="constant_value">172 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_HYPHEN </span><span class="symbol">= </span><span class="constant_value">173 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_REGISTERED </span><span class="symbol">= </span><span class="constant_value">174 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MACRON </span><span class="symbol">= </span><span class="constant_value">175 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_DEGREE </span><span class="symbol">= </span><span class="constant_value">176 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PLUSMINUS </span><span class="symbol">= </span><span class="constant_value">177 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_TWOSUPERIOR </span><span class="symbol">= </span><span class="constant_value">178 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_THREESUPERIOR </span><span class="symbol">= </span><span class="constant_value">179 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ACUTE </span><span class="symbol">= </span><span class="constant_value">180 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MU </span><span class="symbol">= </span><span class="constant_value">181 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PARAGRAPH </span><span class="symbol">= </span><span class="constant_value">182 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_PERIODCENTERED </span><span class="symbol">= </span><span class="constant_value">183 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_CEDILLA </span><span class="symbol">= </span><span class="constant_value">184 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ONESUPERIOR </span><span class="symbol">= </span><span class="constant_value">185 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MASCULINE </span><span class="symbol">= </span><span class="constant_value">186 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_GUILLEMOTRIGHT </span><span class="symbol">= </span><span class="constant_value">187 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ONEQUARTER </span><span class="symbol">= </span><span class="constant_value">188 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ONEHALF </span><span class="symbol">= </span><span class="constant_value">189 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_THREEQUARTERS </span><span class="symbol">= </span><span class="constant_value">190 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_QUESTIONDOWN </span><span class="symbol">= </span><span class="constant_value">191 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_AGRAVE </span><span class="symbol">= </span><span class="constant_value">192 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_AACUTE </span><span class="symbol">= </span><span class="constant_value">193 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ACIRCUMFLEX </span><span class="symbol">= </span><span class="constant_value">194 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ATILDE </span><span class="symbol">= </span><span class="constant_value">195 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ADIAERESIS </span><span class="symbol">= </span><span class="constant_value">196 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ARING </span><span class="symbol">= </span><span class="constant_value">197 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_AE </span><span class="symbol">= </span><span class="constant_value">198 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_CCEDILLA </span><span class="symbol">= </span><span class="constant_value">199 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_EGRAVE </span><span class="symbol">= </span><span class="constant_value">200 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_EACUTE </span><span class="symbol">= </span><span class="constant_value">201 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ECIRCUMFLEX </span><span class="symbol">= </span><span class="constant_value">202 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_EDIAERESIS </span><span class="symbol">= </span><span class="constant_value">203 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_IGRAVE </span><span class="symbol">= </span><span class="constant_value">204 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_IACUTE </span><span class="symbol">= </span><span class="constant_value">205 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ICIRCUMFLEX </span><span class="symbol">= </span><span class="constant_value">206 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_IDIAERESIS </span><span class="symbol">= </span><span class="constant_value">207 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ETH </span><span class="symbol">= </span><span class="constant_value">208 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_NTILDE </span><span class="symbol">= </span><span class="constant_value">209 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_OGRAVE </span><span class="symbol">= </span><span class="constant_value">210 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_OACUTE </span><span class="symbol">= </span><span class="constant_value">211 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_OCIRCUMFLEX </span><span class="symbol">= </span><span class="constant_value">212 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_OTILDE </span><span class="symbol">= </span><span class="constant_value">213 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_ODIAERESIS </span><span class="symbol">= </span><span class="constant_value">214 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MULTIPLY </span><span class="symbol">= </span><span class="constant_value">215 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_OOBLIQUE </span><span class="symbol">= </span><span class="constant_value">216 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_UGRAVE </span><span class="symbol">= </span><span class="constant_value">217 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_UACUTE </span><span class="symbol">= </span><span class="constant_value">218 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_UCIRCUMFLEX </span><span class="symbol">= </span><span class="constant_value">219 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_UDIAERESIS </span><span class="symbol">= </span><span class="constant_value">220 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_YACUTE </span><span class="symbol">= </span><span class="constant_value">221 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_THORN </span><span class="symbol">= </span><span class="constant_value">222 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_SSHARP </span><span class="symbol">= </span><span class="constant_value">223 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_DIVISION </span><span class="symbol">= </span><span class="constant_value">247 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_YDIAERESIS </span><span class="symbol">= </span><span class="constant_value">255 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_CODE_MASK </span><span class="symbol">= </span><span class="constant_value">33554431 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MODIFIER_MASK </span><span class="symbol">= </span><span class="constant_value">-16777216 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MASK_SHIFT </span><span class="symbol">= </span><span class="constant_value">33554432 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MASK_ALT </span><span class="symbol">= </span><span class="constant_value">67108864 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MASK_META </span><span class="symbol">= </span><span class="constant_value">134217728 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MASK_CTRL </span><span class="symbol">= </span><span class="constant_value">268435456 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MASK_KPAD </span><span class="symbol">= </span><span class="constant_value">536870912 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">KEY_MASK_GROUP_SWITCH </span><span class="symbol">= </span><span class="constant_value">1073741824 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">BUTTON_LEFT </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">BUTTON_RIGHT </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">BUTTON_MIDDLE </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">BUTTON_WHEEL_UP </span><span class="symbol">= </span><span class="constant_value">4 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">BUTTON_WHEEL_DOWN </span><span class="symbol">= </span><span class="constant_value">5 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">BUTTON_MASK_LEFT </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">BUTTON_MASK_RIGHT </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">BUTTON_MASK_MIDDLE </span><span class="symbol">= </span><span class="constant_value">4 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_0 </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_1 </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_2 </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_3 </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_4 </span><span class="symbol">= </span><span class="constant_value">4 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_5 </span><span class="symbol">= </span><span class="constant_value">5 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_6 </span><span class="symbol">= </span><span class="constant_value">6 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_7 </span><span class="symbol">= </span><span class="constant_value">7 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_8 </span><span class="symbol">= </span><span class="constant_value">8 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_9 </span><span class="symbol">= </span><span class="constant_value">9 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_10 </span><span class="symbol">= </span><span class="constant_value">10 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_11 </span><span class="symbol">= </span><span class="constant_value">11 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_12 </span><span class="symbol">= </span><span class="constant_value">12 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_13 </span><span class="symbol">= </span><span class="constant_value">13 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_14 </span><span class="symbol">= </span><span class="constant_value">14 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_15 </span><span class="symbol">= </span><span class="constant_value">15 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_BUTTON_MAX </span><span class="symbol">= </span><span class="constant_value">16 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SNES_A </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SNES_B </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SNES_X </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SNES_Y </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SONY_CIRCLE </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SONY_X </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SONY_SQUARE </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SONY_TRIANGLE </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SEGA_B </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SEGA_A </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SEGA_X </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SEGA_Y </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_XBOX_B </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_XBOX_A </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_XBOX_X </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_XBOX_Y </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_DS_A </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_DS_B </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_DS_X </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_DS_Y </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_SELECT </span><span class="symbol">= </span><span class="constant_value">10 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_START </span><span class="symbol">= </span><span class="constant_value">11 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_DPAD_UP </span><span class="symbol">= </span><span class="constant_value">12 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_DPAD_DOWN </span><span class="symbol">= </span><span class="constant_value">13 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_DPAD_LEFT </span><span class="symbol">= </span><span class="constant_value">14 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_DPAD_RIGHT </span><span class="symbol">= </span><span class="constant_value">15 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_L </span><span class="symbol">= </span><span class="constant_value">4 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_L2 </span><span class="symbol">= </span><span class="constant_value">6 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_L3 </span><span class="symbol">= </span><span class="constant_value">8 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_R </span><span class="symbol">= </span><span class="constant_value">5 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_R2 </span><span class="symbol">= </span><span class="constant_value">7 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_R3 </span><span class="symbol">= </span><span class="constant_value">9 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_AXIS_0 </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_AXIS_1 </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_AXIS_2 </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_AXIS_3 </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_AXIS_4 </span><span class="symbol">= </span><span class="constant_value">4 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_AXIS_5 </span><span class="symbol">= </span><span class="constant_value">5 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_AXIS_6 </span><span class="symbol">= </span><span class="constant_value">6 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_AXIS_7 </span><span class="symbol">= </span><span class="constant_value">7 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_AXIS_MAX </span><span class="symbol">= </span><span class="constant_value">8 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_ANALOG_0_X </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_ANALOG_0_Y </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_ANALOG_1_X </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_ANALOG_1_Y </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_ANALOG_2_X </span><span class="symbol">= </span><span class="constant_value">4 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">JOY_ANALOG_2_Y </span><span class="symbol">= </span><span class="constant_value">5 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">OK </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">FAILED </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_UNAVAILABLE </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_UNCONFIGURED </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_UNAUTHORIZED </span><span class="symbol">= </span><span class="constant_value">4 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_PARAMETER_RANGE_ERROR </span><span class="symbol">= </span><span class="constant_value">5 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_OUT_OF_MEMORY </span><span class="symbol">= </span><span class="constant_value">6 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_NOT_FOUND </span><span class="symbol">= </span><span class="constant_value">7 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_BAD_DRIVE </span><span class="symbol">= </span><span class="constant_value">8 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_BAD_PATH </span><span class="symbol">= </span><span class="constant_value">9 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_NO_PERMISSION </span><span class="symbol">= </span><span class="constant_value">10 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_ALREADY_IN_USE </span><span class="symbol">= </span><span class="constant_value">11 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_CANT_OPEN </span><span class="symbol">= </span><span class="constant_value">12 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_CANT_WRITE </span><span class="symbol">= </span><span class="constant_value">13 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_CANT_READ </span><span class="symbol">= </span><span class="constant_value">14 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_UNRECOGNIZED </span><span class="symbol">= </span><span class="constant_value">15 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_CORRUPT </span><span class="symbol">= </span><span class="constant_value">16 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_FILE_EOF </span><span class="symbol">= </span><span class="constant_value">17 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_CANT_OPEN </span><span class="symbol">= </span><span class="constant_value">18 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_CANT_CREATE </span><span class="symbol">= </span><span class="constant_value">19 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERROR_QUERY_FAILED </span><span class="symbol">= </span><span class="constant_value">20 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_ALREADY_IN_USE </span><span class="symbol">= </span><span class="constant_value">21 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_LOCKED </span><span class="symbol">= </span><span class="constant_value">22 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_TIMEOUT </span><span class="symbol">= </span><span class="constant_value">23 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_CANT_AQUIRE_RESOURCE </span><span class="symbol">= </span><span class="constant_value">24 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_INVALID_DATA </span><span class="symbol">= </span><span class="constant_value">26 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_INVALID_PARAMETER </span><span class="symbol">= </span><span class="constant_value">27 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_ALREADY_EXISTS </span><span class="symbol">= </span><span class="constant_value">28 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_DOES_NOT_EXIST </span><span class="symbol">= </span><span class="constant_value">29 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_DATABASE_CANT_READ </span><span class="symbol">= </span><span class="constant_value">30 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_DATABASE_CANT_WRITE </span><span class="symbol">= </span><span class="constant_value">31 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_COMPILATION_FAILED </span><span class="symbol">= </span><span class="constant_value">32 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_METHOD_NOT_FOUND </span><span class="symbol">= </span><span class="constant_value">33 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_LINK_FAILED </span><span class="symbol">= </span><span class="constant_value">34 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_SCRIPT_FAILED </span><span class="symbol">= </span><span class="constant_value">35 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_CYCLIC_LINK </span><span class="symbol">= </span><span class="constant_value">36 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_BUSY </span><span class="symbol">= </span><span class="constant_value">40 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_HELP </span><span class="symbol">= </span><span class="constant_value">42 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_BUG </span><span class="symbol">= </span><span class="constant_value">43 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">ERR_WTF </span><span class="symbol">= </span><span class="constant_value">45 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_HINT_NONE </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
No hint for edited property.
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_HINT_RANGE </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_HINT_EXP_RANGE </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
Hint string is an exponential range, defined as "min,max" or "min,max,step". This is valid for integers and floats.
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_HINT_ENUM </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
Property hint is an enumerated value, like "Hello,Something,Else". This is valid for integers, floats and strings properties.
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_HINT_LENGTH </span><span class="symbol">= </span><span class="constant_value">5 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_HINT_FLAGS </span><span class="symbol">= </span><span class="constant_value">7 </span><span class="constant_description">
Property hint is a bitmask description, for bits 0,1,2,3 abd 5 the hint would be like "Bit0,Bit1,Bit2,Bit3,,Bit5". Valid only for integers.
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_HINT_FILE </span><span class="symbol">= </span><span class="constant_value">8 </span><span class="constant_description">
String property is a file (so pop up a file dialog when edited). Hint string can be a set of wildcards like "*.doc".
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_HINT_DIR </span><span class="symbol">= </span><span class="constant_value">9 </span><span class="constant_description">
String property is a directory (so pop up a file dialog when edited).
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_HINT_RESOURCE_TYPE </span><span class="symbol">= </span><span class="constant_value">10 </span><span class="constant_description">
String property is a resource, so open the resource popup menu when edited.
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_USAGE_STORAGE </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
Property will be used as storage (default).
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_USAGE_STORAGE </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
Property will be used as storage (default).
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_USAGE_EDITOR </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
Property will be visible in editor (default).
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_USAGE_NETWORK </span><span class="symbol">= </span><span class="constant_value">4 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">PROPERTY_USAGE_DEFAULT </span><span class="symbol">= </span><span class="constant_value">7 </span><span class="constant_description">
Default usage (storage and editor).
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_NIL </span><span class="symbol">= </span><span class="constant_value">0 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_BOOL </span><span class="symbol">= </span><span class="constant_value">1 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_INT </span><span class="symbol">= </span><span class="constant_value">2 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_REAL </span><span class="symbol">= </span><span class="constant_value">3 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_STRING </span><span class="symbol">= </span><span class="constant_value">4 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_VECTOR2 </span><span class="symbol">= </span><span class="constant_value">5 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_RECT2 </span><span class="symbol">= </span><span class="constant_value">6 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_VECTOR3 </span><span class="symbol">= </span><span class="constant_value">7 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_MATRIX32 </span><span class="symbol">= </span><span class="constant_value">8 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_PLANE </span><span class="symbol">= </span><span class="constant_value">9 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_QUAT </span><span class="symbol">= </span><span class="constant_value">10 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_AABB </span><span class="symbol">= </span><span class="constant_value">11 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_MATRIX3 </span><span class="symbol">= </span><span class="constant_value">12 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_TRANSFORM </span><span class="symbol">= </span><span class="constant_value">13 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_COLOR </span><span class="symbol">= </span><span class="constant_value">14 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_IMAGE </span><span class="symbol">= </span><span class="constant_value">15 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_NODE_PATH </span><span class="symbol">= </span><span class="constant_value">16 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_RID </span><span class="symbol">= </span><span class="constant_value">17 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_OBJECT </span><span class="symbol">= </span><span class="constant_value">18 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_INPUT_EVENT </span><span class="symbol">= </span><span class="constant_value">19 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_DICTIONARY </span><span class="symbol">= </span><span class="constant_value">20 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_ARRAY </span><span class="symbol">= </span><span class="constant_value">21 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_RAW_ARRAY </span><span class="symbol">= </span><span class="constant_value">22 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_INT_ARRAY </span><span class="symbol">= </span><span class="constant_value">23 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_REAL_ARRAY </span><span class="symbol">= </span><span class="constant_value">24 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_STRING_ARRAY </span><span class="symbol">= </span><span class="constant_value">25 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_VECTOR2_ARRAY </span><span class="symbol">= </span><span class="constant_value">26 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_VECTOR3_ARRAY </span><span class="symbol">= </span><span class="constant_value">27 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_COLOR_ARRAY </span><span class="symbol">= </span><span class="constant_value">28 </span><span class="constant_description">
</span></div></li><li><div class="constant"><span class="identifier constant_name">TYPE_MAX </span><span class="symbol">= </span><span class="constant_value">29 </span><span class="constant_description">
</span></div></li></div><h4>Description:</h4><div class="description">
Global scope constants and variables. This is all that resides in the globals, constants regarding error codes, scancodes, property hints, etc. It's not much.
Singletons are also documented here, since they can be accessed from anywhere.
</div><h4>Method Documentation:</h4></div><hr /><span>Copyright 2008-2010 Codenix SRL</span></body></html>

View File

@ -1,2 +0,0 @@
<html><link href="main.css" rel="stylesheet" type="text/css" /><body><table class="top_table"><tr><td class="top_table"><image src="images/logo.png" /></td><td class="top_table"><a href="index.html">Index</a></td><td class="top_table"><a href="alphabetical.html">Classes</a></td><td class="top_table"><a href="category.html">Categories</a></td><td><a href="inheritance.html">Inheritance</a></td></tr></table><hr /><div class="class"><a name="@Squirrel"><h3 class="title class_title">@Squirrel</h3></a><div class="description class_description">
</div><br /><div class="category"><span class="category">Category: </span><a class="category_ref" href="category.html#CATEGORY_Core">Core</a></div><h4>Method Documentation:</h4></div><hr /><span>Copyright 2008-2010 Codenix SRL</span></body></html>

View File

@ -1,146 +0,0 @@
BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV, SPAN {
font-family: Arial, Geneva, Helvetica, sans-serif;
}
a {
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
td.top_table {
padding: 5px;
}
div.method_doc {
padding-bottom: 30px;
}
div.method_description {
margin-left: 30px;
}
list.inh_class_list {
margin-left: 30px;
}
div.inh_class_list {
margin-left: 30px;
}
div.method_doc div.method {
font-size: 12pt;
font-weight: bold;
}
span.funcdecl {
color: #202060;
}
span.funcdef {
color: #202060;
}
span.qualifier {
font-weight: bold;
}
span.symbol {
/*font-weight: bold;*/
color: #471870;
}
span.datatype {
color: #6a1533;
}
tr.category_title {
background-color: #333333;
}
a.category_title {
font-weight: bold;
color: #FFFFFF;
}
div.method_list {
margin-left: 30px;
}
div.constant_list {
margin-left: 30px;
}
div.member_list {
margin-left: 30px;
}
div.description {
margin-left: 30px;
}
div.class_description {
margin-left: 30px;
}
div.method_list li div {
display: inline;
}
div.member_list li div.member {
display: inline;
}
div.constant_list li div.constant {
display: inline;
}
span.member_description {
font-style: italic;
color: grey;
}
span.constant_description {
font-style: italic;
color: grey;
}
span.identifier {
font-weight: bold;
}
table.class_table td {
vertical-align: top;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,128 +0,0 @@
/* start css.sty */
.cmr-7{font-size:70%;}
.cmmi-7{font-size:70%;font-style: italic;}
.cmmi-10{font-style: italic;}
.ectt-1000{ font-family: monospace;}
.ectt-1000{ font-family: monospace;}
.ectt-1000{ font-family: monospace;}
.ectt-1000{ font-family: monospace;}
.ectt-1000{ font-family: monospace;}
.ecti-1000{ font-style: italic;}
.ecti-1000{ font-style: italic;}
.ecti-1000{ font-style: italic;}
.ecti-1000{ font-style: italic;}
.ecti-1000{ font-style: italic;}
.ecti-0700{font-size:70%; font-style: italic;}
.ecti-0700{ font-style: italic;}
.ecti-0700{ font-style: italic;}
.ecti-0700{ font-style: italic;}
.ecti-0700{ font-style: italic;}
.ecrm-0700{font-size:70%;}
p.noindent { text-indent: 0em }
td p.noindent { text-indent: 0em; margin-top:0em; }
p.nopar { text-indent: 0em; }
p.indent{ text-indent: 1.5em }
@media print {div.crosslinks {visibility:hidden;}}
a img { border-top: 0; border-left: 0; border-right: 0; }
center { margin-top:1em; margin-bottom:1em; }
td center { margin-top:0em; margin-bottom:0em; }
.Canvas { position:relative; }
img.math{vertical-align:middle;}
li p.indent { text-indent: 0em }
.enumerate1 {list-style-type:decimal;}
.enumerate2 {list-style-type:lower-alpha;}
.enumerate3 {list-style-type:lower-roman;}
.enumerate4 {list-style-type:upper-alpha;}
div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
.obeylines-h,.obeylines-v {white-space: nowrap; }
div.obeylines-v p { margin-top:0; margin-bottom:0; }
.overline{ text-decoration:overline; }
.overline img{ border-top: 1px solid black; }
td.displaylines {text-align:center; white-space:nowrap;}
.centerline {text-align:center;}
.rightline {text-align:right;}
div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; }
.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
div.fbox {display:table}
div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
table.minipage{width:100%;}
div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
div.center div {text-align: left;}
div.flushright, div.flushright div.flushright {text-align: right;}
div.flushright div {text-align: left;}
div.flushleft {text-align: left;}
.underline{ text-decoration:underline; }
.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }
.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
.framebox-c {text-align:center;}
.framebox-l {text-align:left;}
.framebox-r {text-align:right;}
span.thank-mark{ vertical-align: super }
span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
table.tabular td p{margin-top:0em;}
table.tabular {margin-left: auto; margin-right: auto;}
div.td00{ margin-left:0pt; margin-right:0pt; }
div.td01{ margin-left:0pt; margin-right:5pt; }
div.td10{ margin-left:5pt; margin-right:0pt; }
div.td11{ margin-left:5pt; margin-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
td.td00{ padding-left:0pt; padding-right:0pt; }
td.td01{ padding-left:0pt; padding-right:5pt; }
td.td10{ padding-left:5pt; padding-right:0pt; }
td.td11{ padding-left:5pt; padding-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
.hline hr, .cline hr{ height : 1px; margin:0px; }
.tabbing-right {text-align:right;}
span.TEX {letter-spacing: -0.125em; }
span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
a span.TEX span.E {text-decoration: none; }
span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
span.LATEX span.TEX{ position:relative; left: -0.4em; }
div.float img, div.float .caption {text-align:center;}
div.figure img, div.figure .caption {text-align:center;}
.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
.marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
table.equation {width:100%;}
.equation td{text-align:center; }
td.equation { margin-top:1em; margin-bottom:1em; }
td.equation-label { width:5%; text-align:center; }
td.eqnarray4 { width:5%; white-space: normal; }
td.eqnarray2 { width:5%; }
table.eqnarray-star, table.eqnarray {width:100%;}
div.eqnarray{text-align:center;}
div.array {text-align:center;}
div.pmatrix {text-align:center;}
table.pmatrix {width:100%;}
span.pmatrix img{vertical-align:middle;}
div.pmatrix {text-align:center;}
table.pmatrix {width:100%;}
img.cdots{vertical-align:middle;}
.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
.index-item, .index-subitem, .index-subsubitem {display:block}
.caption td.id{font-weight: bold; white-space: nowrap; }
table.caption {text-align:center;}
h1.partHead{text-align: center}
p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
.subparagraphHead, .likesubparagraphHead { font-weight: bold;}
.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;}
.verse{white-space:nowrap; margin-left:2em}
div.maketitle {text-align:center;}
h2.titleHead{text-align:center;}
div.maketitle{ margin-bottom: 2em; }
div.author, div.date {text-align:center;}
div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
div.author{white-space: nowrap;}
.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }
.abstract p {margin-left:5%; margin-right:5%;}
table.abstract {width:100%;}
.lstlisting .label{margin-right:0.5em; }
div.lstlisting{font-family: monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; }
div.lstinputlisting{ font-family: monospace; white-space: nowrap; }
.lstinputlisting .label{margin-right:0.5em;}
.figure img.graphics {margin-left:10%;}
/* end css.sty */

View File

@ -1,902 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html >
<head><title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
<meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
<!-- html -->
<meta name="src" content="tutorial.tex">
<meta name="date" content="2009-10-07 00:28:00">
<link rel="stylesheet" type="text/css" href="tutorial.css">
</head><body
>
<h3 class="sectionHead"><span class="titlemark">1 </span> <a
id="x1-10001"></a>Introduction to 3D Math</h3>
<!--l. 27--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">1.1 </span> <a
id="x1-20001.1"></a>Introduction</h4>
<!--l. 29--><p class="noindent" >There are many approaches to understanding the type of 3D math used in video
games, modelling, ray-tracing, etc. The usual is through vector algebra, matrices, and
linear transformations and, while they are not completely necesary to understand
most of the aspects of 3D game programming (from the theorical point of view), they
provide a common language to communicate with other programmers or
engineers.
<!--l. 36--><p class="indent" > This tutorial will focus on explaining all the basic concepts needed for a
programmer to understand how to develop 3D games without getting too deep into
algebra. Instead of a math-oriented language, code examples will be given instead
when possible. The reason for this is that. while programmers may have
different backgrounds or experience (be it scientific, engineering or self taught),
code is the most familiar language and the lowest common denominator for
understanding.
<!--l. 45--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">1.2 </span> <a
id="x1-30001.2"></a>Vectors</h4>
<!--l. 48--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.2.1 </span> <a
id="x1-40001.2.1"></a>Brief Introduction</h5>
<!--l. 50--><p class="noindent" >When writing 2D games, interfaces and other applications, the typical convention is
to define coordinates as an <span
class="ecti-1000">x,y </span>pair, <span
class="ecti-1000">x </span>representing the horizontal offset and <span
class="ecti-1000">y </span>the
vertical one. In most cases, the unit for both is <span
class="ecti-1000">pixels</span>. This makes sense given the
screen is just a rectangle in two dimensions.
<!--l. 56--><p class="indent" > An <span
class="ecti-1000">x,y </span>pair can be used for two purposes. It can be an absolute position (screen
cordinate in the previous case), or a relative direction, if we trace an arrow from the
origin (0,0 coordinates) to it&#8217;s position.
<div class="center"
>
<!--l. 60--><p class="noindent" >
<div class="tabular">
<table id="TBL-1" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-1-1g"><col
id="TBL-1-1"><col
id="TBL-1-2"><col
id="TBL-1-3"></colgroup><tr
style="vertical-align:baseline;" id="TBL-1-1-"><td style="white-space:nowrap; text-align:center;" id="TBL-1-1-1"
class="td11"><img
src="tutorial0x.png" alt="PIC" class="graphics" width="100.375pt" height="100.375pt" ><!--tex4ht:graphics
name="tutorial0x.png" src="0_home_red_coding_godot_doc_math_position.eps"
--></td><td style="white-space:nowrap; text-align:center;" id="TBL-1-1-2"
class="td11"></td><td style="white-space:nowrap; text-align:center;" id="TBL-1-1-3"
class="td11"><img
src="tutorial1x.png" alt="PIC" class="graphics" width="100.375pt" height="100.375pt" ><!--tex4ht:graphics
name="tutorial1x.png" src="1_home_red_coding_godot_doc_math_direction.eps"
--></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-1-2-"><td style="white-space:nowrap; text-align:center;" id="TBL-1-2-1"
class="td11"> <span
class="ecti-0700">Position </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-1-2-2"
class="td11"></td><td style="white-space:nowrap; text-align:center;" id="TBL-1-2-3"
class="td11"> <span
class="ecti-0700">Direction </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-1-3-"><td style="white-space:nowrap; text-align:center;" id="TBL-1-3-1"
class="td11"> </td>
</tr></table></div>
</div>
<!--l. 67--><p class="indent" > When used as a direction, this pair is called a <span
class="ecti-1000">vector</span>, and two properties can be
observed: The first is the <span
class="ecti-1000">magnitude </span>or <span
class="ecti-1000">length </span>, and the second is the direction. In
two dimensions, direction can be an angle. The <span
class="ecti-1000">magnitude </span>or <span
class="ecti-1000">length </span>can be computed
by simply using Pithagoras theorem:
<div class="center"
>
<!--l. 73--><p class="noindent" >
<div class="tabular"> <table id="TBL-2" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-2-1g"><col
id="TBL-2-1"><col
id="TBL-2-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:nowrap; text-align:center;" id="TBL-2-1-1"
class="td11"><img
src="tutorial2x.png" alt="&#x2218;x2-+-y2-" class="sqrt" ></td><td style="white-space:nowrap; text-align:center;" id="TBL-2-1-2"
class="td11"><img
src="tutorial3x.png" alt="&#x2218;x2-+-y2 +-z2" class="sqrt" ></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:nowrap; text-align:center;" id="TBL-2-2-1"
class="td11"> <span
class="ecti-0700">2D </span></td><td style="white-space:nowrap; text-align:center;" id="TBL-2-2-2"
class="td11"> <span
class="ecti-0700">3D </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-3-"><td style="white-space:nowrap; text-align:center;" id="TBL-2-3-1"
class="td11"> </td>
</tr></table></div>
</div>
<!--l. 80--><p class="indent" > The direction can be an arbitrary angle from either the <span
class="ecti-1000">x </span>or <span
class="ecti-1000">y </span>axis, and could be
computed by using trigonometry, or just using the usual <span
class="ecti-1000">atan2 </span>function present in
most math libraries. However, when dealing with 3D, the direction can&#8217;t be described
as an angle. To separate magnitude and direction, 3D uses the concept of <span
class="ecti-1000">normal</span>
<span
class="ecti-1000">vectors.</span>
<!--l. 88--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.2.2 </span> <a
id="x1-50001.2.2"></a>Implementation</h5>
<!--l. 90--><p class="noindent" >Vectors are implemented in Godot Engine as a class named <span
class="ecti-1000">Vector3 </span>for 3D, and as
both <span
class="ecti-1000">Vector2</span>, <span
class="ecti-1000">Point2 </span>or <span
class="ecti-1000">Size2 </span>in 2D (they are all aliases). They are used for any
purpose where a pair of 2D or 3D values (described as <span
class="ecti-1000">x,y </span>or <span
class="ecti-1000">x,y,z) </span>is needed. This is
somewhat a standard in most libraries or engines. In the script API, they can be
instanced like this:
<!--l. 98-->
<div class="lstlisting"><span class="label"><a
id="x1-5001r1"></a></span>a&#x00A0;=&#x00A0;Vector3()&#x00A0;<br /><span class="label"><a
id="x1-5002r2"></a></span>a&#x00A0;=&#x00A0;Vector2(&#x00A0;2.0,&#x00A0;3.4&#x00A0;)
</div>
<!--l. 104--><p class="indent" > Vectors also support the common operators <span
class="ecti-1000">+, -, / and * </span>for addition,
substraction, multiplication and division.
<!--l. 108-->
<div class="lstlisting"><span class="label"><a
id="x1-5003r1"></a></span>a&#x00A0;=&#x00A0;Vector3(1,2,3)&#x00A0;<br /><span class="label"><a
id="x1-5004r2"></a></span>b&#x00A0;=&#x00A0;Vector3(4,5,6)&#x00A0;<br /><span class="label"><a
id="x1-5005r3"></a></span>c&#x00A0;=&#x00A0;Vector3()&#x00A0;<br /><span class="label"><a
id="x1-5006r4"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-5007r5"></a></span>//&#x00A0;writing&#x00A0;<br /><span class="label"><a
id="x1-5008r6"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-5009r7"></a></span>c&#x00A0;=&#x00A0;a&#x00A0;+&#x00A0;b&#x00A0;<br /><span class="label"><a
id="x1-5010r8"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-5011r9"></a></span>//&#x00A0;is&#x00A0;the&#x00A0;same&#x00A0;as&#x00A0;writing&#x00A0;<br /><span class="label"><a
id="x1-5012r10"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-5013r11"></a></span>c.x&#x00A0;=&#x00A0;a.x&#x00A0;+&#x00A0;b.x&#x00A0;<br /><span class="label"><a
id="x1-5014r12"></a></span>c.y&#x00A0;=&#x00A0;a.y&#x00A0;+&#x00A0;b.y&#x00A0;<br /><span class="label"><a
id="x1-5015r13"></a></span>c.z&#x00A0;=&#x00A0;a.z&#x00A0;+&#x00A0;b.z&#x00A0;<br /><span class="label"><a
id="x1-5016r14"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-5017r15"></a></span>//&#x00A0;both&#x00A0;will&#x00A0;result&#x00A0;in&#x00A0;a&#x00A0;vector&#x00A0;containing&#x00A0;(5,7,9).&#x00A0;<br /><span class="label"><a
id="x1-5018r16"></a></span>//&#x00A0;the&#x00A0;same&#x00A0;happens&#x00A0;for&#x00A0;the&#x00A0;rest&#x00A0;of&#x00A0;the&#x00A0;operators.
</div>
<!--l. 128--><p class="indent" > Vectors also can perform a wide variety of built-in functions, their most common
usages will be explored next.
<!--l. 132--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.2.3 </span> <a
id="x1-60001.2.3"></a>Normal Vectors</h5>
<!--l. 134--><p class="noindent" >Two points ago, it was mentioned that 3D vectors can&#8217;t describe their direction as an
agle (as 2D vectors can). Because of this, <span
class="ecti-1000">normal vectors </span>become important for
separating a vector between <span
class="ecti-1000">direction </span>and <span
class="ecti-1000">magnitude.</span>
<!--l. 139--><p class="indent" > A <span
class="ecti-1000">normal vector </span>is a vector with a <span
class="ecti-1000">magnitude </span>of <span
class="ecti-1000">1. </span>This means, no matter where
the vector is pointing to, it&#8217;s length is always <span
class="ecti-1000">1</span>.
<div class="tabular">
<table id="TBL-3" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-3-1g"><col
id="TBL-3-1"></colgroup><tr
style="vertical-align:baseline;" id="TBL-3-1-"><td style="white-space:nowrap; text-align:center;" id="TBL-3-1-1"
class="td11"><img
src="tutorial4x.png" alt="PIC" class="graphics" width="100.375pt" height="100.375pt" ><!--tex4ht:graphics
name="tutorial4x.png" src="2_home_red_coding_godot_doc_math_normals.eps"
--></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-2-"><td style="white-space:nowrap; text-align:center;" id="TBL-3-2-1"
class="td11"> <span
class="ecrm-0700">Normal vectors aroud the origin. </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-3-"><td style="white-space:nowrap; text-align:center;" id="TBL-3-3-1"
class="td11"> </td> </tr></table>
</div>
<!--l. 148--><p class="indent" > Normal vectors have endless uses in 3D graphics programming, so it&#8217;s
recommended to get familiar with them as much as possible.
<!--l. 152--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.2.4 </span> <a
id="x1-70001.2.4"></a>Normalization</h5>
<!--l. 154--><p class="noindent" >Normalization is the process through which normal vectors are obtained
from regular vectors. In other words, normalization is used to reduce the
<span
class="ecti-1000">magnitude </span>of any vector to <span
class="ecti-1000">1</span>. (except of course, unless the vector is (0,0,0)
).
<!--l. 159--><p class="indent" > To normalize a vector, it must be divided by its magnitude (which should be
greater than zero):
<!--l. 163-->
<div class="lstlisting"><span class="label"><a
id="x1-7001r1"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">a</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">custom</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">vector</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">is</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">created</span>&#x00A0;<br /><span class="label"><a
id="x1-7002r2"></a></span>a&#x00A0;=&#x00A0;Vector3(4,5,6)&#x00A0;<br /><span class="label"><a
id="x1-7003r3"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">&#8217;</span><span
class="ecti-1000">l</span><span
class="ecti-1000">&#8217;</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">is</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">a</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">single</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">real</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">number</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">(</span><span
class="ecti-1000">or</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">scalar</span><span
class="ecti-1000">)</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">containight</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">the</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">length</span>&#x00A0;<br /><span class="label"><a
id="x1-7004r4"></a></span>l&#x00A0;=&#x00A0;Math.sqrt(&#x00A0;a.x<span
class="cmsy-10">*</span>a.x&#x00A0;+&#x00A0;a.y<span
class="cmsy-10">*</span>a.y&#x00A0;+&#x00A0;a.z<span
class="cmsy-10">*</span>a.z&#x00A0;)&#x00A0;<br /><span class="label"><a
id="x1-7005r5"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">the</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">vector</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">&#8217;</span><span
class="ecti-1000">a</span><span
class="ecti-1000">&#8217;</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">is</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">divided</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">by</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">its</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">length</span><span
class="ecti-1000">,</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">by</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">performing</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">scalar</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">divide</span>&#x00A0;<br /><span class="label"><a
id="x1-7006r6"></a></span>a&#x00A0;=&#x00A0;a&#x00A0;/&#x00A0;l&#x00A0;<br /><span class="label"><a
id="x1-7007r7"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">which</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">is</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">the</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">same</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">as</span>&#x00A0;<br /><span class="label"><a
id="x1-7008r8"></a></span>a.x&#x00A0;=&#x00A0;a.x&#x00A0;/&#x00A0;l&#x00A0;<br /><span class="label"><a
id="x1-7009r9"></a></span>a.y&#x00A0;=&#x00A0;a.y&#x00A0;/&#x00A0;l&#x00A0;<br /><span class="label"><a
id="x1-7010r10"></a></span>a.z&#x00A0;=&#x00A0;a.z&#x00A0;/&#x00A0;l
</div>
<!--l. 177--><p class="indent" > Vector3 contains two built in functions for normalization:
<!--l. 180-->
<div class="lstlisting"><span class="label"><a
id="x1-7011r1"></a></span>a&#x00A0;=&#x00A0;Vector3(4,5,6)&#x00A0;<br /><span class="label"><a
id="x1-7012r2"></a></span>a.normalize()&#x00A0;<span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">in</span><span
class="cmsy-10">-</span><span
class="ecti-1000">place</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">normalization</span>&#x00A0;<br /><span class="label"><a
id="x1-7013r3"></a></span>b&#x00A0;=&#x00A0;a.normalized()&#x00A0;<span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">returns</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">a</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">copy</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">of</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">a</span><span
class="ecti-1000">,</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">normalized</span>
</div>
<!--l. 188--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.2.5 </span> <a
id="x1-80001.2.5"></a>Dot Product</h5>
<!--l. 190--><p class="noindent" >The dot product is, pheraps, the most useful operation that can be applied to 3D
vectors. In the surface, it&#8217;s multiple usages are not very obvious, but in depth it can
provide very useful information between two vectors (be it direction or just points in
space).
<!--l. 195--><p class="indent" > The dot product takes two vectors (<span
class="ecti-1000">a </span>and <span
class="ecti-1000">b </span>in the example) and returns a scalar
(single real number):
<div class="center"
>
<!--l. 198--><p class="noindent" >
<!--l. 199--><p class="noindent" ><span
class="cmmi-10">a</span><sub><span
class="cmmi-7">x</span></sub><span
class="cmmi-10">b</span><sub><span
class="cmmi-7">x</span></sub> <span
class="cmr-10">+ </span><span
class="cmmi-10">a</span><sub><span
class="cmmi-7">y</span></sub><span
class="cmmi-10">b</span><sub><span
class="cmmi-7">y</span></sub> <span
class="cmr-10">+ </span><span
class="cmmi-10">a</span><sub><span
class="cmmi-7">z</span></sub><span
class="cmmi-10">b</span><sub><span
class="cmmi-7">z</span></sub>
</div>
<!--l. 202--><p class="indent" > The same expressed in code:
<!--l. 205-->
<div class="lstlisting"><span class="label"><a
id="x1-8001r1"></a></span>a&#x00A0;=&#x00A0;Vector3(...)&#x00A0;<br /><span class="label"><a
id="x1-8002r2"></a></span>b&#x00A0;=&#x00A0;Vector3(...)&#x00A0;<br /><span class="label"><a
id="x1-8003r3"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-8004r4"></a></span>c&#x00A0;=&#x00A0;a.x<span
class="cmsy-10">*</span>b.x&#x00A0;+&#x00A0;a.y<span
class="cmsy-10">*</span>b.y&#x00A0;+&#x00A0;a.z<span
class="cmsy-10">*</span>b.z&#x00A0;<br /><span class="label"><a
id="x1-8005r5"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-8006r6"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">using</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">built</span><span
class="cmsy-10">-</span><span
class="ecti-1000">in</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">dot</span><span
class="ecti-1000">()</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">function</span>&#x00A0;<br /><span class="label"><a
id="x1-8007r7"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-8008r8"></a></span>c&#x00A0;=&#x00A0;a.dot(b)
</div>
<!--l. 218--><p class="indent" > The dot product presents several useful properties:
<ul class="itemize1">
<li class="itemize">If both <span
class="ecti-1000">a </span>and <span
class="ecti-1000">b </span>parameters to a <span
class="ecti-1000">dot product </span>are direction vectors, dot
product will return positive if both point towards the same direction,
negative if both point towards opposite directions, and zero if they are
orthogonal (one is perpendicular to the other).
</li>
<li class="itemize">If both <span
class="ecti-1000">a </span>and <span
class="ecti-1000">b </span>parameters to a <span
class="ecti-1000">dot product </span>are <span
class="ecti-1000">normalized </span>direction
vectors, then the dot product will return the cosine of the angle between
them (ranging from 1 if they are equal, 0 if they are orthogonal, and -1 if
they are opposed (a == -b)).
</li>
<li class="itemize">If <span
class="ecti-1000">a </span>is a <span
class="ecti-1000">normalized </span>direction vector and <span
class="ecti-1000">b </span>is a point, the dot product will
return the distance from <span
class="ecti-1000">b </span>to the plane passing through the origin, with
normal <span
class="ecti-1000">a (see item about planes)</span>
</li>
<li class="itemize">More uses will be presented later in this tutorial.</li></ul>
<!--l. 236--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.2.6 </span> <a
id="x1-90001.2.6"></a>Cross Product</h5>
<!--l. 238--><p class="noindent" >The <span
class="ecti-1000">cross product </span>also takes two vectors <span
class="ecti-1000">a </span>and <span
class="ecti-1000">b</span>, but returns another vector <span
class="ecti-1000">c </span>that is
orthogonal to the two previous ones.
<div class="center"
>
<!--l. 242--><p class="noindent" >
<!--l. 243--><p class="noindent" ><span
class="cmmi-10">c</span><sub><span
class="cmmi-7">x</span></sub> <span
class="cmr-10">= </span><span
class="cmmi-10">a</span><sub><span
class="cmmi-7">x</span></sub><span
class="cmmi-10">b</span><sub><span
class="cmmi-7">z</span></sub> <span
class="cmsy-10">- </span><span
class="cmmi-10">a</span><sub><span
class="cmmi-7">z</span></sub><span
class="cmmi-10">b</span><sub><span
class="cmmi-7">y</span></sub>
</div>
<div class="center"
>
<!--l. 246--><p class="noindent" >
<!--l. 247--><p class="noindent" ><span
class="cmmi-10">c</span><sub><span
class="cmmi-7">y</span></sub> <span
class="cmr-10">= </span><span
class="cmmi-10">a</span><sub><span
class="cmmi-7">z</span></sub><span
class="cmmi-10">b</span><sub><span
class="cmmi-7">x</span></sub> <span
class="cmsy-10">- </span><span
class="cmmi-10">a</span><sub><span
class="cmmi-7">x</span></sub><span
class="cmmi-10">b</span><sub><span
class="cmmi-7">z</span></sub>
</div>
<div class="center"
>
<!--l. 250--><p class="noindent" >
<!--l. 251--><p class="noindent" ><span
class="cmmi-10">c</span><sub><span
class="cmmi-7">z</span></sub> <span
class="cmr-10">= </span><span
class="cmmi-10">a</span><sub><span
class="cmmi-7">x</span></sub><span
class="cmmi-10">b</span><sub><span
class="cmmi-7">y</span></sub> <span
class="cmsy-10">- </span><span
class="cmmi-10">a</span><sub><span
class="cmmi-7">y</span></sub><span
class="cmmi-10">b</span><sub><span
class="cmmi-7">x</span></sub>
</div>
<!--l. 254--><p class="indent" > The same in code:
<!--l. 257-->
<div class="lstlisting"><span class="label"><a
id="x1-9001r1"></a></span>a&#x00A0;=&#x00A0;Vector3(...)&#x00A0;<br /><span class="label"><a
id="x1-9002r2"></a></span>b&#x00A0;=&#x00A0;Vector3(...)&#x00A0;<br /><span class="label"><a
id="x1-9003r3"></a></span>c&#x00A0;=&#x00A0;Vector3(...)&#x00A0;<br /><span class="label"><a
id="x1-9004r4"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-9005r5"></a></span>c.x&#x00A0;=&#x00A0;a.x<span
class="cmsy-10">*</span>b.z&#x00A0;<span
class="cmsy-10">-</span>&#x00A0;a.z<span
class="cmsy-10">*</span>b.y&#x00A0;<br /><span class="label"><a
id="x1-9006r6"></a></span>c.y&#x00A0;=&#x00A0;a.z<span
class="cmsy-10">*</span>b.x&#x00A0;<span
class="cmsy-10">-</span>&#x00A0;a.x<span
class="cmsy-10">*</span>b.z&#x00A0;<br /><span class="label"><a
id="x1-9007r7"></a></span>c.z&#x00A0;=&#x00A0;a.x<span
class="cmsy-10">*</span>b.y&#x00A0;<span
class="cmsy-10">-</span>&#x00A0;a.y<span
class="cmsy-10">*</span>b.x&#x00A0;<br /><span class="label"><a
id="x1-9008r8"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-9009r9"></a></span>//&#x00A0;or&#x00A0;using&#x00A0;the&#x00A0;built<span
class="cmsy-10">-</span>in&#x00A0;function&#x00A0;<br /><span class="label"><a
id="x1-9010r10"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-9011r11"></a></span>c&#x00A0;=&#x00A0;a.cross(b)
</div>
<!--l. 273--><p class="indent" > The <span
class="ecti-1000">cross product </span>also presents several useful properties:
<ul class="itemize1">
<li class="itemize">As mentioned, the resulting vector <span
class="ecti-1000">c </span>is orthogonal to the input vectors <span
class="ecti-1000">a</span>
and <span
class="ecti-1000">b.</span>
</li>
<li class="itemize">Since the <span
class="ecti-1000">cross product </span>is anticommutative, swapping <span
class="ecti-1000">a </span>and <span
class="ecti-1000">b </span>will result
in a negated vector <span
class="ecti-1000">c.</span>
</li>
<li class="itemize">if <span
class="ecti-1000">a </span>and <span
class="ecti-1000">b </span>are taken from two of the segmets <span
class="ecti-1000">AB</span>, <span
class="ecti-1000">BC </span>or <span
class="ecti-1000">CA </span>that form a
3D triangle, the magnitude of the resulting vector divided by 2 is the area
of that triangle.
</li>
<li class="itemize">The direction of the resulting vector <span
class="ecti-1000">c </span>in the previous triangle example
determines wether the points A,B and C are arranged in clocwise or
counter-clockwise order.</li></ul>
<!--l. 287--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">1.3 </span> <a
id="x1-100001.3"></a>Plane</h4>
<!--l. 290--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.3.1 </span> <a
id="x1-110001.3.1"></a>Theory</h5>
<!--l. 292--><p class="noindent" >A plane can be considered as an infinite, flat surface that splits space in two halves,
usually one named positive and one named negative. In regular mathematics, a plane
formula is described as:
<div class="center"
>
<!--l. 296--><p class="noindent" >
<!--l. 297--><p class="noindent" ><span
class="cmmi-10">ax </span><span
class="cmr-10">+ </span><span
class="cmmi-10">by </span><span
class="cmr-10">+ </span><span
class="cmmi-10">cz </span><span
class="cmr-10">+ </span><span
class="cmmi-10">d</span>
</div>
<!--l. 300--><p class="indent" > However, in 3D programming, this form alone is often of little use. For planes to
become useful, they must be in normalized form.
<!--l. 303--><p class="indent" > A normalized plane consists of a <span
class="ecti-1000">normal vector n </span>and a <span
class="ecti-1000">distance d. </span>To normalize
a plane, a vector <span
class="ecti-1000">n </span>and distance <span
class="ecti-1000">d&#8217; </span>are created this way:
<!--l. 307--><p class="indent" > <span
class="cmmi-10">n</span><sub><span
class="cmmi-7">x</span></sub> <span
class="cmr-10">= </span><span
class="cmmi-10">a</span>
<!--l. 309--><p class="indent" > <span
class="cmmi-10">n</span><sub><span
class="cmmi-7">y</span></sub> <span
class="cmr-10">= </span><span
class="cmmi-10">b</span>
<!--l. 311--><p class="indent" > <span
class="cmmi-10">n</span><sub><span
class="cmmi-7">z</span></sub> <span
class="cmr-10">= </span><span
class="cmmi-10">c</span>
<!--l. 313--><p class="indent" > <span
class="cmmi-10">d</span><span
class="cmsy-10">&#x2032; </span><span
class="cmr-10">= </span><span
class="cmmi-10">d</span>
<!--l. 315--><p class="indent" > Finally, both <span
class="ecti-1000">n </span>and <span
class="ecti-1000">d&#8217; </span>are both divided by the magnitude of n.
<!--l. 318--><p class="indent" > In any case, normalizing planes is not often needed (this was mostly for
explanation purposes), and normalized planes are useful because they can be created
and used easily.
<!--l. 322--><p class="indent" > A normalized plane could be visualized as a plane pointing towards normal <span
class="ecti-1000">n,</span>
offseted by <span
class="ecti-1000">d </span>in the direction of <span
class="ecti-1000">n</span>.
<!--l. 325--><p class="indent" > In other words, take <span
class="ecti-1000">n</span>, multiply it by scalar <span
class="ecti-1000">d </span>and the resulting point will be part
of the plane. This may need some thinking, so an example with a 2D normal vector
(z is 0, so plane is orthogonal to it) is provided:
<!--l. 330--><p class="indent" > Some operations can be done with normalized planes:
<ul class="itemize1">
<li class="itemize">Given any point <span
class="ecti-1000">p</span>, the distance from it to a plane can be computed by
doing: n.dot(p) - d
</li>
<li class="itemize">If the resulting distance in the previous point is negative, the point is
below the plane.
</li>
<li class="itemize">Convex polygonal shapes can be defined by enclosing them in planes (the
physics engine uses this property)</li></ul>
<!--l. 340--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.3.2 </span> <a
id="x1-120001.3.2"></a>Implementation</h5>
<!--l. 342--><p class="noindent" >Godot Engine implements normalized planes by using the <span
class="ecti-1000">Plane </span>class.
<!--l. 346-->
<div class="lstlisting"><span class="label"><a
id="x1-12001r1"></a></span>//creates&#x00A0;a&#x00A0;plane&#x00A0;with&#x00A0;normal&#x00A0;(0,1,0)&#x00A0;and&#x00A0;distance&#x00A0;5&#x00A0;<br /><span class="label"><a
id="x1-12002r2"></a></span>p&#x00A0;=&#x00A0;Plane(&#x00A0;Vector3(0,1,0),&#x00A0;5&#x00A0;)&#x00A0;<br /><span class="label"><a
id="x1-12003r3"></a></span>//&#x00A0;get&#x00A0;the&#x00A0;distance&#x00A0;to&#x00A0;a&#x00A0;point&#x00A0;<br /><span class="label"><a
id="x1-12004r4"></a></span>d&#x00A0;=&#x00A0;p.distance(&#x00A0;Vector3(4,5,6)&#x00A0;)
</div>
<!--l. 355--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">1.4 </span> <a
id="x1-130001.4"></a>Matrices, Quaternions and Coordinate Systems</h4>
<!--l. 357--><p class="noindent" >It is very often needed to store the location/rotation of something. In 2D, it is often
enough to store an <span
class="ecti-1000">x,y </span>location and maybe an angle as the rotation, as that should
be enough to represent any posible position.
<!--l. 362--><p class="indent" > In 3D this becomes a little more difficult, as there is nothing as simple as an angle
to store a 3-axis rotation.
<!--l. 365--><p class="indent" > The first think that may come to mind is to use 3 angles, one for x, one for y and
one for z. However this suffers from the problem that it becomes very cumbersome to
use, as the individual rotations in each axis need to be performed one after another
(they can&#8217;t be performed at the same time), leading to a problem called &#8220;gimbal
lock&#8221;. Also, it becomes impossible to accumulate rotations (add a rotation to an
existing one).
<!--l. 373--><p class="indent" > To solve this, there are two known diferent approaches that aid in solving
rotation, <span
class="ecti-1000">Quaternions </span>and <span
class="ecti-1000">Oriented Coordinate Systems.</span>
<!--l. 378--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.4.1 </span> <a
id="x1-140001.4.1"></a>Oriented Coordinate Systems</h5>
<!--l. 380--><p class="noindent" ><span
class="ecti-1000">Oriented Coordinate Systems </span>(<span
class="ecti-1000">OCS</span>) are a way of representing a coordinate system
inside the cartesian coordinate system. They are mainly composed of 3 Vectors, one
for each axis. The first vector is the <span
class="ecti-1000">x </span>axis, the second the <span
class="ecti-1000">y </span>axis, and the third is the
<span
class="ecti-1000">z </span>axis. The OCS vectors can be rotated around freely as long as they are kept the
same length (as changing the length of an axis changes its cale), and as long as they
remain orthogonal to eachother (as in, the same as the default cartesian system,
with <span
class="ecti-1000">y </span>pointing up, <span
class="ecti-1000">x </span>pointing left and <span
class="ecti-1000">z </span>pointing front, but all rotated
together).
<!--l. 391--><p class="indent" > <span
class="ecti-1000">Oriented Coordinate Systems </span>are represented in 3D programming as a 3x3 matrix,
where each row (or column, depending on the implementation) contains one of the
axis vectors. Transforming a Vector by a rotated OCS Matrix results in the rotation
being applied to the resulting vector. OCS Matrices can also be multiplied to
accumulate their transformations.
<!--l. 397--><p class="indent" > Godot Engine implements OCS Matrices in the <span
class="ecti-1000">Matrix3 </span>class:
<!--l. 400-->
<div class="lstlisting"><span class="label"><a
id="x1-14001r1"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">create</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">a</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">3</span><span
class="ecti-1000">x3</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">matrix</span>&#x00A0;<br /><span class="label"><a
id="x1-14002r2"></a></span>m&#x00A0;=&#x00A0;Matrix3()&#x00A0;<br /><span class="label"><a
id="x1-14003r3"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">rotate</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">the</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">matrix</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">in</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">the</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">y</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">axis</span><span
class="ecti-1000">,</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">by</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">45</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">degrees</span>&#x00A0;<br /><span class="label"><a
id="x1-14004r4"></a></span>m.rotate(&#x00A0;Vector3(0,1,0),&#x00A0;Math.deg2rad(45)&#x00A0;)&#x00A0;<br /><span class="label"><a
id="x1-14005r5"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">transform</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">a</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">vector</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">v</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">(</span><span
class="ecti-1000">xform</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">method</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">is</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">used</span><span
class="ecti-1000">)</span>&#x00A0;<br /><span class="label"><a
id="x1-14006r6"></a></span>v&#x00A0;=&#x00A0;Vector3(...)&#x00A0;<br /><span class="label"><a
id="x1-14007r7"></a></span>result&#x00A0;=&#x00A0;m.xform(&#x00A0;v&#x00A0;)
</div>
<!--l. 412--><p class="indent" > However, in most usage cases, one wants to store a translation together with the
rotation. For this, an <span
class="ecti-1000">origin </span>vector must be added to the OCS, thus transforming it
into a 3x4 (or 4x3, depending on preference) matrix. Godot engine implements this
functionality in the <span
class="ecti-1000">Transform </span>class:
<!--l. 419-->
<div class="lstlisting"><span class="label"><a
id="x1-14010r1"></a></span>t&#x00A0;=&#x00A0;Transform()&#x00A0;<br /><span class="label"><a
id="x1-14011r2"></a></span>//rotate&#x00A0;the&#x00A0;transform&#x00A0;in&#x00A0;the&#x00A0;y&#x00A0;axis,&#x00A0;by&#x00A0;45&#x00A0;degrees&#x00A0;<br /><span class="label"><a
id="x1-14012r3"></a></span>t.rotate(&#x00A0;Vector3(0,1,0),&#x00A0;Math.deg2rad(45)&#x00A0;)&#x00A0;<br /><span class="label"><a
id="x1-14013r4"></a></span>//translate&#x00A0;the&#x00A0;transform&#x00A0;by&#x00A0;5&#x00A0;in&#x00A0;the&#x00A0;z&#x00A0;axis&#x00A0;<br /><span class="label"><a
id="x1-14014r5"></a></span>t.translate(&#x00A0;Vector3(&#x00A0;0,0,5&#x00A0;)&#x00A0;)&#x00A0;<br /><span class="label"><a
id="x1-14015r6"></a></span>//transform&#x00A0;a&#x00A0;vector&#x00A0;v&#x00A0;(xform&#x00A0;method&#x00A0;is&#x00A0;used)&#x00A0;<br /><span class="label"><a
id="x1-14016r7"></a></span>v&#x00A0;=&#x00A0;Vector3(...)&#x00A0;<br /><span class="label"><a
id="x1-14017r8"></a></span>result&#x00A0;=&#x00A0;t.xform(&#x00A0;v&#x00A0;)
</div>
<!--l. 431--><p class="indent" > Transform contains internally a Matrix3 &#8220;basis&#8221; and a Vector3 &#8220;origin&#8221; (which can
be modified individually).
<!--l. 435--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.4.2 </span> <a
id="x1-150001.4.2"></a>Transform Internals</h5>
<!--l. 437--><p class="noindent" >Internally, the xform() process is quite simple, to apply a 3x3 transform to a vector,
the transposed axis vectors are used (as using the regular axis vectors will result on
an inverse of the desired transform):
<!--l. 442-->
<div class="lstlisting"><span class="label"><a
id="x1-15001r1"></a></span>m&#x00A0;=&#x00A0;Matrix3(...)&#x00A0;<br /><span class="label"><a
id="x1-15002r2"></a></span>v&#x00A0;=&#x00A0;Vector3(..)&#x00A0;<br /><span class="label"><a
id="x1-15003r3"></a></span>result&#x00A0;=&#x00A0;Vector3(...)&#x00A0;<br /><span class="label"><a
id="x1-15004r4"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-15005r5"></a></span>x_axis&#x00A0;=&#x00A0;m.get_axis(0)&#x00A0;<br /><span class="label"><a
id="x1-15006r6"></a></span>y_axis&#x00A0;=&#x00A0;m.get_axis(1)&#x00A0;<br /><span class="label"><a
id="x1-15007r7"></a></span>z_axis&#x00A0;=&#x00A0;m.get_axis(2)&#x00A0;<br /><span class="label"><a
id="x1-15008r8"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-15009r9"></a></span>result.x&#x00A0;=&#x00A0;Vector3(x_axis.x,&#x00A0;y_axis.x,&#x00A0;z_axis.x).dot(v)&#x00A0;<br /><span class="label"><a
id="x1-15010r10"></a></span>result.y&#x00A0;=&#x00A0;Vector3(x_axis.y,&#x00A0;y_axis.y,&#x00A0;z_axis.y).dot(v)&#x00A0;<br /><span class="label"><a
id="x1-15011r11"></a></span>result.z&#x00A0;=&#x00A0;Vector3(x_axis.z,&#x00A0;y_axis.z,&#x00A0;z_axis.z).dot(v)&#x00A0;<br /><span class="label"><a
id="x1-15012r12"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-15013r13"></a></span>//&#x00A0;is&#x00A0;the&#x00A0;same&#x00A0;as&#x00A0;doing&#x00A0;<br /><span class="label"><a
id="x1-15014r14"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-15015r15"></a></span>result&#x00A0;=&#x00A0;m.xform(v)&#x00A0;<br /><span class="label"><a
id="x1-15016r16"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-15017r17"></a></span>//&#x00A0;if&#x00A0;m&#x00A0;this&#x00A0;was&#x00A0;a&#x00A0;Transform(),&#x00A0;the&#x00A0;origin&#x00A0;would&#x00A0;be&#x00A0;added&#x00A0;<br /><span class="label"><a
id="x1-15018r18"></a></span>//&#x00A0;like&#x00A0;this:&#x00A0;<br /><span class="label"><a
id="x1-15019r19"></a></span>&#x00A0;<br /><span class="label"><a
id="x1-15020r20"></a></span>result&#x00A0;=&#x00A0;result&#x00A0;+&#x00A0;t.get_origin()
</div>
<!--l. 468--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.4.3 </span> <a
id="x1-160001.4.3"></a>Using The Transform</h5>
<!--l. 470--><p class="noindent" >So, it is often desired apply sucessive operations to a transformation. For example,
let&#8217;s a assume that there is a turtle sitting at the origin (the turtle is a logo reference,
for those familiar with it). The <span
class="ecti-1000">y </span>axis is up, and the the turtle&#8217;s nose is pointing
towards the <span
class="ecti-1000">z </span>axis.
<!--l. 476--><p class="indent" > The turtle (like many other animals, or vehicles!) can only walk towards the
direction it&#8217;s looking at. So, moving the turtle around a little should be something
like this:
<!--l. 481-->
<div class="lstlisting"><span class="label"><a
id="x1-16001r1"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">turtle</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">at</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">the</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">origin</span>&#x00A0;<br /><span class="label"><a
id="x1-16002r2"></a></span>turtle&#x00A0;=&#x00A0;Transform()&#x00A0;<br /><span class="label"><a
id="x1-16003r3"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">turtle</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">will</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">walk</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">5</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">units</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">in</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">z</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">axis</span>&#x00A0;<br /><span class="label"><a
id="x1-16004r4"></a></span>turtle.translate(&#x00A0;Vector3(0,0,5)&#x00A0;)&#x00A0;<br /><span class="label"><a
id="x1-16005r5"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">turtle</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">eyes</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">a</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">lettuce</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">3</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">units</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">away</span><span
class="ecti-1000">,</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">will</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">rotate</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">45</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">degrees</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">right</span>&#x00A0;<br /><span class="label"><a
id="x1-16006r6"></a></span>turtle.rotate(&#x00A0;Vector3(0,1,0),&#x00A0;Math.deg2rad(45)&#x00A0;)&#x00A0;<br /><span class="label"><a
id="x1-16007r7"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">turtle</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">approaches</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">the</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">lettuce</span>&#x00A0;<br /><span class="label"><a
id="x1-16008r8"></a></span>turtle.translate(&#x00A0;Vector3(0,0,5)&#x00A0;)&#x00A0;<br /><span class="label"><a
id="x1-16009r9"></a></span><span
class="ecti-1000">//</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">happy</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">turtle</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">over</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">lettuce</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">is</span><span
class="ecti-1000">&#x00A0;</span><span
class="ecti-1000">at</span>&#x00A0;<br /><span class="label"><a
id="x1-16010r10"></a></span>print(turtle.get_origin())
</div>
<!--l. 496--><p class="indent" > As can be seen, every new action the turtle takes is based on the previous one it
took. Had the order of actions been different and the turtle would have never reached
the lettuce.
<!--l. 500--><p class="indent" > Transforms are just that, a mean of &#8220;accumulating&#8221; rotation, translation, scale,
etc.
<!--l. 504--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.4.4 </span> <a
id="x1-170001.4.4"></a>A Warning about Numerical Precision</h5>
<!--l. 506--><p class="noindent" >Performing several actions over a transform will slowly and gradually lead to
precision loss (objects that draw according to a transform may get jittery, bigger,
smaller, skewed, etc). This happens due to the nature of floating point numbers. if
transforms/matrices are created from other kind of values (like a position and
some angular rotation) this is not needed, but if has been accumulating
transformations and was never recreated, it can be normalized by calling the
.orthonormalize() built-in function. This function has little cost and calling it every
now and then will avoid the effects from precision loss to become visible.
</body></html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 754 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -1,20 +0,0 @@
in FileDialog file_selected -> file_activated
focus script/shader editor when gaining focus
detect if errors in editor and don't allow play
-tree of files (all recognized extensions)
*export: *keep|export|bundle
*options: [make binary for xnl], then options for each filetype (texture compress method, etc)
config.h deberia teber varias cosas de plataforma
_FORCE_INLINE_
copymem
ftoi
defines de funciones matematicas

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1,984 +0,0 @@
#LyX 2.0 created this file. For more info see http://www.lyx.org/
\lyxformat 413
\begin_document
\begin_header
\textclass article
\use_default_options true
\maintain_unincluded_children false
\language english
\language_package default
\inputencoding auto
\fontencoding global
\font_roman default
\font_sans default
\font_typewriter default
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100
\graphics default
\default_output_format default
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize default
\use_hyperref false
\papersize default
\use_geometry false
\use_amsmath 1
\use_esint 1
\use_mhchem 1
\use_mathdots 1
\cite_engine basic
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\use_refstyle 1
\index Index
\shortcut idx
\color #008000
\end_index
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header
\begin_body
\begin_layout Title
Squirrel Usage in Godot
\end_layout
\begin_layout Section
Introduction
\end_layout
\begin_layout Standard
Squirrel is a nice scripting language.
It's sort of a mix between Lua, Java and JavaScript and ends up being easy
to learn for most programmers.
It has more language features than GDScript but it's also slower, more
limited and not as well integrated.
This guide will explain how Squirrel is integrated to Godot and all the
quirks that are needed to know in order to use it properly.
\end_layout
\begin_layout Section
Enabling Squirrel
\end_layout
\begin_layout Standard
Squirrel may not be enabled by default in a Godot build.
To enable it, execute SCons with the following parameters:
\end_layout
\begin_layout Standard
\begin_inset listings
inline false
status open
\begin_layout Plain Layout
shell$ scons squirrel=yes <target_binary>
\end_layout
\end_inset
\end_layout
\begin_layout Section
Documentation
\end_layout
\begin_layout Standard
Godot utilizes Squirrel 2.2.
Documentation can be found at:
\begin_inset CommandInset href
LatexCommand href
target "http://squirrel-lang.org/#documentation"
\end_inset
\end_layout
\begin_layout Section
Class Files
\end_layout
\begin_layout Standard
Unless writing a library, Godot expects a class for scripting an object.
Since a Squirrel source file can contain many classes, the main class must
be returned.
The following is an example of extending a button:
\end_layout
\begin_layout Standard
\begin_inset listings
inline false
status open
\begin_layout Plain Layout
class MyButton extends Button {
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
constructor() {
\end_layout
\begin_layout Plain Layout
// ALWAYS call parent constructor
\end_layout
\begin_layout Plain Layout
Button.constructor()
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
}
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
return MyButton // main class returned
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Additionally, classes are all copied to the root table, so all class names
in scripts must be different if they are attempted to be loaded simultaneously.
The same can be said for any other globals declared in the script.
\end_layout
\begin_layout Standard
Finally, squirrel scripts must be saved with the .nut or .sq extensions (both
are recognized).
\end_layout
\begin_layout Section
Including Other Scripts
\end_layout
\begin_layout Standard
Other scripts can be included with the include() directive.
Full and relative paths are supported.
When included, the classes and globals are moved to the root table, so
they become immediately available.
Constants, however, are only inlined in the current class on load, so Squirrel
does not make them available.
Example of including scripts:
\end_layout
\begin_layout Standard
\begin_inset listings
inline false
status open
\begin_layout Plain Layout
include("my_button.nut") # // relative to current script, expected to be
in the same path
\end_layout
\begin_layout Plain Layout
include("res://buttons/my_button.nut") // using resource path
\end_layout
\end_inset
\end_layout
\begin_layout Section
Built-In Types
\end_layout
\begin_layout Standard
There are some small differences between the Built-In types in Godot and
the ones in Squirrel, so the documentation will not match.
The differences are documented here.
\end_layout
\begin_layout Standard
An attempt will be made to document everything here,but if in doubt about
bindings on built-in types, you can always take a loot at the bindings
source file in script/squirrel/sq_bind_types.cpp.
\end_layout
\begin_layout Standard
Built-In Types in Squirrel are passed by reference (unlike by value like
in GD).
They also don't need to be freed.
\end_layout
\begin_layout Subsection
AABB
\end_layout
\begin_layout Standard
\begin_inset Quotes eld
\end_inset
pos
\begin_inset Quotes erd
\end_inset
,
\begin_inset Quotes eld
\end_inset
size
\begin_inset Quotes erd
\end_inset
and
\begin_inset Quotes eld
\end_inset
end
\begin_inset Quotes erd
\end_inset
are not available Use get_pos()/set_pos and get_size()/set_size().
\end_layout
\begin_layout Subsection
InputEvent
\end_layout
\begin_layout Standard
InputEvent is a single datatype and contains everything.
Use only the fields meant for the event type:
\end_layout
\begin_layout Standard
\begin_inset listings
inline false
status open
\begin_layout Plain Layout
//for mouse motion and button
\end_layout
\begin_layout Plain Layout
int mouse_x
\end_layout
\begin_layout Plain Layout
int mouse_y
\end_layout
\begin_layout Plain Layout
int mouse_button_mask
\end_layout
\begin_layout Plain Layout
int mouse_global_x
\end_layout
\begin_layout Plain Layout
int mouse_global_y
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//for mouse button
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
int mouse_button_index
\end_layout
\begin_layout Plain Layout
bool mouse_button_pressed
\end_layout
\begin_layout Plain Layout
bool mouse_button_doubleclick
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//for mouse motion
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
int mouse_motion_x
\end_layout
\begin_layout Plain Layout
int mouse_motion_y
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//for keyboard
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
int key_scancode
\end_layout
\begin_layout Plain Layout
int key_unicode
\end_layout
\begin_layout Plain Layout
bool key_pressed
\end_layout
\begin_layout Plain Layout
bool key_echo
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//for keyboard and mouse
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
bool mod_alt
\end_layout
\begin_layout Plain Layout
bool mod_shift
\end_layout
\begin_layout Plain Layout
bool mod_meta
\end_layout
\begin_layout Plain Layout
bool mod_control
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//joy button
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
int joy_button_index
\end_layout
\begin_layout Plain Layout
bool joy_button_pressed
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//joy axis
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
int joy_axis
\end_layout
\begin_layout Plain Layout
float joy_axis_value
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//screen drag and touch
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
int screen_index
\end_layout
\begin_layout Plain Layout
int screen_x
\end_layout
\begin_layout Plain Layout
int screen_y
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//screen touch
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
int screen_index
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//action
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
int action_id
\end_layout
\begin_layout Plain Layout
bool action_pressed
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Subsection
Matrix3
\end_layout
\begin_layout Standard
x,y,z member vectors are not available.
Use get_row() and set_row() instead.
Individual float values of the matrix are available as swizzle masks such
as xxy, xyz, zzx, etc.
\end_layout
\begin_layout Standard
Additional in-place versions of some functions are available: transpose(),
invert(), rotate(), scale(), orthonormalize().
\end_layout
\begin_layout Subsection
Transform
\end_layout
\begin_layout Standard
\begin_inset Quotes eld
\end_inset
basis
\begin_inset Quotes erd
\end_inset
and
\begin_inset Quotes eld
\end_inset
origin
\begin_inset Quotes erd
\end_inset
members are not available.
Use get_basis()/set_basis() and get_origin()/set_origin() instead.
Additional in-place versions of some functions are available: invert(),
affine_invert(), orthonormalize(), rotate(), translate(), scale().
\end_layout
\begin_layout Standard
Vector2
\end_layout
\begin_layout Subsection
Plane
\end_layout
\begin_layout Standard
\begin_inset Quotes eld
\end_inset
normal
\begin_inset Quotes erd
\end_inset
member vector is not available.
Use get_normal(), set_normal() instead.
\end_layout
\begin_layout Subsection
Rect2
\end_layout
\begin_layout Standard
\begin_inset Quotes eld
\end_inset
pos
\begin_inset Quotes erd
\end_inset
,
\begin_inset Quotes eld
\end_inset
size
\begin_inset Quotes erd
\end_inset
and
\begin_inset Quotes eld
\end_inset
end
\begin_inset Quotes erd
\end_inset
are not available Use get_pos()/set_pos and get_size()/set_size().
\end_layout
\begin_layout Subsection
Native Arrays
\end_layout
\begin_layout Standard
Native arrays such as RawArray, IntArray,StringArray, etc are not supported.
Use regular squirrel arrays instead, since conversion to/from them will
happen automatically.
\end_layout
\begin_layout Subsection
Math Functions
\end_layout
\begin_layout Standard
Math functions are inside the Math namespace in Squirrel.
For example Math.sin , Math.PI, Math.atan2().
\end_layout
\begin_layout Subsection
Native Types
\end_layout
\begin_layout Standard
Array, Dictionary and NodePath are not available.
Use a native array, table and string respectively.
\end_layout
\begin_layout Section
_get , _set
\end_layout
\begin_layout Standard
_get and _set are reserved in Squirrel, for overriding Godot Object property
getter/setter, use _get_property and _set_property.
\end_layout
\begin_layout Section
Member Export
\end_layout
\begin_layout Standard
Simple exporting of members (so far only integer, floating point and string
are supported) is supported by the @export extension.
It is used like this:
\end_layout
\begin_layout Standard
\begin_inset listings
inline false
status open
\begin_layout Plain Layout
class MyButton extends Button {
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
aprop=1 // @export
\end_layout
\begin_layout Plain Layout
bprop=2.0 // @export
\end_layout
\begin_layout Plain Layout
cprop="3" // @export
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
//these will be available to the property editor, and will be loaded/saved
with the scene.
\end_layout
\begin_layout Plain Layout
}
\end_layout
\end_inset
\end_layout
\begin_layout Section
Always Enabled Scripts
\end_layout
\begin_layout Standard
Scripts are not enabled in the editor by default.
To enable a script always, add an @always_enabled comment.
Example:
\end_layout
\begin_layout Standard
\begin_inset listings
inline false
status open
\begin_layout Plain Layout
//@always_enabled
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
class MyButton extends Button {
\end_layout
\begin_layout Plain Layout
\end_layout
\begin_layout Plain Layout
...
\end_layout
\end_inset
\end_layout
\begin_layout Section
Threads
\end_layout
\begin_layout Standard
Thread support in Squirrel is very poor.
This is because of the stack-based nature of the language implementation.
Since godot can run in multiple threads, it will forcibily lock the whole
VM when accessed from multiple threads, which will result in degraded performan
ce.
Creating user threads in Squirrel is definitely not recomended, as it may
completely lock the main thread.
\end_layout
\begin_layout Section
References
\end_layout
\begin_layout Standard
Godot has a built-in reference counted type used in conjunction with a template
(objects that inherit the
\begin_inset Quotes eld
\end_inset
Reference
\begin_inset Quotes erd
\end_inset
class).
Since Squirrel also uses reference counting, it becomes impossible for
such types in godot to contain a script, because it would result in an
un-breakable reference cycle.
To avoid this, a Ref() class was created in Squirrel.
\end_layout
\begin_layout Standard
When calling Godot API functions, returned references are wrapped inside
Ref() transparently, but the problem arises when creating a Reference-derived
object from the code.
In such cases, the reference must be wrapped manually like this:
\end_layout
\begin_layout Standard
\begin_inset listings
inline false
status open
\begin_layout Plain Layout
local f = Ref( File() )
\end_layout
\begin_layout Plain Layout
local err = f.open("hello.txt",File.READ)
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Anything not a reference that inherits from Object can be freed manually
by calling .free(), just like in GDScript.
Object classes are in itself weak references to engine objects, and their
validity can be checked by calling the
\begin_inset Quotes eld
\end_inset
has_instance()
\begin_inset Quotes erd
\end_inset
built-in method.
\end_layout
\begin_layout Section
Unicode
\end_layout
\begin_layout Standard
Squirrel source code is supposed to support Unicode, but the implementation
is very broken (Squirrel attempts to use 16 bit chars no matter what, making
it incompatible when the host OS is 32 bit, like Linux).
Squirrel source code is parsed as UTF-8, and strings also contain UTF-8.
Wide char access in strings is not supported.
\end_layout
\begin_layout Section
Debugging
\end_layout
\begin_layout Standard
Squirrel is well integrated into the Godot debugger.
To run the project in debug mode, execute the godot binary with the -debug
argument.
Godot will break on squirrel errors and allow the programmer to debug.
\end_layout
\begin_layout Section
Utility Functions
\end_layout
\begin_layout Standard
There are a few squirrel-only utility functions available:
\end_layout
\begin_layout Subsection
print(value[,value])
\end_layout
\begin_layout Standard
Print stuff to stdout.
\end_layout
\begin_layout Subsection
dofile(path)
\end_layout
\begin_layout Standard
Execute a squirrel script file and return whatever the file returns.
Not recommended to use in production because it can't be optimized.
\end_layout
\begin_layout Subsection
nativeref(var)
\end_layout
\begin_layout Standard
Convert any squirrel type to an engine type.
When this type returns to squirrel, it's converted back.
This is useful to add to Godot callbacks to ensure that the datatype is
not converted.
\end_layout
\begin_layout Subsection
unicode_split(string)
\end_layout
\begin_layout Standard
Split an unicode string (utf8) into an array of widechars.
Useful since there is no wide char access from Squirrel.
\end_layout
\begin_layout Subsection
breakpoint()
\end_layout
\begin_layout Standard
Stop the debugger when reaches here (when run inside the debugger).
\end_layout
\begin_layout Subsection
backtrace()
\end_layout
\begin_layout Standard
Print a backtrace of the call stack.
\end_layout
\begin_layout Subsection
tr(text)
\end_layout
\begin_layout Standard
Translate text (use string lookup in Godot translation system).
\end_layout
\begin_layout Subsection
printerr(text)
\end_layout
\begin_layout Standard
Print a string to stderr.
\end_layout
\end_body
\end_document

View File

@ -1,39 +0,0 @@
-Fisica 2D
*terminar constraints
*terminar queries
*desactivar on suspend
-bugs supongo?
-Fisica 3D
-portar engine 2D a 3D mayoritariamente (si puedo esperar, mejor)
-hacer que skeletons se vuelvan ragdolls de alguna forma
-hacer bien lo de enganchar cosas a huesos de esqueleto
-GUI
- Tree necesita resizear desde los headers
-Escena 3D
-Deshabilitar 3D (Opcional en compilacion)
-Particulas 3D
-Heightmaps
-Arreglar fixed pipeline
-arreglar glow y ssao
-Editor codigo
-Editor de codigo (esta, pero esta lleno de bugs)
-Debugger (esta, pero hay que integrar bien)
-UI General
-Cambiar lugar el tema de resources porque es MUY poco intuitivo
-Tal vez arreglar un poquito el theme y la estetica (para release, low priority)
-Run deberia correr la escena main
-new script deberia dar opcion de crear en disco
-los scripts de deberian mantener abiertos al abrir otra escena
-
-Settings
-Hacer pantalla de optimizacion general del proyecto
-A futuro:
-Scripting Propio
-Portar a DX9/GL3

View File

@ -1,557 +0,0 @@
#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
\textclass article
\use_default_options true
\language english
\inputencoding auto
\font_roman default
\font_sans default
\font_typewriter default
\font_default_family default
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100
\graphics default
\paperfontsize default
\use_hyperref false
\papersize default
\use_geometry false
\use_amsmath 1
\use_esint 1
\cite_engine basic
\use_bibtopic false
\paperorientation portrait
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\defskip medskip
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\author ""
\author ""
\end_header
\begin_body
\begin_layout Title
01.
Getting Started with Godot Engine
\end_layout
\begin_layout Section*
Introduction:
\end_layout
\begin_layout Standard
Godot Engine is designed to be useful.
This may sound rather vague and is difficult to explain without repeating
the same claims that every other engine does, but, as we progress through
this (and the next) tutorials, hopefully it will be made clear what
\begin_inset Quotes eld
\end_inset
useful
\begin_inset Quotes erd
\end_inset
means.
\end_layout
\begin_layout Standard
Godot Engine has many components, both high and low level, and is usually
more abstract and complex than most other engines.
This is, however, to the advantage of the user as complexity is presented
in a way that it only needs to be discovered when more power needs to be
untapped.
This helps to provide an easy learning curve.
\end_layout
\begin_layout Standard
Design wise, the whole API and set of components were created with a clear
goal in mind, which is to allow for smooth integration of design ideas,
code and assets.
This is achieved by defining the following rules:
\end_layout
\begin_layout Itemize
Implementing a game feature should never be too many steps away from an
existing component.
\end_layout
\begin_layout Itemize
More complex features should be leveraged by combining or extending existing
components.
\end_layout
\begin_layout Itemize
If the above fails, creating custom components should be extremely simple.
\end_layout
\begin_layout Standard
Ultimately, Godot Engine provides an editor and tools that allows everyone
to work with it:
\end_layout
\begin_layout Itemize
Programmers can script and extend any component of the project.
\end_layout
\begin_layout Itemize
Designers can tweak and animate any parameter from a friendly user interface.
\end_layout
\begin_layout Itemize
Artists can import their art and models and tweak the look of everything
in realtime.
\end_layout
\begin_layout Section*
Editor:
\end_layout
\begin_layout Standard
As mentioned before, Godot Engine is very abstract so projects consist of
just a
\emph on
path
\emph default
(ie: C:
\backslash
games
\backslash
mygame5).
Projects don't have to be specifically created, and many can be placed
inside the same path (useful for not wasting folders on tests and experiments).
\end_layout
\begin_layout Standard
In any case, to ease the management of projects, a graphical util exists.
\end_layout
\begin_layout Subsection*
Running From The Project Manager
\end_layout
\begin_layout Standard
Godot Engine includes a built-in project manager.
This is installed by default on Windows and OSX and it allows for the creation
and removal projects that will be remembered at the next startup:
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename pm.png
\end_inset
\end_layout
\begin_layout Standard
To create a new project, the [Create] button must be pressed and a dialog
will appear, prompting for a path and project name.
Afterwards, the [Open] button will close the project manager and open the
desired project.
\end_layout
\begin_layout Subsection*
Running From the Command Line
\end_layout
\begin_layout Standard
To create and manage projects, it is perfectly possible to use the command
line.
Many users prefer this way of working with project data.
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename pmc.png
\end_inset
\end_layout
\begin_layout Standard
For ease of use, it is recommended that the
\begin_inset Quotes eld
\end_inset
godot
\begin_inset Quotes erd
\end_inset
binary exists in the path, so any project can be opened easily aywhere
just by changing location to the projec and executing the editor.
\end_layout
\begin_layout Subsection*
Godot Editor
\end_layout
\begin_layout Standard
Godot Editor should have been opened by now, if not please check the previous
steps again.
\end_layout
\begin_layout Standard
Godot has a powerful buit-in editor.
It uses the graphics toolkint within itself to display the UI, so it runs
identical on any platform (even consoles or phones!).
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename editor.png
\end_inset
\end_layout
\begin_layout Standard
In the above screenshots, a few regions are labelled to be explained as
follows:
\end_layout
\begin_layout Subsubsection*
Viewport
\end_layout
\begin_layout Standard
The
\emph on
Viewport
\emph default
is the main space where the content is displayed.
Content includes 3D Nodes or Graphical User Interface (GUI) controls.
Other types of data spawn editors of their own when being edited.
The default viewport is the 3D viewport, which can be panned, zoomed, etc.
\end_layout
\begin_layout Subsubsection*
Scene Tree
\end_layout
\begin_layout Standard
The
\emph on
Scene Tree
\emph default
is a small dock that displays the tree of the current scene being edited.
A scene is a collection of nodes arranged in a tree-hierarchy (any node
can have several owned children-nodes).
The meaning of this ownership depends purely on the
\emph on
type
\emph default
of the node, but it will become clear after going through the examples.
In a
\emph on
MVC
\emph default
pattern, the scene tree could be considered the
\emph on
View
\emph default
.
\end_layout
\begin_layout Subsubsection*
Property Editor
\end_layout
\begin_layout Standard
The
\emph on
Property Editor
\emph default
is another small dock.
Every node contains a finite number of
\emph on
properties
\emph default
, which can be edited.
Properties can be of several types, such as integers, strings, images,
matrices, etc.
Usually, changes to properties are reflected in the
\emph on
viewport
\emph default
in real time.
\end_layout
\begin_layout Section*
Examples:
\end_layout
\begin_layout Standard
From now, a few, simple examples will be presented that will help understand
a little better how Godot Engine works.
\end_layout
\begin_layout Subsubsection*
Hello, World!
\end_layout
\begin_layout Enumerate
Open the editor
\end_layout
\begin_layout Enumerate
Click on
\begin_inset Quotes eld
\end_inset
Node
\begin_inset Quotes erd
\end_inset
(Node Menu), then on
\begin_inset Quotes eld
\end_inset
Create Root
\begin_inset Quotes erd
\end_inset
\end_layout
\begin_deeper
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_1.png
\end_inset
\end_layout
\end_deeper
\begin_layout Enumerate
Create a node of type
\emph on
Label,
\emph default
then instruct the
\emph on
editor
\emph default
to switch to GUI editing mode.
A few red squares will appear on the top left corner, don't mind them yet.
\end_layout
\begin_deeper
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_2.png
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_2b.png
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_3c.png
\end_inset
\end_layout
\end_deeper
\begin_layout Enumerate
Select the
\emph on
Label
\emph default
node in the
\emph on
Scene Tree
\emph default
(if it's not selected yet), the properties of the selected node will appear
in the
\emph on
Property Editor
\end_layout
\begin_deeper
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_3a.png
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_3b.png
\end_inset
\end_layout
\end_deeper
\begin_layout Enumerate
Look for the
\emph on
Text
\emph default
property in the
\emph on
Property Editor
\emph default
and click the right column, so it becomes editable.
Enter the text
\begin_inset Quotes eld
\end_inset
Hello, World!
\begin_inset Quotes erd
\end_inset
.
A red square containing
\begin_inset Quotes eld
\end_inset
Hello World!
\begin_inset Quotes erd
\end_inset
will appear at the top left, move it to the center.
\end_layout
\begin_deeper
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_4a.png
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_4b.png
\end_inset
\end_layout
\end_deeper
\begin_layout Enumerate
Save the scene.
\end_layout
\begin_deeper
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_5a.png
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_5b.png
\end_inset
\end_layout
\end_deeper
\begin_layout Enumerate
Press PLAY.
A new window will appear running the application.
\end_layout
\begin_deeper
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_6.png
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename tute1_7.png
\end_inset
\end_layout
\end_deeper
\begin_layout Subsubsection*
Hello World 2 (a little more complex)
\end_layout
\begin_layout Subsubsection*
A 3D Cube in Space
\end_layout
\begin_layout Standard
\end_layout
\begin_layout Standard
In many cases, nodes and other types of engine objects need to express changes
in their state, such as a button being pressed, a scroll being dragged,
or a projectile colliding against a tank.
Godot Engine utilizes the concept of signals for this.
Different types of nodes and objects can emit signals, and any other node
or object can connect to them.
\end_layout
\end_body
\end_document

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,25 +0,0 @@
undo/redo api proposal
o o o o o o o o
undoredo.create_method();
undoredo.add_do_method(node,"add_child",node_to_add);
undoredo.add_undo_method(node,"remove_child",node_to_add);
undoredo.add_add_data(node_to_add);
undoredo.commit()
undoredo.create_method();
undoredo.add_do_method(node,"remove_node",node_to_remove);
undoredo.add_undo_method(node,"add_node",node_to_remove);
undoredo.add_remove_data(node_to_remove);
undoredo.commit()
undoredo.create_property();
undoredo.add_do_set(node,"property",value);
undoredo.add_undo_set(node,"property",previous_value);
undoredo.add_remove_data(node_to_remove);
undoredo.commit()