adolson edited this page Jul 31, 2014 · 23 revisions

####Scripting How-to

  • How to clone a node
var orig = get_node("SomeNode")
var copy = orig.duplicate()
add_child(copy) # copied node has to be add to scene tree manually
  • How to use JSON in GDScript
var d={}
var err = d.parse_json(json_string)
if (err!=OK):
    print("error parsing json")
  • How to use multi-dimension array
var a =[[1,2],[3,4]]
  • How to save data to file system
var gold = 150 # I have lots of gold!
var f = File.new()
var err=f.open("user://some_data_file",File.WRITE) #TODO: handle errors and such!
# Note: You could probably just use store_var() for many purposes
f.store_8(5) # store an integer
f.store_string("some gold") # store a string
f.store_var(gold) # store a variable
f.store_line("gold="+str(gold)) # store a line
f.close() # we're done writing data, close the file
  • How to load data from file system
var my_num
var my_string
var my_gold
var save_file = "user://some_data_file"
var f = File.new()
if f.file_exists(save_file): # check if the file exists
	f.open(save_file, File.READ) # try opening it with read access
	if f.is_open(): # we opened it, let's read some data!
		my_num = f.get_8() # retrieve the number
		my_string = f.get_string() # retrieve the string
		my_gold = f.get_var() # retrieve the gold variable
		my_line = f.get_line()
		f.close() # data's all here, close the file
		print("Data loaded.") # debug message
	else: # failed to open the file - maybe a permission issue?
		print("Unable to read file!")
else: # file doesn't exist, probably set vars to some defaults, etc.
	print("File does not exist.")
  • How to set a function's parameter default
func my_function(my_param="default value"):
  • How to display fps
extends Label # attach me to a label

func _ready():
	set_process(true)

func _process(d):
	set_text(str(OS.get_frames_per_second()))
  • How to draw a polygon and its points with an outline
func _drawPolygon(pointArray):
	var i = 1;
	var colors = [
	Color(0.5,0.5,0.5),
	Color(0.5,0.5,0.5), 
	Color(0.5,0.5,0.5), 
	Color(0.5,0.5,0.5)
	];
	var uvs = [];
	var prevpoint = null;
	
	#Fill the polygon shape
	draw_polygon(pointArray, colors, uvs);
	
	#Then draw a circle at each point, and then lines between them
	for p in pointArray: #for each point as "p" in the array points
	
		draw_circle(p, 10, Color(1,1,1)); 
		#Draw a circle at the point, with a radius of 
		#10 and the color white
		
		#Check if this point was the first point, if it isn't, 
		#then draw a line from the previous point to this point
		if prevpoint != null:
			draw_line(prevpoint, p, Color(1,1,1),5)
			prevpoint = p;
			#^^set the prevpoint for the next loop
		else:
			prevpoint = p;
			
		#check if the loop has reached the last point,
		#then draw a line from the last point to the first point (points[0]
		if i == points.size():
			draw_line(p, pointArray[0], Color(1,1,1),5)
			print("array end");
			#Just to make sure we got all the way trough :)
		i+=1;
		#now increase the interval in order to keep checking if 
		#we're at then end of the array
  • How to set a global variable
Globals.set("my_global", 6)
  • How to get a global variable
print ( Globals.get("my_global") )
  • How to quit the game
get_scene().quit()
  • How to change label font color
label.add_color_override("font_color", <desired_color>)
  • How to hide the mouse cursor
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
  • How to show the mouse cursor
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
  • How to use a PNG image as mouse cursor
func _ready():
	Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
	var cursor = load("res://cursor.png")
	VisualServer.cursor_set_texture(cursor,Vector2(0,0),0)
	VisualServer.cursor_set_visible(true, 0)
	set_process_input(true)

func _input(ev):
	if (ev.type == InputEvent.MOUSE_MOTION):
		VisualServer.cursor_set_pos(ev.pos,0)
  • How to get mouse click position
    You can get mouse click position in _process or _input:

use _process:

func _ready():
	set_process(true)	

func _process(delta):
	if (Input.is_mouse_button_pressed(1)):
		print("Left click: ", Input.get_mouse_pos())
	if (Input.is_mouse_button_pressed(2)):
		print("Right click: ", Input.get_mouse_pos())
	if (Input.is_mouse_button_pressed(3)):
		print("Middle click: ", Input.get_mouse_pos())	

use _input:

func _ready():	
	set_process_input(true)

func _input(ev):
	if (ev.type == InputEvent.MOUSE_BUTTON):
		print("Mouse event:", ev.pos)
  • How to check if a directory exist
# Checking if a directory exist in resource data directory
var res_dir = Directory.new()
if ( res_dir.dir_exists("res://my_dir") ):
	print("res://my_dir exist!")

# Checking if a directory exist in user data directory
var user_dir = Directory.new()
user_dir.open("user://")
if ( user_dir.dir_exists("user://my_dir") ):
	print("user://my_dir exist!")

# Checking if a directory exist in file system
var fs_dir = Directory.new()
fs_dir.open("")
if ( fs_dir.dir_exists("c:\\Windows") ): # guilty as charged -- marynate
	print("c:\\Windows exist!")
  • How to check data type
var a_var = 1

var type = typeof(a_var)

if (type==TYPE_INT):
	print("it's an int")
elif (type==TYPE_REAL):
	print("it's a float")
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.