Sistem Global - Godot Engine

Hai. Kenalin, gue Reymo Je

Ini kali pertama gue menulis blog yang bertentangan dengan teknologi dan game development. Berawal dari kegabutan menjadi proyek besar yang pernah gue kerjakan hingga saat ini. Dari bulan November 2024 hingga sekarang gue lagi ngerjain proyek game berjudul "Project Thinkbox". Disini gue akan berbagi sedikit ilmu ke kalian supaya industri kreatif dapat dikembangkan oleh generasi muda.

Project Thinkbox progress showcase - 19 Jan 2025


Godot Autoload

Buat para user Godot Engine mungkin pernah mendengar sebuah kata bernama Autoload. Yap, salah satu fitur godot yang memberikan fleksibilitas kepada scene system-nya.

 

Bilamana lo punya dua scene, scene pertama sedang berjalan dan akan berpindah ke scene kedua. Lah, lu punya sebuah variable yang value-nya selalu bertahan (tidak ter-reset) walaupun ada pergantian scene. Dari sini, kita dapat menggunakan system autoload ini. Dimana autoload akan menyimpan data berupa Resource dan akan terus berjalan sampai game selesai berjalan (Quit Game).


 

Global System

MENYIMPAN VARIABEL GLOBAL KE DALAM SEBUAH FILE

Lanjut ke Sistem Global yang gue bikin sendiri. Gue membagi variabel global menjadi dua jenis, yaitu Conditions dan State. Supaya pengolahan data lebih fleksibel, variabel-variabel tersebut disimpan disebuah file JSON bernama global_var.json

  • Conditions : menyimpan variable berupa boolean (true/false)
  • State : menyimpan variable dalam bentuk angka (integer)

global_var.json

 

Darisini kita dapat mengolah data file global tersebut menggunakan script. Buatlah script global (global.gd) kemudian masukkan script tersebut ke Project > Project Settings > Globals > Autoload. Aksi ini membuat script global akan berjalan sepanjang game yang sedang bekerja hingga game telah usai. Kita perlu memuat file global tersebut sebelum mengolah datanya.

NOTE : File JSON adalah sebuah Resource, bilamana file tersebut dimuat ke dalam sebuah variabel, variabel tersebut akan berjenis Dictionary

 

Buat variable untuk menyimpan JSON ke dalam bentuk Dictionary


Fungsi untuk memuat file JSON

Aplikasikan ke fungsi _ready()


Btw, berdasarkan gambar pertama, kita juga memerlukan variabel default dari variable global. Untuk apa? Supaya variabel global dapat di-reset ke default value-nya. Untuk mendapatkan value variabel default, kita duplikat variable global saat game baru berjalan. Inilah mengapa pada gambar pertama, mengisi variabel default dilakukan di dalam fungsi _ready().

 

FUNGSI UNTUK MENGOLAH DATA

Disini kita dapat sebebasnya mengolah data dari variabel global tersebut. Gue membagi beberapa fungsionalitas pengolahan data.

  • Get Global Condition
  • Set Global Condition
  • Get Global State
  • Set Global State
  • Increase Global State
  • Decrease Global State
  • Reset Global

 

TAMBAHAN

Gue juga bikin fungsi tambahan untuk mengecek ada tidaknya suatu key didalam sebuah Dictionary.


Untuk memakai fungsi ini, diperlukan 3 input :

  • Dictionary : Variabel dictionary yang akan dicek
  • Head : Conditions atau State
  • Key : Nama key yang akan dicek

Fungsi ini akan menghasilkan nilai true bila key ada didalam head, dan akan menghasilkan nilai false bila sebaliknya.

 

Konstanta untuk Conditions dan State juga diperlukan.

 

GET GLOBAL CONDITION

Fungsi ini berfungsi untuk mengambil value condition dari sebuah key sebagai input.


SET GLOBAL CONDITION

Fungsi ini berfungsi untuk mengatur value condition dari sebuah input key dengan input value.


GET GLOBAL STATE

Fungsi ini berfungsi untuk mendapatkan value state dari sebuah key sebagai input.


SET GLOBAL STATE

Fungsi ini berfungsi untuk mengatur value state dari sebuah input key dengan input value.


INCREASE GLOBAL STATE

Fungsi ini berfungsi menaikkan value state.


DECREASE GLOBAL STATE

Fungsi ini berfungsi menurunkan value state.


RESET GLOBAL

Mengingat Autoload akan dijalankan dari awal game berjalan hingga selesai. Fungsi ini berfungsi mengembalikan ulang value dari variabel global. Berguna jika berpindah scene dan ingin mer-reset variabel global.


USE CASES

PLAYER HANYA BISA MELOMPAT BILA IA CONTROLLABLE

is_player_controllable sudah dideklarasikan di dalam global_var.json

Di dalam fungsi jump() tersebut, instruksi fungsi hanya akan berjalan bila variabel is_player_controllable memiliki value true. Untuk mendapatkan value dari variabel tersebut, kita menggunakan fungsi get_global_condition().

 

BILA PLAYER MOKAD, ANGKA DEATH COUNT NAIK

Dalam fungsi kill_self() dimana fungsi tersebut akan tereksekusi bila player mokad, kita dapat menggunakan variabel global untuk menyimpan dan menghitung jumlah kegagalan yang ada.

 

Post written by Reymo Je

Comments