From 1ba04ba2df01739115116a8d9abfedea0ff1b909 Mon Sep 17 00:00:00 2001 From: Dragos Daian Date: Tue, 8 Oct 2024 14:56:02 +0200 Subject: [PATCH] lint gdscript code on github actions --- .github/workflows/static_checks.yml | 21 +++++++++++ bin2d/addons/godot-rapier2d/faucet_2d.gd | 7 ++-- .../godot-rapier2d/fluid_2d_renderer.gd | 4 ++- .../fluid_2d_shader_renderer.gd | 12 +++++-- .../addons/godot-rapier2d/rapier_state_2d.gd | 35 +++++++++++++------ scripts/lint.sh | 4 ++- 6 files changed, 65 insertions(+), 18 deletions(-) diff --git a/.github/workflows/static_checks.yml b/.github/workflows/static_checks.yml index 42671432..0b6e2909 100644 --- a/.github/workflows/static_checks.yml +++ b/.github/workflows/static_checks.yml @@ -32,3 +32,24 @@ jobs: shell: sh run: | cargo clippy --all-targets --features="build3d" --no-default-features -- -D warnings + gdlint: + name: GDLint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + python -m pip install 'gdtoolkit==4.*' + + - name: Lint Rapier2D + run: | + gdlint bin2d/addons/godot-rapier2d/**.gd + + - name: Lint Rapier3D + run: | + gdlint bin3d/addons/godot-rapier3d/**.gd diff --git a/bin2d/addons/godot-rapier2d/faucet_2d.gd b/bin2d/addons/godot-rapier2d/faucet_2d.gd index 7100e310..6fd8653d 100644 --- a/bin2d/addons/godot-rapier2d/faucet_2d.gd +++ b/bin2d/addons/godot-rapier2d/faucet_2d.gd @@ -1,13 +1,15 @@ class_name Faucet2D extends Fluid2D -var points_new: PackedVector2Array @export var interval := 0.06 -var velocities_new: PackedVector2Array @export var max_particles: int = 1000 @export var width: int = 4 @export var height: int = 2 +var points_new: PackedVector2Array +var velocities_new: PackedVector2Array + + func _ready(): points_new = create_rectangle_points(width, height) velocities_new.resize(points_new.size()) @@ -17,6 +19,7 @@ func _ready(): velocities_new.fill(dir) get_tree().create_timer(interval).timeout.connect(_on_timer_timeout) + func _on_timer_timeout(): get_tree().create_timer(interval).timeout.connect(_on_timer_timeout) if len(points) > max_particles: diff --git a/bin2d/addons/godot-rapier2d/fluid_2d_renderer.gd b/bin2d/addons/godot-rapier2d/fluid_2d_renderer.gd index c45a7206..dca76ddd 100644 --- a/bin2d/addons/godot-rapier2d/fluid_2d_renderer.gd +++ b/bin2d/addons/godot-rapier2d/fluid_2d_renderer.gd @@ -4,7 +4,8 @@ extends MultiMeshInstance2D @export var fluid: Fluid2D @export var color: Color = Color(0.8, 0.8, 0.8, 0.3) -@export var mesh_scale: Vector2 = Vector2(5,5) +@export var mesh_scale: Vector2 = Vector2(5, 5) + func _ready(): if multimesh == null: @@ -14,6 +15,7 @@ func _ready(): if texture == null: texture = load("res://addons/godot-rapier2d/Radial2D.svg") + func _process(_delta): if fluid == null: return diff --git a/bin2d/addons/godot-rapier2d/fluid_2d_shader_renderer.gd b/bin2d/addons/godot-rapier2d/fluid_2d_shader_renderer.gd index 62ce5601..f2a4c0cf 100644 --- a/bin2d/addons/godot-rapier2d/fluid_2d_shader_renderer.gd +++ b/bin2d/addons/godot-rapier2d/fluid_2d_shader_renderer.gd @@ -8,7 +8,7 @@ extends CanvasLayer update_configuration_warnings() @export var camera: Camera2D @export var water_material: Material = load("res://addons/godot-rapier2d/water_shader.tres") -@export var mesh_scale: Vector2 = Vector2(5,5) +@export var mesh_scale: Vector2 = Vector2(5, 5) var fluid_renderer: Fluid2DRenderer var inside_camera: Camera2D: set(value): @@ -17,6 +17,7 @@ var inside_camera: Camera2D: var sub_viewport_container: SubViewportContainer var sub_viewport: SubViewport + func _get_configuration_warnings(): var warnings = [] if camera == null: @@ -36,6 +37,7 @@ func _create_subviewport_container(): ProjectSettings.get("display/window/size/viewport_height") ) + func _create_subviewport(): sub_viewport = SubViewport.new() sub_viewport.name = "SubViewport" @@ -43,20 +45,23 @@ func _create_subviewport(): sub_viewport.transparent_bg = true sub_viewport.size = sub_viewport_container.size + func _create_fluid_renderer(): fluid_renderer = Fluid2DRenderer.new() fluid_renderer.name = "Fluid2DRenderer" - fluid_renderer.color = Color(255,0,255) + fluid_renderer.color = Color(255, 0, 255) fluid_renderer.mesh_scale = mesh_scale fluid_renderer.fluid = fluid sub_viewport.add_child(fluid_renderer) + func _create_inside_camera(): inside_camera = Camera2D.new() inside_camera.name = "Camera2D" inside_camera.material = water_material sub_viewport.add_child(inside_camera) + func _ready() -> void: _create_subviewport_container() _create_subviewport() @@ -65,7 +70,8 @@ func _ready() -> void: if fluid: fluid.debug_draw = false -func _process(delta: float) -> void: + +func _process(_delta: float) -> void: if camera != null: inside_camera.offset = camera.offset inside_camera.zoom = camera.zoom diff --git a/bin2d/addons/godot-rapier2d/rapier_state_2d.gd b/bin2d/addons/godot-rapier2d/rapier_state_2d.gd index 2b415d7c..ee5a98f6 100644 --- a/bin2d/addons/godot-rapier2d/rapier_state_2d.gd +++ b/bin2d/addons/godot-rapier2d/rapier_state_2d.gd @@ -3,14 +3,15 @@ class_name Rapier2DState extends Node -var state : Dictionary = {} +var state: Dictionary = {} + func _is_physics_object(node: Node) -> bool: - return node is CollisionObject2D or \ - node is Joint2D + return node is CollisionObject2D or node is Joint2D + func _get_all_physics_nodes(p_node: Node, path: String = "/root/") -> Array[String]: - var results : Array[String] = [] + var results: Array[String] = [] if path == "/root/" && _is_physics_object(p_node): results.append(path + p_node.name) path += p_node.name + "/" @@ -21,29 +22,33 @@ func _get_all_physics_nodes(p_node: Node, path: String = "/root/") -> Array[Stri results.append_array(_get_all_physics_nodes(node, path)) return results + ## Save a node's physics state func save_node(rid: RID, save_json: bool): if save_json: return JSON.parse_string(RapierPhysicsServer2D.export_json(rid)) - else: - return RapierPhysicsServer2D.export_binary(rid) + return RapierPhysicsServer2D.export_binary(rid) + ## Load a node's physics state func load_node(rid: RID, data: PackedByteArray): RapierPhysicsServer2D.import_binary(rid, data) + ## Save the state of whole world (single space) func save_state(save_json: bool = false) -> int: var physics_nodes := _get_all_physics_nodes(get_tree().current_scene) for node_path in physics_nodes: var node := get_node(node_path) - var rid : RID + var rid: RID if node is CollisionObject2D: rid = node.get_rid() for owner_id in node.get_shape_owners(): for owner_shape_id in node.shape_owner_get_shape_count(owner_id): var shape_rid = node.shape_owner_get_shape(owner_id, owner_shape_id).get_rid() - state[node_path + "/" + str(owner_id) + "/" + str(owner_shape_id)] = save_node(shape_rid, save_json) + state[node_path + "/" + str(owner_id) + "/" + str(owner_shape_id)] = save_node( + shape_rid, save_json + ) if node is Joint2D: rid = node.get_rid() state[node_path] = save_node(rid, save_json) @@ -52,18 +57,21 @@ func save_state(save_json: bool = false) -> int: state["id"] = RapierPhysicsServer2D.get_global_id() return hash(JSON.stringify(state)) + ## Load the state of whole world (single space) func load_state() -> int: var physics_nodes := _get_all_physics_nodes(get_tree().current_scene) for node_path in physics_nodes: var node := get_node(node_path) - var rid : RID + var rid: RID if node is CollisionObject2D: rid = node.get_rid() for owner_id in node.get_shape_owners(): for owner_shape_id in node.shape_owner_get_shape_count(owner_id): var shape_rid = node.shape_owner_get_shape(owner_id, owner_shape_id).get_rid() - var shape_state = state[node_path + "/" + str(owner_id) + "/" + str(owner_shape_id)] + var shape_state = state[ + node_path + "/" + str(owner_id) + "/" + str(owner_shape_id) + ] load_node(shape_rid, JSON.parse_string(shape_state)) if node is Joint2D: rid = node.get_rid() @@ -74,19 +82,24 @@ func load_state() -> int: RapierPhysicsServer2D.set_global_id(int(state["id"])) return hash(JSON.stringify(state)) + ## Export the state to file func export_state(file_name: String = "user://state.json"): save_state(false) FileAccess.open(file_name, FileAccess.WRITE).store_string(JSON.stringify(state, " ")) + ## Import the state from file func import_state(file_name: String = "user://state.json"): state = JSON.parse_string(FileAccess.open(file_name, FileAccess.READ).get_as_text()) load_state() + func _notification(what: int) -> void: if what == NOTIFICATION_ENTER_TREE: print("enter tree") if what == NOTIFICATION_EXIT_TREE: save_state(false) - FileAccess.open("user://save.json", FileAccess.WRITE).store_string(JSON.stringify(state, " ")) + FileAccess.open("user://save.json", FileAccess.WRITE).store_string( + JSON.stringify(state, " ") + ) diff --git a/scripts/lint.sh b/scripts/lint.sh index d4a06a0b..1d70f77c 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -1 +1,3 @@ -cargo fmt --all -- --check \ No newline at end of file +cargo fmt --all -- --check +gdlint bin2d/addons/godot-rapier2d/**.gd +gdlint bin3d/addons/godot-rapier3d/**.gd