Skip to content

Commit c7e5bd1

Browse files
DominikMendelBromeon
authored andcommitted
Initial test of Godot duplicator with Area2D
1 parent f67a1ae commit c7e5bd1

File tree

2 files changed

+70
-2
lines changed

2 files changed

+70
-2
lines changed

godot-codegen/src/special_cases/codegen_special_cases.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,8 @@ const SELECTED_CLASSES: &[&str] = &[
190190
"Time", // usage: enum_test.enum_hash()
191191
"HTTPRequest",
192192
"ResourceFormatLoader", // TODO: replace?
193+
//
194+
// Collision
195+
"CollisionObject2D",
196+
"Area2D",
193197
];

itest/rust/src/object_tests/property_test.rs

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
66
*/
77

8-
use godot::builtin::{dict, Color, Dictionary, GString, Variant, VariantType};
9-
use godot::classes::{INode, IRefCounted, Node, Object, RefCounted, Resource, Texture};
8+
use godot::builtin::{dict, Color, Dictionary, GString, StringName, Variant, VariantType};
9+
use godot::classes::{Area2D, INode, IRefCounted, Node, Object, RefCounted, Resource, Texture};
1010
use godot::global::{PropertyHint, PropertyUsageFlags};
1111
use godot::meta::{GodotConvert, PropertyHintInfo, ToGodot};
1212
use godot::obj::{Base, EngineBitfield, EngineEnum, Gd, NewAlloc, NewGd, OnEditor};
@@ -537,3 +537,67 @@ fn test_var_with_renamed_funcs() {
537537

538538
obj.free();
539539
}
540+
541+
#[derive(GodotClass)]
542+
#[class(init, base=Node)]
543+
struct SomeDuplicator {
544+
#[var]
545+
int_val: i32,
546+
547+
#[var]
548+
optional_node: Option<Gd<Node>>,
549+
550+
#[export]
551+
oneditor_node: OnEditor<Gd<Node>>,
552+
553+
#[export]
554+
oneditor_area: OnEditor<Gd<Area2D>>,
555+
}
556+
557+
#[itest]
558+
fn test_some_duplicator() {
559+
let mut obj = SomeDuplicator::new_alloc();
560+
obj.bind_mut().int_val = 5;
561+
562+
let some_node = Node::new_alloc();
563+
obj.bind_mut().optional_node = Some(some_node.clone());
564+
565+
let mut editor_node = Node::new_alloc();
566+
editor_node.set_name("test");
567+
obj.bind_mut().oneditor_node.init(editor_node);
568+
569+
let mut some_area = Area2D::new_alloc();
570+
some_area.set_collision_layer(1);
571+
some_area.set_collision_mask(1);
572+
obj.bind_mut().oneditor_area.init(some_area);
573+
assert_eq!(obj.bind().oneditor_area.get_collision_layer(), 1);
574+
assert_eq!(obj.bind().oneditor_area.get_collision_mask(), 1);
575+
576+
let duplicated_obj = obj.duplicate();
577+
let duplicated_obj: Gd<SomeDuplicator> = duplicated_obj.unwrap().cast();
578+
579+
{
580+
let duplicated = duplicated_obj.bind();
581+
assert_eq!(duplicated.int_val, 5);
582+
assert_eq!(
583+
duplicated.optional_node.as_ref().unwrap().instance_id(),
584+
some_node.instance_id()
585+
);
586+
assert_eq!(
587+
duplicated.optional_node.as_ref().unwrap().get_name(),
588+
StringName::from("renamed")
589+
);
590+
591+
assert_eq!(
592+
duplicated.oneditor_node.get_name(),
593+
StringName::from("test")
594+
);
595+
596+
assert_eq!(duplicated.oneditor_area.get_collision_layer(), 1);
597+
assert_eq!(duplicated.oneditor_area.get_collision_mask(), 1);
598+
}
599+
600+
some_node.free();
601+
duplicated_obj.free();
602+
obj.free();
603+
}

0 commit comments

Comments
 (0)