Curso de programación de videojuegos con Godot | Novela visual 1

Curso de programación de videojuegos con Godot
Novela visual

Curso de programación de videojuegos con Godot | Novela visual 2

Curso de programación de videojuegos con Godot | Novela visual

Leer un json

.
├── data
│ └── main_scene.json
├── scene
│ ├── main_scene.tscn
│ └── main_scene_script.gd
└── utils.gd

res://scenes/main_scene_script.gd

extends Node2D

var Utils = preload("res://utils.gd")

func _ready():
 var data = Utils.load_json("res://data/main_scene.json")
 print(data.lines[0].text)

res://utils.gd

extends Resource

static func load_json(path: String) -> Dictionary:
 var file := FileAccess.open(path, FileAccess.READ)
 if file == null:
  push_error("No se pudo abrir el fichero: " + path)
  return {}
 
 var content := file.get_as_text()
 file.close()
 
 var json := JSON.new()
 var result := json.parse(content)
 
 if result != OK:
  push_error("Error al parsear el JSON: " + str(json.get_error_message()))
  return {}
 
 return json.data

res://data/main_scene.json

{
 "scene_name":"hola",
 "scene_background":"main_scene.png",
 "lines":[
  {
   "text":"uyuyuy"
  }
 ]
}

Cargar una imagen del json

res://utils.gd

static func load_background(target: Sprite2D, image_name: String) -> void:
 var path = "res://assets/scene_backgrounds/%s" % image_name
 var texture: Texture2D = load(path)

 if texture == null:
  push_error("No se pudo cargar la imagen en: " + path)
  return

 target.texture = texture
 target.centered = false       # <- clave
 target.position = Vector2.ZERO

 var viewport_size = target.get_viewport_rect().size
 var tex_size = texture.get_size()

 if tex_size.x == 0 or tex_size.y == 0:
  return

 target.scale = viewport_size / tex_size

res://scenes/main_scene_script.gd

func _ready():
 var data = Utils.load_json("res://data/main_scene.json")
 print(data.lines[0].text)
 var bg = Utils.load_background("main_scene.png")
 $Background.texture = bg