| 694 | } |
| 695 | |
| 696 | s32 parse_actors(const char *json, Array<PhysicsActor> &objects, CompileOptions &opts) |
| 697 | { |
| 698 | CE_UNUSED(opts); |
| 699 | |
| 700 | TempAllocator4096 ta; |
| 701 | JsonObject obj(ta); |
| 702 | RETURN_IF_ERROR(sjson::parse(obj, json)); |
| 703 | |
| 704 | auto cur = json_object::begin(obj); |
| 705 | auto end = json_object::end(obj); |
| 706 | for (; cur != end; ++cur) { |
| 707 | JSON_OBJECT_SKIP_HOLE(obj, cur); |
| 708 | |
| 709 | const StringView key = cur->first; |
| 710 | const char *value = cur->second; |
| 711 | |
| 712 | JsonObject actor(ta); |
| 713 | RETURN_IF_ERROR(sjson::parse_object(actor, value)); |
| 714 | |
| 715 | PhysicsActor pa; |
| 716 | pa.name = StringId32(key.data(), key.length()); |
| 717 | pa.linear_damping = 0.0f; |
| 718 | pa.angular_damping = 0.0f; |
| 719 | |
| 720 | if (json_object::has(actor, "linear_damping")) { |
| 721 | pa.linear_damping = RETURN_IF_ERROR(sjson::parse_float(actor["linear_damping"])); |
| 722 | } |
| 723 | if (json_object::has(actor, "angular_damping")) { |
| 724 | pa.angular_damping = RETURN_IF_ERROR(sjson::parse_float(actor["angular_damping"])); |
| 725 | } |
| 726 | |
| 727 | pa.flags = 0; |
| 728 | if (json_object::has(actor, "dynamic")) { |
| 729 | bool val = RETURN_IF_ERROR(sjson::parse_bool(actor["dynamic"])); |
| 730 | pa.flags |= val ? CROWN_PHYSICS_ACTOR_DYNAMIC : 0u; |
| 731 | } |
| 732 | if (json_object::has(actor, "kinematic")) { |
| 733 | bool val = RETURN_IF_ERROR(sjson::parse_bool(actor["kinematic"])); |
| 734 | pa.flags |= val ? CROWN_PHYSICS_ACTOR_KINEMATIC : 0u; |
| 735 | } |
| 736 | if (json_object::has(actor, "disable_gravity")) { |
| 737 | bool val = RETURN_IF_ERROR(sjson::parse_bool(actor["disable_gravity"])); |
| 738 | pa.flags |= val ? CROWN_PHYSICS_ACTOR_DISABLE_GRAVITY : 0u; |
| 739 | } |
| 740 | if (json_object::has(actor, "trigger")) { |
| 741 | bool val = RETURN_IF_ERROR(sjson::parse_bool(actor["trigger"])); |
| 742 | pa.flags |= val ? CROWN_PHYSICS_ACTOR_TRIGGER : 0u; |
| 743 | } |
| 744 | |
| 745 | array::push_back(objects, pa); |
| 746 | } |
| 747 | |
| 748 | return 0; |
| 749 | } |
| 750 | |
| 751 | struct CollisionFilterCompiler |
| 752 | { |
no test coverage detected