MiniPlatformGame/addons/Gamepad/GamepadArea.gd
Martin Dimitrov 8689a4732a Initial commit
In this commit I add a human character, a traveler that can move around
a tiny world made of a single screen so far. :)

Materials used so far:
 * 'HeartBeast' video lesons: https://goo.gl/3DtqPn
 * The very informative and rich documentation of Godot itself!

For the Gamepad I used wonderful addon by fiaful:
https://github.com/fiaful/Gamepad

The beautiful arts are from "Open Pixel Project":
https://openpixelproject.itch.io
2018-10-26 16:20:12 +03:00

99 lines
No EOL
4.4 KiB
GDScript

###[ INFO ]######################################################################################################
# Component: GamepadArea
# Author: Francesco Iafulli (fiaful)
# E-mail: fiaful@hotmail.com
# Version: 1.0
# Last modify: 2018-07-20
# What is this:
# E' un nodo facoltativo. Le sue funzioni sono 2 (una esclude l'altra):
# - consentire agli elementi del gamepad di essere visualizzati solo quando lo schermo viene toccato e nel punto
# in cui viene toccato, ed essere invisibili il restante tempo
# - raggruppare oggetti sempre visibili del gamepad in modo da poter essere disabilitati in maniera cumulativa
# Requirements:
# - il parent di questo nodo deve essere di tipo GamepadContainer, altrimenti gli eventi non verranno intercettati
# - l'area di questo oggetto deve essere estesa a tutta la zona che si desidera avere sesibile per la visualizzazione
# dell'oggetto del gamepad in maniera dinamica -oppure- deve essere estesa in modo da poter contenere tutti
# gli oggetti che si desidera abilitare/disabilitare contemporaneamente
# - dovrà essere contenuto un solo oggetto se questo deve essere visualizzato in maniera dinamica, altrimenti
# tutti gli oggetti che si desirea abilitare/disabilitare contemporaneamente dovranno essere qui contenuti
# To do:
# - gestire una eventuale visualizzazione dell'area al tocco qualora lo si desideri
# Changelog:
#
#
###[ BEGIN ]#####################################################################################################
extends Control
###[ CONSTS ]####################################################################################################
# è utilizzato per discriminare se questo nodo è un'area (viene controllata la presenza di questa costante, se c'è il nodo
# è di tipo GamepadArea, altrimenti no
const is_area = true
###[ EXPORTED VARIABLES ]########################################################################################
# indica se l'intera area (e gli oggetti in essa contenuti) devono essere disabilitati (se true, nessuno degli oggetti
# contenuti riceverà i tocchi dell'utente)
export var disabled = false
# questa proprietà contiene il nome dell'oggetto (che viene restituito nell'oggetto finger)
export var gamepad_type = "AREA 0"
###[ METHODS ]###################################################################################################
# dal GamepadContainer viene richiamato questo metodo se l'utente tocca quest'area
func handle_down_event(event, finger):
# se l'oggetto è disabilitato esco, non propagando l'evento agli oggetti contenuti
if disabled:
return
# altrimenti per ogni oggetto contenuto
for child in get_children():
# se l'oggetto è un oggetto del gamepad
if child.has_method("handle_down_event"):
# aggiorno l'oggetto associato all'istanza corrente di finger
finger.set_finger(finger.index, child, finger.position)
# quindi chiedo all'oggetto contenuto di gestire l'evento
child.handle_down_event(event, finger)
func handle_up_event(event, finger):
# se l'oggetto è disabilitato esco, non propagando l'evento agli oggetti contenuti
if disabled:
return
# altrimenti per ogni oggetto contenuto
for child in get_children():
# se l'oggetto è un oggetto del gamepad
if child.has_method("handle_up_event"):
# aggiorno l'oggetto associato all'istanza corrente di finger
finger.set_finger(finger.index, child, finger.position)
# quindi chiedo all'oggetto contenuto di gestire l'evento
child.handle_up_event(event, finger)
func handle_move_event(event, finger):
# se l'oggetto è disabilitato esco, non propagando l'evento agli oggetti contenuti
if disabled:
return
# altrimenti per ogni oggetto contenuto
for child in get_children():
# se l'oggetto è un oggetto del gamepad
if child.has_method("handle_move_event"):
# aggiorno l'oggetto associato all'istanza corrente di finger
finger.set_finger(finger.index, child, finger.position)
# quindi chiedo all'oggetto contenuto di gestire l'evento
child.handle_move_event(event, finger)
func handle_input(event):
# questo evento viene richiamato dal container in caso di eventi da tastiera
for child in get_children():
# pertanto propago l'evento a tutti i figli
if child.has_method("handle_input"):
# che sono in grado di gestirlo
child.handle_input(event)
###[ END ]#######################################################################################################