sound.vala 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * Copyright (c) 2012-2024 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. namespace Crown
  6. {
  7. public class 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. }
  27. public Vector3 local_position()
  28. {
  29. return _db.get_property_vector3(_id, "position");
  30. }
  31. public Quaternion local_rotation()
  32. {
  33. return _db.get_property_quaternion(_id, "rotation");
  34. }
  35. public Vector3 local_scale()
  36. {
  37. return Vector3(1.0, 1.0, 1.0);
  38. }
  39. public void set_local_position(Vector3 position)
  40. {
  41. _db.set_property_vector3(_id, "position", position);
  42. }
  43. public void set_local_rotation(Quaternion rotation)
  44. {
  45. _db.set_property_quaternion(_id, "rotation", rotation);
  46. }
  47. public void set_local_scale(Vector3 scale)
  48. {
  49. // Do nothing.
  50. }
  51. public double range()
  52. {
  53. return _db.get_property_double(_id, "range");
  54. }
  55. public void set_range(double range)
  56. {
  57. _db.set_property_double(_id, "range", range);
  58. }
  59. public double volume()
  60. {
  61. return _db.get_property_double(_id, "volume");
  62. }
  63. public void set_volume(double volume)
  64. {
  65. _db.set_property_double(_id, "volume", volume);
  66. }
  67. public bool loop()
  68. {
  69. return _db.get_property_bool(_id, "loop");
  70. }
  71. public void set_loop(bool loop)
  72. {
  73. _db.set_property_bool(_id, "loop", loop);
  74. }
  75. public static int generate_spawn_sound_commands(StringBuilder sb, Guid?[] object_ids, Database db)
  76. {
  77. int i = 0;
  78. for (; i < object_ids.length; ++i) {
  79. if (db.object_type(object_ids[i]) != OBJECT_TYPE_SOUND_SOURCE)
  80. break;
  81. Guid id = object_ids[i];
  82. string s = LevelEditorApi.spawn_sound(id
  83. , db.get_property_string (id, "name")
  84. , db.get_property_vector3 (id, "position")
  85. , db.get_property_quaternion(id, "rotation")
  86. , db.get_property_double (id, "range")
  87. , db.get_property_double (id, "volume")
  88. , db.get_property_bool (id, "loop")
  89. );
  90. sb.append(s);
  91. }
  92. return i;
  93. }
  94. public void send(RuntimeInstance runtime)
  95. {
  96. runtime.send_script(LevelEditorApi.move_object(_id
  97. , local_position()
  98. , local_rotation()
  99. , local_scale()
  100. ));
  101. runtime.send_script(LevelEditorApi.set_sound_range(_id, range()));
  102. }
  103. }
  104. } /* namespace Crown */