sound.vala 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*
  2. * Copyright (c) 2012-2025 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. namespace Crown
  6. {
  7. public struct Sound
  8. {
  9. public Database _db;
  10. public Guid _id;
  11. public Sound(Database db, Guid id)
  12. {
  13. _db = db;
  14. _id = id;
  15. }
  16. public void create(string name, Vector3 pos, Quaternion rot, Vector3 scl, double range, double volume, bool loop)
  17. {
  18. _db.create(_id, OBJECT_TYPE_SOUND_SOURCE);
  19. _db.set_property_string(_id, "name", name);
  20. set_local_position(pos);
  21. set_local_rotation(rot);
  22. set_local_scale(scl);
  23. set_range(range);
  24. set_volume(volume);
  25. set_loop(loop);
  26. set_group("music");
  27. }
  28. public Vector3 local_position()
  29. {
  30. return _db.get_property_vector3(_id, "position");
  31. }
  32. public Quaternion local_rotation()
  33. {
  34. return _db.get_property_quaternion(_id, "rotation");
  35. }
  36. public Vector3 local_scale()
  37. {
  38. return Vector3(1.0, 1.0, 1.0);
  39. }
  40. public void set_local_position(Vector3 position)
  41. {
  42. _db.set_property_vector3(_id, "position", position);
  43. }
  44. public void set_local_rotation(Quaternion rotation)
  45. {
  46. _db.set_property_quaternion(_id, "rotation", rotation);
  47. }
  48. public void set_local_scale(Vector3 scale)
  49. {
  50. // Do nothing.
  51. }
  52. public double range()
  53. {
  54. return _db.get_property_double(_id, "range");
  55. }
  56. public void set_range(double range)
  57. {
  58. _db.set_property_double(_id, "range", range);
  59. }
  60. public double volume()
  61. {
  62. return _db.get_property_double(_id, "volume");
  63. }
  64. public void set_volume(double volume)
  65. {
  66. _db.set_property_double(_id, "volume", volume);
  67. }
  68. public bool loop()
  69. {
  70. return _db.get_property_bool(_id, "loop");
  71. }
  72. public void set_loop(bool loop)
  73. {
  74. _db.set_property_bool(_id, "loop", loop);
  75. }
  76. public void set_group(string group)
  77. {
  78. _db.set_property_string(_id, "group", group);
  79. }
  80. public static int generate_spawn_sound_commands(StringBuilder sb, Guid?[] object_ids, Database db)
  81. {
  82. int i = 0;
  83. for (; i < object_ids.length; ++i) {
  84. if (db.object_type(object_ids[i]) != OBJECT_TYPE_SOUND_SOURCE)
  85. break;
  86. Guid id = object_ids[i];
  87. sb.append("editor_nv, editor_nq, editor_nm = Device.temp_count()");
  88. string s = LevelEditorApi.spawn_sound(id
  89. , db.get_property_string (id, "name")
  90. , db.get_property_vector3 (id, "position")
  91. , db.get_property_quaternion(id, "rotation")
  92. , db.get_property_double (id, "range")
  93. , db.get_property_double (id, "volume")
  94. , db.get_property_bool (id, "loop")
  95. );
  96. sb.append(s);
  97. sb.append("Device.set_temp_count(editor_nv, editor_nq, editor_nm)");
  98. }
  99. return i;
  100. }
  101. public static int generate_change_sound_commands(StringBuilder sb, Guid?[] object_ids, Database db)
  102. {
  103. int i = 0;
  104. for (; i < object_ids.length; ++i) {
  105. if (db.object_type(object_ids[i]) != OBJECT_TYPE_SOUND_SOURCE)
  106. break;
  107. Guid id = object_ids[i];
  108. Sound sound = Sound(db, id);
  109. sb.append("editor_nv, editor_nq, editor_nm = Device.temp_count()");
  110. sb.append(LevelEditorApi.move_object(id
  111. , sound.local_position()
  112. , sound.local_rotation()
  113. , sound.local_scale()
  114. ));
  115. sb.append(LevelEditorApi.set_sound_range(id, sound.range()));
  116. sb.append("Device.set_temp_count(editor_nv, editor_nq, editor_nm)");
  117. }
  118. return i;
  119. }
  120. }
  121. } /* namespace Crown */