OpenLiberty/scripts/classes/col_file.gd

104 lines
2.3 KiB
GDScript3
Raw Normal View History

2022-11-20 04:45:58 +07:00
class_name ColFile
extends RefCounted
var fourcc: String
var file_size: int
var model_name: String
var model_id: int
var tbounds: TBounds
2022-11-20 05:55:40 +07:00
var collisions: Array[TBase]
2022-11-20 06:40:40 +07:00
var vertices: PackedVector3Array
2022-11-20 04:45:58 +07:00
func _init(file: FileAccess):
fourcc = file.get_buffer(4).get_string_from_ascii()
2022-11-20 07:31:12 +07:00
assert(fourcc == "COLL")
2022-11-20 04:45:58 +07:00
file_size = file.get_32()
model_name = file.get_buffer(22).get_string_from_ascii()
model_id = file.get_16()
tbounds = TBounds.new(file)
for i in file.get_32():
2022-11-20 05:55:40 +07:00
collisions.append(TSphere.new(file))
2022-11-20 04:58:53 +07:00
file.get_32()
for i in file.get_32():
2022-11-20 05:55:40 +07:00
collisions.append(TBox.new(file))
2022-11-20 06:40:40 +07:00
var unsorted := PackedVector3Array()
for i in file.get_32():
unsorted.append(TVertex.new(file).position)
for i in file.get_32():
var face := TFace.new(file)
vertices.append(unsorted[face.a])
vertices.append(unsorted[face.b])
vertices.append(unsorted[face.c])
2022-11-20 04:45:58 +07:00
2022-11-20 04:55:03 +07:00
class TBase:
func read_vector3(file: FileAccess) -> Vector3:
2025-03-04 14:25:47 +07:00
# GTA3 uses a different coordinate system, so we need to convert
# the coordinates to Godot's coordinate system.
var x := file.get_float()
var y := file.get_float()
var z := file.get_float()
return Vector3(x, z, -y)
2022-11-20 04:55:03 +07:00
class TBounds extends TBase:
2022-11-20 04:45:58 +07:00
var radius: float
var center: Vector3
var min: Vector3
var max: Vector3
func _init(file: FileAccess):
radius = file.get_float()
2022-11-20 04:55:03 +07:00
center = read_vector3(file)
min = read_vector3(file)
max = read_vector3(file)
2022-11-20 04:45:58 +07:00
2022-11-20 04:55:03 +07:00
class TSurface extends TBase:
2022-11-20 04:45:58 +07:00
var material: int
var flag: int
var brightness: int
var light: int
func _init(file: FileAccess):
material = file.get_8()
flag = file.get_8()
brightness = file.get_8()
light = file.get_8()
2022-11-20 04:55:03 +07:00
class TSphere extends TBase:
2022-11-20 04:45:58 +07:00
var radius: float
var center: Vector3
var surface: TSurface
func _init(file: FileAccess):
radius = file.get_float()
2022-11-20 04:55:03 +07:00
center = read_vector3(file)
2022-11-20 04:45:58 +07:00
surface = TSurface.new(file)
2022-11-20 04:58:53 +07:00
class TBox extends TBase:
var min: Vector3
var max: Vector3
var surface: TSurface
func _init(file: FileAccess):
min = read_vector3(file)
max = read_vector3(file)
surface = TSurface.new(file)
2022-11-20 06:40:40 +07:00
class TVertex extends TBase:
var position: Vector3
func _init(file: FileAccess):
position = read_vector3(file)
class TFace extends TBase:
var a: int
var b: int
var c: int
var surface: TSurface
func _init(file: FileAccess):
a = file.get_32()
b = file.get_32()
c = file.get_32()
surface = TSurface.new(file)