diff --git a/asset/icons/icon_nosound.FCStd b/asset/icons/icon_nosound.FCStd
new file mode 100644
index 0000000..9d406b6
Binary files /dev/null and b/asset/icons/icon_nosound.FCStd differ
diff --git a/asset/icons/icon_nosound.obj b/asset/icons/icon_nosound.obj
new file mode 100644
index 0000000..dff4386
--- /dev/null
+++ b/asset/icons/icon_nosound.obj
@@ -0,0 +1,789 @@
+# FreeCAD v0.19 build24291 (Git) Arch module
+# http://www.freecadweb.org
+mtllib icon_nosound.mtl
+o Extrude
+usemtl color_000000
+v 10.858986 -8.496451 0.0
+v 10.768653 -8.687046 0.0
+v 10.768653 -8.687046 3.0
+v 10.858986 -8.496451 3.0
+v 10.970331 -8.387315 0.0
+v 10.970331 -8.387315 3.0
+v 11.103894 -8.32237 0.0
+v 11.103894 -8.32237 3.0
+v 11.225414 -8.296178 0.0
+v 11.225414 -8.296178 3.0
+v 11.363965 -8.290171 0.0
+v 11.363965 -8.290171 3.0
+v 14.949069 -8.290171 0.0
+v 14.949069 -8.290171 3.0
+v 15.31983 -8.346107 0.0
+v 15.31983 -8.346107 3.0
+v 15.500213 -8.443584 0.0
+v 15.500213 -8.443584 3.0
+v 15.622814 -8.576778 0.0
+v 15.622814 -8.576778 3.0
+v 15.698253 -8.73692 0.0
+v 15.698253 -8.73692 3.0
+v 15.731678 -8.886421 0.0
+v 15.731678 -8.886421 3.0
+v 15.74282 -9.057463 0.0
+v 15.74282 -9.057463 3.0
+v 15.74282 -13.052671 0.0
+v 15.74282 -13.052671 3.0
+v 15.74282 -13.145275 0.0
+v 15.74282 -13.145275 3.0
+v 15.663445 -13.581838 0.0
+v 15.663445 -13.581838 3.0
+v 13.864278 -11.782671 0.0
+v 13.864278 -11.782671 3.0
+v 14.062716 -11.729754 0.0
+v 14.062716 -11.729754 3.0
+v 14.419903 -11.729754 0.0
+v 14.419903 -11.729754 3.0
+v 14.419903 -10.406837 0.0
+v 14.419903 -10.406837 3.0
+v 12.488444 -10.406837 0.0
+v 12.488444 -10.406837 3.0
+vn -0.903643786907196 0.42828500270843506 0.0
+vn -0.903643786907196 0.42828500270843506 0.0
+vn -0.6999881267547607 0.7141544818878174 0.0
+vn -0.6999881267547607 0.7141544818878174 0.0
+vn -0.43729478120803833 0.899318277835846 0.0
+vn -0.43729478120803833 0.899318277835846 0.0
+vn -0.21069571375846863 0.9775516986846924 0.0
+vn -0.21069571375846863 0.9775516986846924 0.0
+vn -0.04331665858626366 0.9990614056587219 0.0
+vn -0.04331665858626366 0.9990614056587219 0.0
+vn 0.0 1.0 0.0
+vn 0.0 1.0 -0.0
+vn 0.14917953312397003 0.988810122013092 0.0
+vn 0.14917953312397003 0.988810122013092 -0.0
+vn 0.4754179120063782 0.8797601461410522 -0.0
+vn 0.4754179120063782 0.8797601461410522 0.0
+vn 0.7357574105262756 0.6772451400756836 -0.0
+vn 0.7357574105262756 0.6772451400756836 0.0
+vn 0.9046497941017151 0.42615583539009094 -0.0
+vn 0.9046497941017151 0.42615583539009094 0.0
+vn 0.97590571641922 0.21819256246089935 -0.0
+vn 0.97590571641922 0.21819256246089935 0.0
+vn 0.9978850483894348 0.06500301510095596 -0.0
+vn 0.9978850483894348 0.06500301510095596 0.0
+vn 1.0 0.0 0.0
+vn 1.0 0.0 0.0
+vn 1.0 0.0 0.0
+vn 1.0 0.0 0.0
+vn 0.9838697910308838 -0.17888601124286652 0.0
+vn 0.9838697910308838 -0.17888601124286652 0.0
+vn -0.7071067690849304 -0.7071067690849304 0.0
+vn -0.7071067690849304 -0.7071067690849304 0.0
+vn -0.25766175985336304 0.9662351012229919 0.0
+vn -0.25766175985336304 0.9662351012229919 0.0
+vn 0.0 1.0 0.0
+vn 0.0 1.0 -0.0
+vn -1.0 0.0 0.0
+vn -1.0 0.0 0.0
+vn 0.0 -1.0 0.0
+vn 0.0 -1.0 0.0
+vn -0.7071068286895752 -0.7071068286895752 0.0
+vn -0.7071068286895752 -0.7071068286895752 0.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+f 1//1 2//1 3//1
+f 1//2 3//2 4//2
+f 5//3 4//3 6//3
+f 5//4 1//4 4//4
+f 7//5 6//5 8//5
+f 7//6 5//6 6//6
+f 9//7 8//7 10//7
+f 9//8 7//8 8//8
+f 11//9 10//9 12//9
+f 11//10 9//10 10//10
+f 13//11 11//11 12//11
+f 13//12 12//12 14//12
+f 15//13 13//13 14//13
+f 15//14 14//14 16//14
+f 17//15 16//15 18//15
+f 17//16 15//16 16//16
+f 19//17 18//17 20//17
+f 19//18 17//18 18//18
+f 21//19 20//19 22//19
+f 21//20 19//20 20//20
+f 23//21 22//21 24//21
+f 23//22 21//22 22//22
+f 25//23 24//23 26//23
+f 25//24 23//24 24//24
+f 27//25 25//25 26//25
+f 27//26 26//26 28//26
+f 29//27 27//27 28//27
+f 29//28 28//28 30//28
+f 31//29 29//29 30//29
+f 31//30 30//30 32//30
+f 33//31 31//31 32//31
+f 33//32 32//32 34//32
+f 35//33 33//33 34//33
+f 35//34 34//34 36//34
+f 37//35 35//35 36//35
+f 37//36 36//36 38//36
+f 39//37 37//37 38//37
+f 39//38 38//38 40//38
+f 41//39 39//39 40//39
+f 41//40 40//40 42//40
+f 2//41 41//41 42//41
+f 2//42 42//42 3//42
+f 37//43 27//43 29//43
+f 37//44 29//44 31//44
+f 33//45 35//45 37//45
+f 33//46 37//46 31//46
+f 39//47 27//47 37//47
+f 25//48 27//48 39//48
+f 15//49 17//49 19//49
+f 15//50 19//50 21//50
+f 15//51 21//51 23//51
+f 13//52 23//52 25//52
+f 13//53 25//53 39//53
+f 13//54 15//54 23//54
+f 41//55 13//55 39//55
+f 11//56 13//56 41//56
+f 2//57 9//57 11//57
+f 2//58 11//58 41//58
+f 7//59 9//59 2//59
+f 1//60 5//60 7//60
+f 1//61 7//61 2//61
+f 28//62 38//62 30//62
+f 30//63 38//63 32//63
+f 36//64 34//64 38//64
+f 38//65 34//65 32//65
+f 28//66 40//66 38//66
+f 28//67 26//67 40//67
+f 18//68 16//68 20//68
+f 20//69 16//69 22//69
+f 22//70 16//70 24//70
+f 24//71 14//71 26//71
+f 26//72 14//72 40//72
+f 16//73 14//73 24//73
+f 14//74 42//74 40//74
+f 14//75 12//75 42//75
+f 10//76 3//76 12//76
+f 12//77 3//77 42//77
+f 10//78 8//78 3//78
+f 6//79 4//79 8//79
+f 8//80 4//80 3//80
+o Extrude001
+usemtl color_000000
+v 9.638294 -8.876664 0.0
+v 9.525111 -8.964859 0.0
+v 9.525111 -8.964859 3.0
+v 9.638294 -8.876664 3.0
+v 9.766175 -8.823748 0.0
+v 9.766175 -8.823748 3.0
+v 9.908757 -8.806108 0.0
+v 9.908757 -8.806108 3.0
+v 10.049869 -8.823748 0.0
+v 10.049869 -8.823748 3.0
+v 10.17334 -8.876664 0.0
+v 10.17334 -8.876664 3.0
+v 10.279174 -8.964859 0.0
+v 10.279174 -8.964859 3.0
+v 16.36459 -15.050275 3.0
+v 16.36459 -15.050275 0.0
+v 16.452785 -15.156109 0.0
+v 16.452785 -15.156109 3.0
+v 16.505701 -15.27958 0.0
+v 16.505701 -15.27958 3.0
+v 16.52334 -15.420691 0.0
+v 16.52334 -15.420691 3.0
+v 16.505701 -15.563273 0.0
+v 16.505701 -15.563273 3.0
+v 16.452785 -15.691155 0.0
+v 16.452785 -15.691155 3.0
+v 16.36459 -15.804338 0.0
+v 16.36459 -15.804338 3.0
+v 16.258757 -15.885183 0.0
+v 16.258757 -15.885183 3.0
+v 16.135284 -15.93369 0.0
+v 16.135284 -15.93369 3.0
+v 15.994174 -15.949859 0.0
+v 15.994174 -15.949859 3.0
+v 15.851592 -15.93369 0.0
+v 15.851592 -15.93369 3.0
+v 15.72371 -15.885183 0.0
+v 15.72371 -15.885183 3.0
+v 15.610528 -15.804338 0.0
+v 15.610528 -15.804338 3.0
+v 9.525111 -9.718921 3.0
+v 9.525111 -9.718921 0.0
+v 9.444265 -9.605739 0.0
+v 9.444265 -9.605739 3.0
+v 9.395759 -9.477857 0.0
+v 9.395759 -9.477857 3.0
+v 9.37959 -9.335276 0.0
+v 9.37959 -9.335276 3.0
+v 9.395759 -9.194164 0.0
+v 9.395759 -9.194164 3.0
+v 9.444265 -9.070692 0.0
+v 9.444265 -9.070692 3.0
+vn -0.6146508455276489 0.7887993454933167 0.0
+vn -0.6146508455276489 0.7887993454933167 0.0
+vn -0.3823532164096832 0.9240162372589111 0.0
+vn -0.3823532164096832 0.9240162372589111 0.0
+vn -0.12277647852897644 0.9924343228340149 0.0
+vn -0.12277647852897644 0.9924343228340149 0.0
+vn 0.12403638660907745 0.9922776818275452 0.0
+vn 0.12403638660907745 0.9922776818275452 -0.0
+vn 0.39392101764678955 0.9191442728042603 -0.0
+vn 0.39392101764678955 0.9191442728042603 0.0
+vn 0.6401837468147278 0.7682218551635742 -0.0
+vn 0.6401837468147278 0.7682218551635742 0.0
+vn 0.7071067690849304 0.7071067690849304 0.0
+vn 0.7071067690849304 0.7071067690849304 -0.0
+vn 0.768218457698822 0.6401877999305725 0.0
+vn 0.768218457698822 0.6401877999305725 -0.0
+vn 0.9191468954086304 0.3939150273799896 -0.0
+vn 0.9191468954086304 0.3939150273799896 0.0
+vn 0.9922776818275452 0.12403638660907745 -0.0
+vn 0.9922776818275452 0.12403638660907745 0.0
+vn 0.9924343228340149 -0.12277647852897644 0.0
+vn 0.9924343228340149 -0.12277647852897644 0.0
+vn 0.9240196943283081 -0.38234490156173706 0.0
+vn 0.9240196943283081 -0.38234490156173706 0.0
+vn 0.7887935638427734 -0.6146581768989563 0.0
+vn 0.7887935638427734 -0.6146581768989563 0.0
+vn 0.6070457696914673 -0.7946668863296509 0.0
+vn 0.6070457696914673 -0.7946668863296509 0.0
+vn 0.36565104126930237 -0.9307520389556885 0.0
+vn 0.36565104126930237 -0.9307520389556885 0.0
+vn 0.11383631825447083 -0.9934995174407959 0.0
+vn 0.11383631825447083 -0.9934995174407959 0.0
+vn -0.1126764640212059 -0.9936317205429077 0.0
+vn -0.1126764640212059 -0.9936317205429077 0.0
+vn -0.3546527624130249 -0.934998095035553 0.0
+vn -0.3546527624130249 -0.934998095035553 0.0
+vn -0.5812453031539917 -0.8137283325195312 0.0
+vn -0.5812453031539917 -0.8137283325195312 0.0
+vn -0.7071067690849304 -0.7071067690849304 0.0
+vn -0.7071067690849304 -0.7071067690849304 0.0
+vn -0.8137283325195312 -0.5812453031539917 0.0
+vn -0.8137283325195312 -0.5812453031539917 0.0
+vn -0.934998095035553 -0.3546527624130249 0.0
+vn -0.934998095035553 -0.3546527624130249 0.0
+vn -0.9936316013336182 -0.112677201628685 0.0
+vn -0.9936316013336182 -0.112677201628685 0.0
+vn -0.9934996366500854 0.11383556574583054 0.0
+vn -0.9934996366500854 0.11383556574583054 0.0
+vn -0.9307520389556885 0.36565104126930237 0.0
+vn -0.9307520389556885 0.36565104126930237 0.0
+vn -0.7946668863296509 0.6070457696914673 0.0
+vn -0.7946668863296509 0.6070457696914673 0.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+f 43//81 44//81 45//81
+f 43//82 45//82 46//82
+f 47//83 46//83 48//83
+f 47//84 43//84 46//84
+f 49//85 48//85 50//85
+f 49//86 47//86 48//86
+f 51//87 49//87 50//87
+f 51//88 50//88 52//88
+f 53//89 52//89 54//89
+f 53//90 51//90 52//90
+f 55//91 54//91 56//91
+f 55//92 53//92 54//92
+f 57//93 55//93 56//93
+f 58//94 55//94 57//94
+f 59//95 58//95 57//95
+f 59//96 57//96 60//96
+f 61//97 60//97 62//97
+f 61//98 59//98 60//98
+f 63//99 62//99 64//99
+f 63//100 61//100 62//100
+f 65//101 63//101 64//101
+f 65//102 64//102 66//102
+f 67//103 66//103 68//103
+f 67//104 65//104 66//104
+f 69//105 68//105 70//105
+f 69//106 67//106 68//106
+f 71//107 69//107 70//107
+f 71//108 70//108 72//108
+f 73//109 72//109 74//109
+f 73//110 71//110 72//110
+f 75//111 74//111 76//111
+f 75//112 73//112 74//112
+f 77//113 75//113 76//113
+f 77//114 76//114 78//114
+f 79//115 78//115 80//115
+f 79//116 77//116 78//116
+f 81//117 80//117 82//117
+f 81//118 79//118 80//118
+f 83//119 81//119 82//119
+f 84//120 81//120 83//120
+f 85//121 84//121 83//121
+f 85//122 83//122 86//122
+f 87//123 86//123 88//123
+f 87//124 85//124 86//124
+f 89//125 88//125 90//125
+f 89//126 87//126 88//126
+f 91//127 89//127 90//127
+f 91//128 90//128 92//128
+f 93//129 92//129 94//129
+f 93//130 91//130 92//130
+f 44//131 94//131 45//131
+f 44//132 93//132 94//132
+f 73//133 69//133 71//133
+f 75//134 63//134 65//134
+f 75//135 65//135 67//135
+f 75//136 67//136 69//136
+f 75//137 69//137 73//137
+f 58//138 59//138 61//138
+f 58//139 61//139 63//139
+f 58//140 75//140 77//140
+f 58//141 77//141 79//141
+f 58//142 79//142 81//142
+f 58//143 63//143 75//143
+f 84//144 58//144 81//144
+f 55//145 58//145 84//145
+f 85//146 55//146 84//146
+f 87//147 55//147 85//147
+f 51//148 53//148 55//148
+f 49//149 51//149 55//149
+f 89//150 55//150 87//150
+f 89//151 49//151 55//151
+f 47//152 49//152 89//152
+f 43//153 47//153 89//153
+f 44//154 89//154 91//154
+f 44//155 91//155 93//155
+f 44//156 43//156 89//156
+f 70//157 74//157 72//157
+f 64//158 76//158 66//158
+f 66//159 76//159 68//159
+f 68//160 76//160 70//160
+f 70//161 76//161 74//161
+f 60//162 57//162 62//162
+f 62//163 57//163 64//163
+f 76//164 57//164 78//164
+f 78//165 57//165 80//165
+f 80//166 57//166 82//166
+f 64//167 57//167 76//167
+f 57//168 83//168 82//168
+f 57//169 56//169 83//169
+f 56//170 86//170 83//170
+f 56//171 88//171 86//171
+f 54//172 52//172 56//172
+f 52//173 50//173 56//173
+f 56//174 90//174 88//174
+f 50//175 90//175 56//175
+f 50//176 48//176 90//176
+f 48//177 46//177 90//177
+f 90//178 45//178 92//178
+f 92//179 45//179 94//179
+f 46//180 45//180 90//180
+o Extrude002
+usemtl color_000000
+v 9.154695 -13.819963 0.0
+v 9.128236 -13.833192 0.0
+v 9.128236 -13.833192 3.0
+v 9.154695 -13.819963 3.0
+v 9.558429 -13.506382 0.0
+v 9.558429 -13.506382 3.0
+v 9.826687 -13.374091 0.0
+v 9.826687 -13.374091 3.0
+v 10.107195 -13.290796 0.0
+v 10.107195 -13.290796 3.0
+v 10.120423 -13.290796 0.0
+v 10.120423 -13.290796 3.0
+v 10.715736 -13.317254 0.0
+v 10.715736 -13.317254 3.0
+v 10.715736 -11.650379 0.0
+v 10.715736 -11.650379 3.0
+v 11.77407 -12.708713 0.0
+v 11.77407 -12.708713 3.0
+v 11.77407 -14.904755 0.0
+v 11.77407 -14.904755 3.0
+v 11.73637 -15.20638 0.0
+v 11.73637 -15.20638 3.0
+v 11.591509 -15.508004 0.0
+v 11.591509 -15.508004 3.0
+v 11.435403 -15.709087 0.0
+v 11.435403 -15.709087 3.0
+v 11.231673 -15.910172 0.0
+v 11.231673 -15.910172 3.0
+v 11.218445 -15.949859 0.0
+v 11.218445 -15.949859 3.0
+v 10.884776 -16.214441 0.0
+v 10.884776 -16.214441 3.0
+v 10.518769 -16.390831 0.0
+v 10.518769 -16.390831 3.0
+v 10.120423 -16.479025 0.0
+v 10.120423 -16.479025 3.0
+v 10.107195 -16.479025 0.0
+v 10.107195 -16.479025 3.0
+v 9.676512 -16.465796 0.0
+v 9.676512 -16.465796 3.0
+v 9.301685 -16.337914 0.0
+v 9.301685 -16.337914 3.0
+v 8.982716 -16.095379 0.0
+v 8.982716 -16.095379 3.0
+v 8.741651 -15.77788 0.0
+v 8.741651 -15.77788 3.0
+v 8.618178 -15.407463 0.0
+v 8.618178 -15.407463 3.0
+v 8.612299 -14.984129 0.0
+v 8.612299 -14.984129 3.0
+v 8.693143 -14.562265 0.0
+v 8.693143 -14.562265 3.0
+v 8.865122 -14.178619 0.0
+v 8.865122 -14.178619 3.0
+vn -0.4472135901451111 0.8944271802902222 0.0
+vn -0.4472135901451111 0.8944271802902222 0.0
+vn -0.6134102940559387 0.789764404296875 0.0
+vn -0.6134102940559387 0.789764404296875 0.0
+vn -0.4422902762889862 0.8968719840049744 0.0
+vn -0.4422902762889862 0.8968719840049744 0.0
+vn -0.2846581041812897 0.9586291313171387 0.0
+vn -0.2846581041812897 0.9586291313171387 0.0
+vn 0.0 1.0 0.0
+vn 0.0 1.0 -0.0
+vn 0.044399652630090714 0.9990138411521912 0.0
+vn 0.044399652630090714 0.9990138411521912 -0.0
+vn -1.0 0.0 0.0
+vn -1.0 0.0 0.0
+vn 0.7071067690849304 0.7071067690849304 0.0
+vn 0.7071067690849304 0.7071067690849304 -0.0
+vn 1.0 0.0 0.0
+vn 1.0 0.0 0.0
+vn 0.9922792315483093 -0.12402353435754776 0.0
+vn 0.9922792315483093 -0.12402353435754776 0.0
+vn 0.9014279842376709 -0.4329291880130768 0.0
+vn 0.9014279842376709 -0.4329291880130768 0.0
+vn 0.7899078130722046 -0.6132255792617798 0.0
+vn 0.7899078130722046 -0.6132255792617798 0.0
+vn 0.7024707794189453 -0.7117125988006592 0.0
+vn 0.7024707794189453 -0.7117125988006592 0.0
+vn 0.9486877918243408 -0.31621405482292175 0.0
+vn 0.9486877918243408 -0.31621405482292175 0.0
+vn 0.6213209629058838 -0.7835561633110046 0.0
+vn 0.6213209629058838 -0.7835561633110046 0.0
+vn 0.43414363265037537 -0.9008437395095825 0.0
+vn 0.43414363265037537 -0.9008437395095825 0.0
+vn 0.21616561710834503 -0.9763566851615906 0.0
+vn 0.21616561710834503 -0.9763566851615906 0.0
+vn 0.0 -1.0 0.0
+vn 0.0 -1.0 0.0
+vn -0.03070269525051117 -0.9995285868644714 0.0
+vn -0.03070269525051117 -0.9995285868644714 0.0
+vn -0.3229007422924042 -0.9464328289031982 0.0
+vn -0.3229007422924042 -0.9464328289031982 0.0
+vn -0.6052693724632263 -0.7960207462310791 0.0
+vn -0.6052693724632263 -0.7960207462310791 0.0
+vn -0.7964453101158142 -0.604710578918457 0.0
+vn -0.7964453101158142 -0.604710578918457 0.0
+vn -0.9486833214759827 -0.3162277638912201 0.0
+vn -0.9486833214759827 -0.3162277638912201 0.0
+vn -0.9999036192893982 -0.01388698723167181 0.0
+vn -0.9999036192893982 -0.01388698723167181 0.0
+vn -0.9821286797523499 0.18821047246456146 0.0
+vn -0.9821286797523499 0.18821047246456146 0.0
+vn -0.9125096201896667 0.40905535221099854 0.0
+vn -0.9125096201896667 0.40905535221099854 0.0
+vn -0.7955081462860107 0.6059427857398987 0.0
+vn -0.7955081462860107 0.6059427857398987 0.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+f 95//181 96//181 97//181
+f 95//182 97//182 98//182
+f 99//183 95//183 98//183
+f 99//184 98//184 100//184
+f 101//185 100//185 102//185
+f 101//186 99//186 100//186
+f 103//187 102//187 104//187
+f 103//188 101//188 102//188
+f 105//189 103//189 104//189
+f 105//190 104//190 106//190
+f 107//191 105//191 106//191
+f 107//192 106//192 108//192
+f 109//193 107//193 108//193
+f 109//194 108//194 110//194
+f 111//195 109//195 110//195
+f 111//196 110//196 112//196
+f 113//197 111//197 112//197
+f 113//198 112//198 114//198
+f 115//199 113//199 114//199
+f 115//200 114//200 116//200
+f 117//201 116//201 118//201
+f 117//202 115//202 116//202
+f 119//203 118//203 120//203
+f 119//204 117//204 118//204
+f 121//205 120//205 122//205
+f 121//206 119//206 120//206
+f 123//207 121//207 122//207
+f 123//208 122//208 124//208
+f 125//209 123//209 124//209
+f 125//210 124//210 126//210
+f 127//211 126//211 128//211
+f 127//212 125//212 126//212
+f 129//213 128//213 130//213
+f 129//214 127//214 128//214
+f 131//215 129//215 130//215
+f 131//216 130//216 132//216
+f 133//217 131//217 132//217
+f 133//218 132//218 134//218
+f 135//219 134//219 136//219
+f 135//220 133//220 134//220
+f 137//221 136//221 138//221
+f 137//222 135//222 136//222
+f 139//223 137//223 138//223
+f 139//224 138//224 140//224
+f 141//225 140//225 142//225
+f 141//226 139//226 140//226
+f 143//227 142//227 144//227
+f 143//228 141//228 142//228
+f 145//229 143//229 144//229
+f 145//230 144//230 146//230
+f 147//231 146//231 148//231
+f 147//232 145//232 146//232
+f 96//233 148//233 97//233
+f 96//234 147//234 148//234
+f 125//235 121//235 123//235
+f 113//236 115//236 117//236
+f 113//237 117//237 119//237
+f 131//238 127//238 129//238
+f 137//239 133//239 135//239
+f 107//240 111//240 113//240
+f 141//241 137//241 139//241
+f 143//242 131//242 133//242
+f 143//243 127//243 131//243
+f 143//244 133//244 137//244
+f 143//245 137//245 141//245
+f 145//246 125//246 127//246
+f 145//247 121//247 125//247
+f 145//248 127//248 143//248
+f 101//249 103//249 105//249
+f 101//250 105//250 107//250
+f 101//251 107//251 113//251
+f 99//252 119//252 121//252
+f 99//253 113//253 119//253
+f 99//254 101//254 113//254
+f 147//255 121//255 145//255
+f 95//256 99//256 121//256
+f 95//257 121//257 147//257
+f 96//258 95//258 147//258
+f 109//259 111//259 107//259
+f 122//260 126//260 124//260
+f 116//261 114//261 118//261
+f 118//262 114//262 120//262
+f 128//263 132//263 130//263
+f 134//264 138//264 136//264
+f 112//265 108//265 114//265
+f 138//266 142//266 140//266
+f 132//267 144//267 134//267
+f 128//268 144//268 132//268
+f 134//269 144//269 138//269
+f 138//270 144//270 142//270
+f 126//271 146//271 128//271
+f 122//272 146//272 126//272
+f 128//273 146//273 144//273
+f 104//274 102//274 106//274
+f 106//275 102//275 108//275
+f 108//276 102//276 114//276
+f 120//277 100//277 122//277
+f 114//278 100//278 120//278
+f 102//279 100//279 114//279
+f 122//280 148//280 146//280
+f 100//281 98//281 122//281
+f 122//282 98//282 148//282
+f 98//283 97//283 148//283
+f 112//284 110//284 108//284
+o Extrude003
+usemtl color_000000
+v 13.99657 -14.931212 0.0
+v 12.55459 -13.489234 0.0
+v 12.55459 -13.489234 3.0
+v 13.99657 -14.931212 3.0
+v 13.589406 -14.895939 0.0
+v 13.589406 -14.895939 3.0
+v 13.232218 -14.754826 0.0
+v 13.232218 -14.754826 3.0
+v 12.925007 -14.507879 0.0
+v 12.925007 -14.507879 3.0
+v 12.70746 -14.224187 0.0
+v 12.70746 -14.224187 3.0
+v 12.583988 -13.884639 0.0
+v 12.583988 -13.884639 3.0
+vn 0.7071065306663513 0.7071070075035095 0.0
+vn 0.7071065306663513 0.7071070075035095 -0.0
+vn -0.08630910515785217 -0.9962684512138367 0.0
+vn -0.08630910515785217 -0.9962684512138367 0.0
+vn -0.367432177066803 -0.9300503134727478 0.0
+vn -0.367432177066803 -0.9300503134727478 0.0
+vn -0.6265150904655457 -0.7794093489646912 0.0
+vn -0.6265150904655457 -0.7794093489646912 0.0
+vn -0.7935402393341064 -0.6085178852081299 0.0
+vn -0.7935402393341064 -0.6085178852081299 0.0
+vn -0.9397932291030884 -0.34174346923828125 0.0
+vn -0.9397932291030884 -0.34174346923828125 0.0
+vn -0.9972474575042725 -0.0741443857550621 0.0
+vn -0.9972474575042725 -0.0741443857550621 0.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+f 149//285 150//285 151//285
+f 149//286 151//286 152//286
+f 153//287 149//287 152//287
+f 153//288 152//288 154//288
+f 155//289 154//289 156//289
+f 155//290 153//290 154//290
+f 157//291 156//291 158//291
+f 157//292 155//292 156//292
+f 159//293 157//293 158//293
+f 159//294 158//294 160//294
+f 161//295 160//295 162//295
+f 161//296 159//296 160//296
+f 150//297 162//297 151//297
+f 150//298 161//298 162//298
+f 157//299 149//299 153//299
+f 157//300 153//300 155//300
+f 161//301 157//301 159//301
+f 150//302 149//302 157//302
+f 150//303 157//303 161//303
+f 152//304 158//304 154//304
+f 154//305 158//305 156//305
+f 158//306 162//306 160//306
+f 152//307 151//307 158//307
+f 158//308 151//308 162//308
diff --git a/asset/icons/icon_nosound.svg b/asset/icons/icon_nosound.svg
new file mode 100644
index 0000000..e4fe9a0
--- /dev/null
+++ b/asset/icons/icon_nosound.svg
@@ -0,0 +1,58 @@
+
+
diff --git a/asset/icons/icon_pan.svg b/asset/icons/icon_pan.svg
index 283ea2c..6285e50 100644
--- a/asset/icons/icon_pan.svg
+++ b/asset/icons/icon_pan.svg
@@ -19,7 +19,7 @@
image/svg+xml
-
+
@@ -37,7 +37,7 @@
id="namedview10"
showgrid="false"
inkscape:zoom="1.7451937"
- inkscape:cx="259.11091"
+ inkscape:cx="260.25691"
inkscape:cy="-18.435883"
inkscape:window-x="0"
inkscape:window-y="27"
@@ -47,12 +47,12 @@
id="defs2" />
diff --git a/asset/icons/icon_sound.FCStd b/asset/icons/icon_sound.FCStd
new file mode 100644
index 0000000..e650a09
Binary files /dev/null and b/asset/icons/icon_sound.FCStd differ
diff --git a/asset/icons/icon_sound.obj b/asset/icons/icon_sound.obj
new file mode 100644
index 0000000..dd1506c
--- /dev/null
+++ b/asset/icons/icon_sound.obj
@@ -0,0 +1,637 @@
+# FreeCAD v0.19 build24291 (Git) Arch module
+# http://www.freecadweb.org
+mtllib icon_sound.mtl
+o Extrude
+usemtl color_000000
+v 16.233683 -14.491642 0.0
+v 16.233683 -10.496433 0.0
+v 16.233683 -10.496433 3.0
+v 16.233683 -14.491642 3.0
+v 16.233683 -14.584246 0.0
+v 16.233683 -14.584246 3.0
+v 16.139608 -15.039917 0.0
+v 16.139608 -15.039917 3.0
+v 15.963219 -15.436791 0.0
+v 15.963219 -15.436791 3.0
+v 15.704515 -15.774871 0.0
+v 15.704515 -15.774871 3.0
+v 15.678058 -15.774871 0.0
+v 15.678058 -15.774871 3.0
+v 15.341449 -16.074732 0.0
+v 15.341449 -16.074732 3.0
+v 14.966621 -16.268761 0.0
+v 14.966621 -16.268761 3.0
+v 14.553578 -16.356955 0.0
+v 14.553578 -16.356955 3.0
+v 14.540349 -16.356955 0.0
+v 14.540349 -16.356955 3.0
+v 14.115545 -16.340786 0.0
+v 14.115545 -16.340786 3.0
+v 13.740719 -16.204084 0.0
+v 13.740719 -16.204084 3.0
+v 13.41587 -15.94685 0.0
+v 13.41587 -15.94685 3.0
+v 13.180684 -15.63229 0.0
+v 13.180684 -15.63229 3.0
+v 13.057212 -15.253054 0.0
+v 13.057212 -15.253054 3.0
+v 13.045453 -14.809142 0.0
+v 13.045453 -14.809142 3.0
+v 13.133648 -14.403447 0.0
+v 13.133648 -14.403447 3.0
+v 13.310037 -14.033031 0.0
+v 13.310037 -14.033031 3.0
+v 13.57462 -13.697892 0.0
+v 13.57462 -13.697892 3.0
+v 13.990113 -13.371246 0.0
+v 13.990113 -13.371246 3.0
+v 14.265721 -13.241405 0.0
+v 14.265721 -13.241405 3.0
+v 14.553578 -13.168725 0.0
+v 14.553578 -13.168725 3.0
+v 14.910766 -13.168725 0.0
+v 14.910766 -13.168725 3.0
+v 14.910766 -11.845809 0.0
+v 14.910766 -11.845809 3.0
+v 12.264933 -11.845809 0.0
+v 12.264933 -11.845809 3.0
+v 12.264933 -16.343725 0.0
+v 12.264933 -16.343725 3.0
+v 12.227233 -16.645351 0.0
+v 12.227233 -16.645351 3.0
+v 12.082372 -16.946976 0.0
+v 12.082372 -16.946976 3.0
+v 11.926267 -17.148058 0.0
+v 11.926267 -17.148058 3.0
+v 11.722536 -17.349142 0.0
+v 11.722536 -17.349142 3.0
+v 11.709308 -17.38883 0.0
+v 11.709308 -17.38883 3.0
+v 11.375639 -17.653414 0.0
+v 11.375639 -17.653414 3.0
+v 11.009632 -17.829802 0.0
+v 11.009632 -17.829802 3.0
+v 10.611286 -17.917995 0.0
+v 10.611286 -17.917995 3.0
+v 10.598058 -17.917995 0.0
+v 10.598058 -17.917995 3.0
+v 10.167375 -17.904768 0.0
+v 10.167375 -17.904768 3.0
+v 9.792548 -17.776884 0.0
+v 9.792548 -17.776884 3.0
+v 9.473578 -17.534349 0.0
+v 9.473578 -17.534349 3.0
+v 9.232513 -17.21685 0.0
+v 9.232513 -17.21685 3.0
+v 9.109041 -16.846434 0.0
+v 9.109041 -16.846434 3.0
+v 9.103162 -16.4231 0.0
+v 9.103162 -16.4231 3.0
+v 9.184006 -16.001236 0.0
+v 9.184006 -16.001236 3.0
+v 9.355985 -15.61759 0.0
+v 9.355985 -15.61759 3.0
+v 9.619099 -15.272162 0.0
+v 9.619099 -15.272162 3.0
+v 9.645557 -15.258934 0.0
+v 9.645557 -15.258934 3.0
+v 10.049292 -14.945354 0.0
+v 10.049292 -14.945354 3.0
+v 10.31755 -14.813062 0.0
+v 10.31755 -14.813062 3.0
+v 10.598058 -14.729767 0.0
+v 10.598058 -14.729767 3.0
+v 10.611286 -14.729767 0.0
+v 10.611286 -14.729767 3.0
+v 11.206599 -14.756226 0.0
+v 11.206599 -14.756226 3.0
+v 11.206599 -10.522892 0.0
+v 11.206599 -10.522892 3.0
+v 11.253823 -10.106966 0.0
+v 11.253823 -10.106966 3.0
+v 11.324765 -9.956154 0.0
+v 11.324765 -9.956154 3.0
+v 11.425388 -9.844931 0.0
+v 11.425388 -9.844931 3.0
+v 11.560803 -9.769015 0.0
+v 11.560803 -9.769015 3.0
+v 11.696816 -9.735796 0.0
+v 11.696816 -9.735796 3.0
+v 11.854828 -9.729142 0.0
+v 11.854828 -9.729142 3.0
+v 15.439933 -9.729142 0.0
+v 15.439933 -9.729142 3.0
+v 15.810693 -9.785078 0.0
+v 15.810693 -9.785078 3.0
+v 15.991076 -9.882555 0.0
+v 15.991076 -9.882555 3.0
+v 16.113678 -10.01575 0.0
+v 16.113678 -10.01575 3.0
+v 16.189116 -10.175891 0.0
+v 16.189116 -10.175891 3.0
+v 16.22254 -10.325392 0.0
+v 16.22254 -10.325392 3.0
+vn 1.0 0.0 0.0
+vn 1.0 0.0 0.0
+vn 1.0 0.0 0.0
+vn 1.0 0.0 0.0
+vn 0.9793466925621033 -0.20218807458877563 0.0
+vn 0.9793466925621033 -0.20218807458877563 0.0
+vn 0.913810670375824 -0.4061405062675476 0.0
+vn 0.913810670375824 -0.4061405062675476 0.0
+vn 0.794162929058075 -0.6077048778533936 0.0
+vn 0.794162929058075 -0.6077048778533936 0.0
+vn 0.0 -1.0 0.0
+vn 0.0 -1.0 0.0
+vn 0.6651726961135864 -0.7466895580291748 0.0
+vn 0.6651726961135864 -0.7466895580291748 0.0
+vn 0.45970815420150757 -0.8880700469017029 0.0
+vn 0.45970815420150757 -0.8880700469017029 0.0
+vn 0.20881523191928864 -0.977955162525177 0.0
+vn 0.20881523191928864 -0.977955162525177 0.0
+vn 0.0 -1.0 0.0
+vn 0.0 -1.0 0.0
+vn -0.03803378716111183 -0.9992763996124268 0.0
+vn -0.03803378716111183 -0.9992763996124268 0.0
+vn -0.3426307439804077 -0.9394701719284058 0.0
+vn -0.3426307439804077 -0.9394701719284058 0.0
+vn -0.6207954287528992 -0.7839725613594055 0.0
+vn -0.6207954287528992 -0.7839725613594055 0.0
+vn -0.8008965253829956 -0.5988027453422546 0.0
+vn -0.8008965253829956 -0.5988027453422546 0.0
+vn -0.9508714079856873 -0.30958592891693115 0.0
+vn -0.9508714079856873 -0.30958592891693115 0.0
+vn -0.9996493458747864 -0.026479780673980713 0.0
+vn -0.9996493458747864 -0.026479780673980713 0.0
+vn -0.9771762490272522 0.21243032813072205 0.0
+vn -0.9771762490272522 0.21243032813072205 0.0
+vn -0.9028606414794922 0.4299333095550537 0.0
+vn -0.9028606414794922 0.4299333095550537 0.0
+vn -0.7848819494247437 0.6196452975273132 0.0
+vn -0.7848819494247437 0.6196452975273132 0.0
+vn -0.6180403828620911 0.7861464023590088 0.0
+vn -0.6180403828620911 0.7861464023590088 0.0
+vn -0.42618367075920105 0.9046366810798645 0.0
+vn -0.42618367075920105 0.9046366810798645 0.0
+vn -0.24480240046977997 0.9695729613304138 0.0
+vn -0.24480240046977997 0.9695729613304138 0.0
+vn 0.0 1.0 0.0
+vn 0.0 1.0 -0.0
+vn -1.0 0.0 0.0
+vn -1.0 0.0 0.0
+vn 0.0 -1.0 0.0
+vn 0.0 -1.0 0.0
+vn 1.0 0.0 0.0
+vn 1.0 0.0 0.0
+vn 0.9922793507575989 -0.12402315437793732 0.0
+vn 0.9922793507575989 -0.12402315437793732 0.0
+vn 0.9014279842376709 -0.4329291880130768 0.0
+vn 0.9014279842376709 -0.4329291880130768 0.0
+vn 0.7899082899093628 -0.6132250428199768 0.0
+vn 0.7899082899093628 -0.6132250428199768 0.0
+vn 0.7024691104888916 -0.7117142081260681 0.0
+vn 0.7024691104888916 -0.7117142081260681 0.0
+vn 0.9486901760101318 -0.31620725989341736 0.0
+vn 0.9486901760101318 -0.31620725989341736 0.0
+vn 0.6213223338127136 -0.7835550904273987 0.0
+vn 0.6213223338127136 -0.7835550904273987 0.0
+vn 0.43413978815078735 -0.900845468044281 0.0
+vn 0.43413978815078735 -0.900845468044281 0.0
+vn 0.21616561710834503 -0.9763566851615906 0.0
+vn 0.21616561710834503 -0.9763566851615906 0.0
+vn 0.0 -1.0 0.0
+vn 0.0 -1.0 0.0
+vn -0.030698275193572044 -0.9995287656784058 0.0
+vn -0.030698275193572044 -0.9995287656784058 0.0
+vn -0.3229050636291504 -0.9464313983917236 0.0
+vn -0.3229050636291504 -0.9464313983917236 0.0
+vn -0.6052693724632263 -0.7960207462310791 0.0
+vn -0.6052693724632263 -0.7960207462310791 0.0
+vn -0.7964453101158142 -0.604710578918457 0.0
+vn -0.7964453101158142 -0.604710578918457 0.0
+vn -0.9486833214759827 -0.3162277638912201 0.0
+vn -0.9486833214759827 -0.3162277638912201 0.0
+vn -0.9999036192893982 -0.01388698723167181 0.0
+vn -0.9999036192893982 -0.01388698723167181 0.0
+vn -0.9821286797523499 0.18821047246456146 0.0
+vn -0.9821286797523499 0.18821047246456146 0.0
+vn -0.9125096201896667 0.40905535221099854 0.0
+vn -0.9125096201896667 0.40905535221099854 0.0
+vn -0.7955081462860107 0.6059427857398987 0.0
+vn -0.7955081462860107 0.6059427857398987 0.0
+vn -0.4471878111362457 0.8944401144981384 0.0
+vn -0.4471878111362457 0.8944401144981384 0.0
+vn -0.6134102940559387 0.789764404296875 0.0
+vn -0.6134102940559387 0.789764404296875 0.0
+vn -0.44229283928871155 0.8968707323074341 0.0
+vn -0.44229283928871155 0.8968707323074341 0.0
+vn -0.2846581041812897 0.9586291313171387 0.0
+vn -0.2846581041812897 0.9586291313171387 0.0
+vn 0.0 1.0 0.0
+vn 0.0 1.0 -0.0
+vn 0.044401250779628754 0.9990137815475464 0.0
+vn 0.044401250779628754 0.9990137815475464 -0.0
+vn -1.0 0.0 0.0
+vn -1.0 0.0 0.0
+vn -0.9936160445213318 0.11281470954418182 0.0
+vn -0.9936160445213318 0.11281470954418182 0.0
+vn -0.9048845767974854 0.4256570637226105 0.0
+vn -0.9048845767974854 0.4256570637226105 0.0
+vn -0.7415603399276733 0.670886218547821 0.0
+vn -0.7415603399276733 0.670886218547821 0.0
+vn -0.4890097975730896 0.8722782731056213 0.0
+vn -0.4890097975730896 0.8722782731056213 0.0
+vn -0.23726239800453186 0.9714455604553223 0.0
+vn -0.23726239800453186 0.9714455604553223 0.0
+vn -0.04207223653793335 0.9991145730018616 0.0
+vn -0.04207223653793335 0.9991145730018616 0.0
+vn 0.0 1.0 0.0
+vn 0.0 1.0 -0.0
+vn 0.14917992055416107 0.9888100624084473 0.0
+vn 0.14917992055416107 0.9888100624084473 -0.0
+vn 0.4754142761230469 0.8797619938850403 -0.0
+vn 0.4754142761230469 0.8797619938850403 0.0
+vn 0.7357572913169861 0.6772454380989075 -0.0
+vn 0.7357572913169861 0.6772454380989075 0.0
+vn 0.9046509265899658 0.4261535108089447 -0.0
+vn 0.9046509265899658 0.4261535108089447 0.0
+vn 0.975907027721405 0.2181866317987442 -0.0
+vn 0.975907027721405 0.2181866317987442 0.0
+vn 0.9978846907615662 0.06500855833292007 -0.0
+vn 0.9978846907615662 0.06500855833292007 0.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 0.0 1.0
+f 1//1 2//1 3//1
+f 1//2 3//2 4//2
+f 5//3 1//3 4//3
+f 5//4 4//4 6//4
+f 7//5 5//5 6//5
+f 7//6 6//6 8//6
+f 9//7 8//7 10//7
+f 9//8 7//8 8//8
+f 11//9 10//9 12//9
+f 11//10 9//10 10//10
+f 13//11 11//11 12//11
+f 13//12 12//12 14//12
+f 15//13 13//13 14//13
+f 15//14 14//14 16//14
+f 17//15 16//15 18//15
+f 17//16 15//16 16//16
+f 19//17 18//17 20//17
+f 19//18 17//18 18//18
+f 21//19 19//19 20//19
+f 21//20 20//20 22//20
+f 23//21 21//21 22//21
+f 23//22 22//22 24//22
+f 25//23 24//23 26//23
+f 25//24 23//24 24//24
+f 27//25 26//25 28//25
+f 27//26 25//26 26//26
+f 29//27 27//27 28//27
+f 29//28 28//28 30//28
+f 31//29 30//29 32//29
+f 31//30 29//30 30//30
+f 33//31 32//31 34//31
+f 33//32 31//32 32//32
+f 35//33 33//33 34//33
+f 35//34 34//34 36//34
+f 37//35 36//35 38//35
+f 37//36 35//36 36//36
+f 39//37 38//37 40//37
+f 39//38 37//38 38//38
+f 41//39 39//39 40//39
+f 41//40 40//40 42//40
+f 43//41 42//41 44//41
+f 43//42 41//42 42//42
+f 45//43 44//43 46//43
+f 45//44 43//44 44//44
+f 47//45 45//45 46//45
+f 47//46 46//46 48//46
+f 49//47 47//47 48//47
+f 49//48 48//48 50//48
+f 51//49 49//49 50//49
+f 51//50 50//50 52//50
+f 53//51 51//51 52//51
+f 53//52 52//52 54//52
+f 55//53 53//53 54//53
+f 55//54 54//54 56//54
+f 57//55 56//55 58//55
+f 57//56 55//56 56//56
+f 59//57 58//57 60//57
+f 59//58 57//58 58//58
+f 61//59 60//59 62//59
+f 61//60 59//60 60//60
+f 63//61 61//61 62//61
+f 63//62 62//62 64//62
+f 65//63 63//63 64//63
+f 65//64 64//64 66//64
+f 67//65 66//65 68//65
+f 67//66 65//66 66//66
+f 69//67 68//67 70//67
+f 69//68 67//68 68//68
+f 71//69 69//69 70//69
+f 71//70 70//70 72//70
+f 73//71 71//71 72//71
+f 73//72 72//72 74//72
+f 75//73 74//73 76//73
+f 75//74 73//74 74//74
+f 77//75 76//75 78//75
+f 77//76 75//76 76//76
+f 79//77 77//77 78//77
+f 79//78 78//78 80//78
+f 81//79 80//79 82//79
+f 81//80 79//80 80//80
+f 83//81 82//81 84//81
+f 83//82 81//82 82//82
+f 85//83 83//83 84//83
+f 85//84 84//84 86//84
+f 87//85 86//85 88//85
+f 87//86 85//86 86//86
+f 89//87 88//87 90//87
+f 89//88 87//88 88//88
+f 91//89 89//89 90//89
+f 91//90 90//90 92//90
+f 93//91 91//91 92//91
+f 93//92 92//92 94//92
+f 95//93 94//93 96//93
+f 95//94 93//94 94//94
+f 97//95 96//95 98//95
+f 97//96 95//96 96//96
+f 99//97 97//97 98//97
+f 99//98 98//98 100//98
+f 101//99 99//99 100//99
+f 101//100 100//100 102//100
+f 103//101 101//101 102//101
+f 103//102 102//102 104//102
+f 105//103 103//103 104//103
+f 105//104 104//104 106//104
+f 107//105 106//105 108//105
+f 107//106 105//106 106//106
+f 109//107 108//107 110//107
+f 109//108 107//108 108//108
+f 111//109 110//109 112//109
+f 111//110 109//110 110//110
+f 113//111 112//111 114//111
+f 113//112 111//112 112//112
+f 115//113 114//113 116//113
+f 115//114 113//114 114//114
+f 117//115 115//115 116//115
+f 117//116 116//116 118//116
+f 119//117 117//117 118//117
+f 119//118 118//118 120//118
+f 121//119 120//119 122//119
+f 121//120 119//120 120//120
+f 123//121 122//121 124//121
+f 123//122 121//122 122//122
+f 125//123 124//123 126//123
+f 125//124 123//124 124//124
+f 127//125 126//125 128//125
+f 127//126 125//126 126//126
+f 2//127 128//127 3//127
+f 2//128 127//128 128//128
+f 9//129 11//129 13//129
+f 21//130 17//130 19//130
+f 27//131 21//131 23//131
+f 27//132 23//132 25//132
+f 65//133 61//133 63//133
+f 53//134 55//134 57//134
+f 53//135 57//135 59//135
+f 71//136 67//136 69//136
+f 31//137 27//137 29//137
+f 31//138 21//138 27//138
+f 47//139 1//139 5//139
+f 47//140 5//140 7//140
+f 33//141 17//141 21//141
+f 33//142 21//142 31//142
+f 35//143 15//143 17//143
+f 35//144 17//144 33//144
+f 43//145 45//145 47//145
+f 43//146 47//146 7//146
+f 41//147 7//147 9//147
+f 41//148 43//148 7//148
+f 41//149 9//149 13//149
+f 37//150 13//150 15//150
+f 37//151 15//151 35//151
+f 39//152 41//152 13//152
+f 39//153 13//153 37//153
+f 77//154 73//154 75//154
+f 49//155 1//155 47//155
+f 2//156 1//156 49//156
+f 81//157 77//157 79//157
+f 119//158 121//158 123//158
+f 119//159 123//159 125//159
+f 119//160 125//160 127//160
+f 83//161 77//161 81//161
+f 83//162 67//162 71//162
+f 83//163 71//163 73//163
+f 83//164 73//164 77//164
+f 85//165 61//165 65//165
+f 85//166 65//166 67//166
+f 85//167 67//167 83//167
+f 117//168 2//168 49//168
+f 117//169 119//169 127//169
+f 117//170 127//170 2//170
+f 95//171 101//171 53//171
+f 95//172 97//172 99//172
+f 95//173 99//173 101//173
+f 93//174 53//174 59//174
+f 93//175 59//175 61//175
+f 93//176 95//176 53//176
+f 87//177 61//177 85//177
+f 91//178 93//178 61//178
+f 91//179 61//179 87//179
+f 89//180 91//180 87//180
+f 115//181 49//181 51//181
+f 115//182 117//182 49//182
+f 115//183 51//183 103//183
+f 105//184 113//184 115//184
+f 105//185 115//185 103//185
+f 111//186 113//186 105//186
+f 107//187 111//187 105//187
+f 109//188 111//188 107//188
+f 51//189 53//189 101//189
+f 101//190 103//190 51//190
+f 12//191 10//191 14//191
+f 18//192 22//192 20//192
+f 22//193 28//193 24//193
+f 24//194 28//194 26//194
+f 62//195 66//195 64//195
+f 56//196 54//196 58//196
+f 58//197 54//197 60//197
+f 68//198 72//198 70//198
+f 28//199 32//199 30//199
+f 22//200 32//200 28//200
+f 4//201 48//201 6//201
+f 6//202 48//202 8//202
+f 18//203 34//203 22//203
+f 22//204 34//204 32//204
+f 16//205 36//205 18//205
+f 18//206 36//206 34//206
+f 46//207 44//207 48//207
+f 48//208 44//208 8//208
+f 8//209 42//209 10//209
+f 44//210 42//210 8//210
+f 10//211 42//211 14//211
+f 14//212 38//212 16//212
+f 16//213 38//213 36//213
+f 42//214 40//214 14//214
+f 14//215 40//215 38//215
+f 74//216 78//216 76//216
+f 4//217 50//217 48//217
+f 4//218 3//218 50//218
+f 78//219 82//219 80//219
+f 122//220 120//220 124//220
+f 124//221 120//221 126//221
+f 126//222 120//222 128//222
+f 78//223 84//223 82//223
+f 68//224 84//224 72//224
+f 72//225 84//225 74//225
+f 74//226 84//226 78//226
+f 62//227 86//227 66//227
+f 66//228 86//228 68//228
+f 68//229 86//229 84//229
+f 3//230 118//230 50//230
+f 120//231 118//231 128//231
+f 128//232 118//232 3//232
+f 102//233 96//233 54//233
+f 98//234 96//234 100//234
+f 100//235 96//235 102//235
+f 54//236 94//236 60//236
+f 60//237 94//237 62//237
+f 96//238 94//238 54//238
+f 62//239 88//239 86//239
+f 94//240 92//240 62//240
+f 62//241 92//241 88//241
+f 92//242 90//242 88//242
+f 50//243 116//243 52//243
+f 118//244 116//244 50//244
+f 52//245 116//245 104//245
+f 114//246 106//246 116//246
+f 116//247 106//247 104//247
+f 114//248 112//248 106//248
+f 112//249 108//249 106//249
+f 112//250 110//250 108//250
+f 54//251 52//251 102//251
+f 104//252 102//252 52//252
diff --git a/asset/icons/icon_sound.svg b/asset/icons/icon_sound.svg
new file mode 100644
index 0000000..6827310
--- /dev/null
+++ b/asset/icons/icon_sound.svg
@@ -0,0 +1,58 @@
+
+
diff --git a/asset/sounds/book_close.ogg b/asset/sounds/book_close.ogg
new file mode 100644
index 0000000..c520928
Binary files /dev/null and b/asset/sounds/book_close.ogg differ
diff --git a/asset/sounds/book_flip.ogg b/asset/sounds/book_flip.ogg
new file mode 100644
index 0000000..f229a27
Binary files /dev/null and b/asset/sounds/book_flip.ogg differ
diff --git a/asset/sounds/book_open.ogg b/asset/sounds/book_open.ogg
new file mode 100644
index 0000000..acdd272
Binary files /dev/null and b/asset/sounds/book_open.ogg differ
diff --git a/codetower-23.blend b/codetower-23.blend
index a351d1c..957cdb1 100644
Binary files a/codetower-23.blend and b/codetower-23.blend differ
diff --git a/ct.py b/ct.py
index f2ef1e9..5196e0f 100644
--- a/ct.py
+++ b/ct.py
@@ -69,28 +69,16 @@ color_text_red = (0.799, 0.031, 0.038, 1)
color_text_orange = (0.799, 0.176, 0.054, 1)
color_text_yellow = (0.799, 0.617, 0.021, 1)
-color_cmd = (0.8, 0.8, 0.8, 1) # Blanc
-color_cmd_hl = (0.8, 0.619, 0.021, 1) # Jaune
-# color_link = (0.024, 0.006, 0.8, 1) # Bleu
-# color_link_hl = (0.8, 0.005, 0.315, 1) # Majenta
-
-color_link = (0.799, 0.617, 0.021, 1) # Jaune
-# color_link = (0.021, 0.257, 0.267, 1) # Vert fonçé
-color_link_hl = (0.8, 0.8, 0.8, 1) # Blanc
-
-color_doc_chap = (0.153, 0.116, 0.105, 1) # WoodDark
-color_doc_fct = (0.326, 0.101, 0.0592, 1) # BrownDark
-# color_doc_fct = (0.577, 0.233, 0.115, 1) # Brown
-# color_doc_hl = (0.799, 0.617, 0.021, 1) # Yellow
-color_doc_hl = (0.13, 0.254, 0.407, 1) # BlueDark
-color_doc_activate = (1.0, 0.025, 0.116, 1) # Red
-
# Sounds
audiodev = aud.Device()
snd_click = aud.Sound('asset/sounds/click.ogg')
sndbuff_click = aud.Sound.cache(snd_click)
snd_construct = aud.Sound('asset/sounds/click_construct.ogg')
sndbuff_construct = aud.Sound.cache(snd_construct)
+snd_book_open = aud.Sound('asset/sounds/book_open.ogg')
+sndbuff_book_open = aud.Sound.cache(snd_book_open)
+snd_book_close = aud.Sound('asset/sounds/book_close.ogg')
+sndbuff_book_close = aud.Sound.cache(snd_book_close)
# UPBGE constants
JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED
@@ -107,7 +95,7 @@ def cmd_tower_construct(cont):
obj = cont.owner
obj_Hl= scene.objects[obj.name+"-Hl"]
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and scene.objects['Terrain']['manip_mode']==0:
- audiodev.play(sndbuff_construct)
+ sound_play (sndbuff_construct)
if scene.objects['Terrain']['construct_mode']==True:
scene.objects['Terrain']['construct_mode']=False
obj.worldScale=[1, 1, 1]
@@ -126,6 +114,7 @@ def cmd_tower_construct(cont):
scene.objects['Tower_construc_mode'].setVisible(True,False)
scene.objects['Tower_construc_mode'].color = color_cmd
text_info ("Tower position : ")
+ scene.objects['Cmd_text']['Text']= ""
###############################################################################
# User interface : texte info et compteurs
@@ -246,6 +235,7 @@ def scn_terrain_mo (cont):
scene.objects['Tower_construc_mode'].worldPosition.y=round(hitPosition.y)
scene.objects['Tower_construc_mode'].worldPosition.z=0.2
text_info ("Tower position : "+str(round(hitPosition.x))+","+str(round(hitPosition.y)))
+ scene.objects['Cmd_text']['Text']= ""
# Affiche les informations sur la tour
# FIXME : High-light sur la tower sélectionnée
@@ -268,6 +258,7 @@ def terrain_init (cont):
# Cacher la bannière de fin
scene.objects['End'].setVisible(False,True)
scene.objects['End']['timer']=0
+ scene.objects['Doc'].setVisible(False,True)
# Pile des draws
scene.objects['Terrain']['draw_process']=False
@@ -301,7 +292,7 @@ def terrain_init (cont):
# Mise en route et pause du cycle
def terrain_run ():
- audiodev.play(sndbuff_click)
+ sound_play (sndbuff_click)
# Pause
if scene.objects['Terrain']['run'] == True:
@@ -363,7 +354,7 @@ def terrain_run ():
# Arrêt et réinitialisation du cycle
def terrain_stop ():
- audiodev.play(sndbuff_click)
+ sound_play (sndbuff_click)
# Arrêt des threads utilisateurs
scene.objects['Terrain']['run']=False
@@ -404,9 +395,10 @@ def terrain_end ():
# Affichage des résultats
if scene.objects['End']['timer']== 0:
scene.objects['Terrain']['manip_mode']=9 # Fenêtre modale
- scene.objects['Camera'].worldPosition.x = scene.objects['Camera']['init_lx']
- scene.objects['Camera'].worldPosition.y = scene.objects['Camera']['init_ly']
- scene.objects['Camera'].worldPosition.z = scene.objects['Camera']['init_lz']
+ manip_reset()
+ # scene.objects['Camera'].worldPosition.x = scene.objects['Camera']['init_lx']
+ # scene.objects['Camera'].worldPosition.y = scene.objects['Camera']['init_ly']
+ # scene.objects['Camera'].worldPosition.z = scene.objects['Camera']['init_lz']
# Wave
if scene.objects['Points']['wave']== scene.objects['Terrain']['nb_waves'] and scene.objects['Points']['lifes'] > 0:
@@ -447,7 +439,7 @@ def terrain_end ():
# Vitesse du jeu
def terrain_speed (obj):
- audiodev.play(sndbuff_click)
+ sound_play (sndbuff_click)
speed_mode=[0.25, 0.5, 1,2,4,10]
speed_mode_txt=["1/4", "1/2", "1", "2","4","10"]
i=speed_mode.index(scene.objects['Terrain']['speed'])
@@ -480,7 +472,7 @@ def terrain_speed (obj):
with open("ct_config.xml", "wb") as f:
f.write(buffer_xml)
-# Page de fin
+# Highlight de la page de fin
def endbanner_hl(cont):
if cont.sensors['MO'].status == JUST_ACTIVATED:
if scene.objects['Mouse_main']['mouse_graphic']:
@@ -497,26 +489,74 @@ def endbanner_hl(cont):
scene.objects['Endbanner_points'].color = color_black
scene.objects['Endbanner_ok'].color = color_black
-def endbanner_close(cont):
+# Fermer la page de fin
+def endbanner_close():
+ print("endbanner_close")
+ sound_play (sndbuff_click)
+ scene.objects['Terrain']['manip_mode']=0
+ scene.objects['End'].setVisible(False,True)
+ scene.objects['End'].worldPosition = [20, 1.53623, -0.892838] # Position dans Blender [20, 1.53623, -0.892838]
+ scene.objects['Endbanner'].color = [0.592, 0.68, 0.407, 1]
+ scene.objects['Endbanner_wave'].color = color_black
+ scene.objects['Endbanner_points'].color = color_black
+ scene.objects['End']['timer']= 0
+
+# Click pour fermer la page de fin
+def endbanner_close_click(cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
- audiodev.play(sndbuff_click)
- scene.objects['Terrain']['manip_mode']=0
- scene.objects['End'].setVisible(False,True)
- scene.objects['End'].worldPosition = [20, 1.53623, -0.892838] # Position dans Blender [20, 1.53623, -0.892838]
- scene.objects['Endbanner'].color = [0.592, 0.68, 0.407, 1]
- scene.objects['Endbanner_wave'].color = color_black
- scene.objects['Endbanner_points'].color = color_black
- scene.objects['End']['timer']= 0
+ endbanner_close()
+
+###############################################################################
+# Sons
+###############################################################################
+
+def sound_play (sound):
+ if scene.objects['Commands']['sound']:
+ audiodev.play(sound)
+
+def sound_set ():
+ scene.objects['NoSound-cmd'].suspendPhysics()
+ scene.objects['NoSound-cmd'].setVisible(False,False)
+ scene.objects['NoSound-cmd-Hl'].setVisible(False,False)
+ scene.objects['Sound-cmd']. restorePhysics()
+ scene.objects['Sound-cmd-Hl'].setVisible(True,False)
+ scene.objects['Commands']['sound']=True
+ scene.objects['Cmd_text']['Text']= "Unset sound"
+ scene.objects['Cmd_text'].setVisible(True,False)
+
+ # Maj du fichier de config (sound : data/config/sound -> [0][1].text)
+ ct_config_tree[0][1].text=str(scene.objects['Commands']['sound'])
+ buffer_xml = ET.tostring(ct_config_tree)
+ with open("ct_config.xml", "wb") as f:
+ f.write(buffer_xml)
+
+def sound_unset ():
+ scene.objects['Sound-cmd'].suspendPhysics()
+ scene.objects['Sound-cmd'].setVisible(False,False)
+ scene.objects['Sound-cmd-Hl'].setVisible(False,False)
+ scene.objects['NoSound-cmd']. restorePhysics()
+ scene.objects['NoSound-cmd-Hl'].setVisible(True,False)
+ scene.objects['Commands']['sound']=False
+ scene.objects['Cmd_text']['Text']= "Set sound"
+ scene.objects['Cmd_text'].setVisible(True,False)
+
+ # Maj du fichier de config (sound : data/config/sound -> [0][1].text)
+ ct_config_tree[0][1].text=str(scene.objects['Commands']['sound'])
+ buffer_xml = ET.tostring(ct_config_tree)
+ with open("ct_config.xml", "wb") as f:
+ f.write(buffer_xml)
###############################################################################
# Commandes
###############################################################################
+color_cmd = (0.8, 0.8, 0.8, 1) # Blanc
+color_cmd_hl = (0.8, 0.619, 0.021, 1) # Jaune
+
# Init
def cmd_init():
- # scene.objects['Terrain']['run']=False
- # UI : Commandes
+ # UI : Commands
scene.objects['Run-Hl'].setVisible(False,False)
scene.objects['Pause'].setVisible(False,False)
scene.objects['Pause'].suspendPhysics()
@@ -529,7 +569,15 @@ def cmd_init():
scene.objects['About-cmd-Hl'].setVisible(False,False)
scene.objects['About'].setVisible(False,True)
- # UI : Texte, ...
+ # UI : Sounds
+ # Read config (sound : data/config/sound -> [0][1].text)
+ if ct_config_tree[0][1].text == "True":
+ sound_set ()
+ else:
+ sound_unset ()
+ audiodev.unlock()
+
+ # UI : Text, ...
scene.objects['Cmd_text'].setVisible(False,False)
scene.objects['Map_text'].setVisible(False,False)
scene.objects['Text_info-1'].setVisible(False,False)
@@ -551,23 +599,21 @@ def cmd_init():
scene.objects['Mouse_main'].setVisible(False,False)
bge.render.showMouse(True)
- # scene.objects['Raz-vue-Hl'].setVisible(False,False)
- # scene.objects['Aide-cmd-Hl'].setVisible(False,False)
-
- # Récupérer la config (vitesse du jeu : data/config/speed)
+ # Speed
+ # Read config (game speed : data/config/speed -> [0][0].text)
speed_mode=[0.25, 0.5, 1,2,4,10]
speed_mode_txt=["1/4", "1/2", "1", "2","4","10"]
scene.objects['Terrain']['speed']=float(ct_config_tree[0][0].text)
i=speed_mode.index(scene.objects['Terrain']['speed'])
scene.objects['Text_speed']['Text']=speed_mode_txt[i]
-# Le highlight des commandes
+# Highlight des commandes
def cmd_hl(cont):
obj = cont.owner
# Activation
if cont.sensors['MO'].status == JUST_ACTIVATED and scene.objects['Terrain']['manip_mode']==0:
- if obj.name!="Run" and obj.name!="Pause" and obj.name!="Run-Hl" and obj.name!="Pause-Hl" and obj.name!="Stop" and obj.name!="Stop-Hl" :
+ if obj.name!="Run" and obj.name!="Pause" and obj.name!="Stop" :
obj.setVisible(False,True)
scene.objects[obj.name+'-Hl'].setVisible(True,True)
@@ -594,44 +640,55 @@ def cmd_hl(cont):
"Book-cmd": "Documentation",
"About-cmd": "About",
"Speed_down": "Speed down (-)",
- "Speed_up": "Speed up (+)"}
- scene.objects['Cmd_text']['Text']= text_hl[obj.name]
+ "Speed_up": "Speed up (+)",
+ "Sound-cmd": "Unset sound",
+ "NoSound-cmd": "Set sound"}
+ text=text_hl[obj.name]
+ if obj.name == "Construc" and scene.objects['Terrain']['construct_mode']==True: # Bascule le construct
+ text="Hide tower position"
+ scene.objects['Cmd_text']['Text']= text
scene.objects['Cmd_text'].setVisible(True,False)
-
- # if scene.objects['Terrain']['run'] == False and obj.name=="Run":
- # scene.objects['Cmd_text']['Text']= "Run"
- # if scene.objects['Terrain']['run'] == True and obj.name=="Stop":
- # scene.objects['Cmd_text']['Text']= "Stop"
- # if scene.objects['Terrain']['run'] == True and obj.name=="Pause":
- # scene.objects['Cmd_text']['Text']= "Pause"
# Désactivation
if cont.sensors['MO'].status == JUST_RELEASED and (scene.objects['Terrain']['manip_mode']==0 or scene.objects['Terrain']['manip_mode']==9):
- scene.objects['Cmd_text'].setVisible(False,False)
- if obj.name!="Run" and obj.name!="Pause" and obj.name!="Run-Hl" and obj.name!="Pause-Hl" and obj.name!="Stop" and obj.name!="Stop-Hl" :
+ if obj.name!="Run" and obj.name!="Pause" and obj.name!="Stop" and obj.name!="Sound-cmd" and obj.name!="NoSound-cmd":
scene.objects[obj.name+'-Hl'].setVisible(False,True)
obj.setVisible(True,True)
+ scene.objects['Cmd_text'].setVisible(False,False)
# Run et pause
if obj.name=="Pause" or obj.name=="Run":
if scene.objects['Terrain']['run'] == True:
scene.objects['Pause-Hl'].setVisible(False,False)
scene.objects['Pause'].setVisible(True,False)
+ scene.objects['Cmd_text'].setVisible(False,False)
else:
scene.objects['Run-Hl'].setVisible(False,False)
scene.objects['Run'].setVisible(True,False)
+ scene.objects['Cmd_text'].setVisible(False,False)
# Stop
if obj.name=="Stop":
if scene.objects['Terrain']['thread_run']==True:
scene.objects['Stop-Hl'].setVisible(False,False)
scene.objects['Stop'].setVisible(True,False)
+ scene.objects['Cmd_text'].setVisible(False,False)
+
+ # Sound
+ if obj.name=="NoSound-cmd" and scene.objects['Commands']['sound']==False:
+ scene.objects['NoSound-cmd-Hl'].setVisible(False,False)
+ scene.objects['NoSound-cmd'].setVisible(True,False)
+ scene.objects['Cmd_text'].setVisible(False,False)
+ if obj.name=="Sound-cmd" and scene.objects['Commands']['sound']==True:
+ scene.objects['Sound-cmd-Hl'].setVisible(False,False)
+ scene.objects['Sound-cmd'].setVisible(True,False)
+ scene.objects['Cmd_text'].setVisible(False,False)
# Click sur les commandes
def cmd_click (cont):
obj = cont.owner
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and scene.objects['Terrain']['manip_mode']==0:
- if obj.name=="Pause" or obj.name=="Run": # FIXME problème sur l'icone pause
+ if obj.name=="Pause" or obj.name=="Run":
terrain_run ()
if obj.name=="Stop":
terrain_stop ()
@@ -639,6 +696,10 @@ def cmd_click (cont):
terrain_speed (obj)
if obj.name=="About-cmd":
about_open ()
+ if obj.name=="Sound-cmd":
+ sound_unset ()
+ if obj.name=="NoSound-cmd":
+ sound_set ()
###############################################################################
# Gestion du clavier
@@ -656,10 +717,27 @@ def mode(cont):
# Touche ESC
if JUST_ACTIVATED in keyboard.inputs[bge.events.ESCKEY].queue:
- terrain_stop ()
- bge.logic.endGame()
+ print("ESC")
+ print(scene.objects['Terrain']['manip_mode'])
+ # Fenêtres modales
+ if scene.objects['Terrain']['manip_mode']==9:
+ print("['manip_mode']==9")
+ if scene.objects['Book'].visible:
+ print("Book")
+ doc_close()
+ if scene.objects['About'].visible:
+ print("About")
+ about_close()
+ if scene.objects['End'].visible:
+ print("End")
+ endbanner_close()
+ return
+ else: # Sortir du jeux
+ print("endgame")
+ terrain_stop ()
+ bge.logic.endGame()
- # Fenêtre modale
+ # Fenêtre modale (inhibition des touches hors ESC)
if scene.objects['Terrain']['manip_mode']==9:
return
@@ -687,10 +765,7 @@ def mode(cont):
# Touche Home -> Reset de la vue
if JUST_ACTIVATED in keyboard.inputs[bge.events.HOMEKEY].queue:
- scene.objects['Camera'].worldPosition.x = scene.objects['Camera']['init_lx']
- scene.objects['Camera'].worldPosition.y = scene.objects['Camera']['init_ly']
- scene.objects['Camera'].worldPosition.z = scene.objects['Camera']['init_lz']
- applyRotationTo(scene.objects['Terrain'], 0, 0, 0)
+ manip_reset()
if scene.objects['Mouse_main']['mouse_graphic']:
bge.render.setMousePosition(int(bge.render.getWindowWidth() / 2), int(bge.render.getWindowHeight() / 2))
@@ -732,6 +807,12 @@ def manip_init(cont):
scene.objects['Terrain']['init_rx']=scene.objects['Terrain'].worldOrientation.to_euler().x
scene.objects['Terrain']['init_ry']=scene.objects['Terrain'].worldOrientation.to_euler().y
scene.objects['Terrain']['init_rz']=scene.objects['Terrain'].worldOrientation.to_euler().z
+ scene.objects['Commands']['init_lx']=scene.objects['Commands'].worldPosition.x
+ scene.objects['Commands']['init_ly']=scene.objects['Commands'].worldPosition.y
+ scene.objects['Commands']['init_lz']=scene.objects['Commands'].worldPosition.z
+ scene.objects['Points']['init_lx']=scene.objects['Points'].worldPosition.x
+ scene.objects['Points']['init_ly']=scene.objects['Points'].worldPosition.y
+ scene.objects['Points']['init_lz']=scene.objects['Points'].worldPosition.z
# Atteindre une orientation (bas niveau)
def applyRotationTo(obj, rx=None, ry=None, rz=None, Local=True):
@@ -765,12 +846,19 @@ def applyRotationTo(obj, rx=None, ry=None, rz=None, Local=True):
# print ("delta z ",rz-obj.worldOrientation.to_euler().z)
# Reset de la manipulation de la vue
-def manip_reset(cont):
- if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and scene.objects['Terrain']['manip_mode']==0:
- scene.objects['Camera'].worldPosition.x = scene.objects['Camera']['init_lx']
- scene.objects['Camera'].worldPosition.y = scene.objects['Camera']['init_ly']
- scene.objects['Camera'].worldPosition.z = scene.objects['Camera']['init_lz']
- applyRotationTo(scene.objects['Terrain'], 0, 0, 0)
+def manip_reset():
+ # if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and scene.objects['Terrain']['manip_mode']==0:
+ scene.objects['Camera'].worldPosition.x = scene.objects['Camera']['init_lx']
+ scene.objects['Camera'].worldPosition.y = scene.objects['Camera']['init_ly']
+ scene.objects['Camera'].worldPosition.z = scene.objects['Camera']['init_lz']
+ scene.objects['Commands'].worldPosition.x = scene.objects['Commands']['init_lx']
+ scene.objects['Commands'].worldPosition.y = scene.objects['Commands']['init_ly']
+ scene.objects['Commands'].worldPosition.z = scene.objects['Commands']['init_lz']
+ scene.objects['Points'].worldPosition.x = scene.objects['Points']['init_lx']
+ scene.objects['Points'].worldPosition.y = scene.objects['Points']['init_ly']
+ scene.objects['Points'].worldPosition.z = scene.objects['Points']['init_lz']
+ applyRotationTo(scene.objects['Terrain'], 0, 0, 0)
+ scene.objects['Cmd_text']['Text']= ""
# Position de départ pour la manipulation de la vue
def manip_start(cont):
@@ -796,6 +884,9 @@ def manip(cont):
# Pan
if obj['manip_mode']==1: # Shift
scene.objects['Camera'].applyMovement((delta_x*-sensibilite_pan, delta_y*sensibilite_pan, 0), True)
+ scene.objects['Commands'].applyMovement((delta_x*-sensibilite_pan, delta_y*sensibilite_pan*math.cos(50*2*math.pi*(1/360)), delta_y*sensibilite_pan*math.sin(50*2*math.pi*(1/360))), True)
+ scene.objects['Points'].applyMovement((delta_x*-sensibilite_pan, delta_y*sensibilite_pan*math.cos(50*2*math.pi*(1/360)), delta_y*sensibilite_pan*math.sin(50*2*math.pi*(1/360))), True)
+
if scene.objects['Mouse_main']['mouse_graphic']:
scene.objects['Mouse_main'].applyMovement((delta_x*-sensibilite_pan, delta_y*sensibilite_pan, 0), True)
@@ -816,7 +907,6 @@ def manip(cont):
scene.objects['Camera']['past_ly']=scene.objects['Camera'].worldPosition.y
scene.objects['Camera']['past_lz']=scene.objects['Camera'].worldPosition.z
-
# Manipulation du modèle ou de la caméra
def manip_wheel(cont):
if scene.objects['Terrain']['manip_mode']!=9: # Fenêtre modale
@@ -921,9 +1011,17 @@ def mouse_down():
# Documentation
###############################################################################
+color_doc_chap = (0.153, 0.116, 0.105, 1) # WoodDark
+color_doc_fct = (0.326, 0.101, 0.0592, 1) # BrownDark
+color_doc_hl = (0.13, 0.254, 0.407, 1) # BlueDark
+color_doc_activate = (1.0, 0.025, 0.116, 1) # Red
+
+# Ouvrir le livre
def doc (cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and scene.objects['Terrain']['manip_mode']==0:
scene.objects['Terrain']['manip_mode']=9 # Fenêtre modale
+ sound_play (sndbuff_book_open)
+ manip_reset()
scene.objects['Book'].worldPosition = [0, -22, 16.5]
scene.objects['Book_close'].color = color_doc_chap
scene.objects['Book_chap-screen'].color = color_doc_chap
@@ -951,14 +1049,22 @@ def doc (cont):
scene.objects['Book_page_screen'].worldPosition = scene.objects['Book'].worldPosition
scene.objects['Book_page_screen'].setVisible(True,True)
-def doc_close (cont):
- if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
- scene.objects['Terrain']['manip_mode']=0 # Fenêtre modale
- scene.objects['Book_page_screen'].setVisible(False,True)
- scene.objects['Book'].setVisible(False,True)
- scene.objects['Book'].worldPosition = [28, 0.84549, 1.53626] # Position dans Blender [28, 0.84549, 1.53626]
- scene.objects['Book_page_screen'].worldPosition = scene.objects['Book'].worldPosition
+# Fermer le livre
+def doc_close ():
+ print("doc_close")
+ sound_play (sndbuff_book_close)
+ scene.objects['Terrain']['manip_mode']=0 # Fenêtre modale
+ scene.objects['Book_page_screen'].setVisible(False,True)
+ scene.objects['Book'].setVisible(False,True)
+ scene.objects['Book'].worldPosition = [28, 0.84549, 1.53626] # Position dans Blender [28, 0.84549, 1.53626]
+ scene.objects['Book_page_screen'].worldPosition = scene.objects['Book'].worldPosition
+# Click pour fermer le livre
+def doc_close_click (cont):
+ if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
+ doc_close()
+
+# Highlight du livre
def doc_hl (cont):
if cont.sensors['MO'].status == JUST_ACTIVATED :
obj = cont.owner
@@ -983,8 +1089,13 @@ def doc_hl (cont):
# About
###############################################################################
+color_link = (0.799, 0.617, 0.021, 1) # Jaune
+color_link_hl = (0.8, 0.8, 0.8, 1) # Blanc
+
+# Ouvrir le about
def about_open():
scene.objects['Terrain']['manip_mode']=9 # Fenêtre modale
+ manip_reset()
scene.objects['About_title'].color = color_black
scene.objects['About_text'].color = color_black
scene.objects['About_copyright'].color = color_black
@@ -1000,6 +1111,7 @@ def about_open():
scene.objects['About']['timer'] = 0
scene.objects['About']['anim'] = True
+# Animation du about
def about_open_anim():
pas=0.5
scene.objects['About'].localPosition.y -= pas
@@ -1010,6 +1122,7 @@ def about_open_anim():
if scene.objects['About']['timer']== 40:
scene.objects['About']['anim'] = False
+# Highlight du about
def about_hl(cont):
# decal = 18
# size_scale = 0.2
@@ -1044,15 +1157,22 @@ def about_hl(cont):
# scene.objects['Mouse_main'].worldScale=[30, 30, 30]
# print("about_hl R après", scene.objects['Mouse_main'].worldPosition)
-def about_close(cont):
- if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
- audiodev.play(sndbuff_click)
- scene.objects['Terrain']['manip_mode']=0
- scene.objects['About'].setVisible(False,True)
- scene.objects['About'].worldPosition = [22, 1.53623, -0.892838]
- scene.objects['Aboutbanner'].color = [0.592, 0.68, 0.407, 1]
- scene.objects['About']['timer']= 0
+# Fermer le about
+def about_close():
+ print("about_close")
+ sound_play (sndbuff_click)
+ scene.objects['Terrain']['manip_mode']=0
+ scene.objects['About'].setVisible(False,True)
+ scene.objects['About'].worldPosition = [22, 1.53623, -0.892838]
+ scene.objects['Aboutbanner'].color = [0.592, 0.68, 0.407, 1]
+ scene.objects['About']['timer']= 0
+# Click pour fermer le about
+def about_close_click(cont):
+ if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
+ about_close()
+
+# Liens du about
def about_link(cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
obj = cont.owner
diff --git a/ct_config.xml b/ct_config.xml
index c4cbdab..b8e1978 100644
--- a/ct_config.xml
+++ b/ct_config.xml
@@ -1,5 +1,6 @@
- 4.0
+ 10.0
+ False
\ No newline at end of file
diff --git a/ct_doc.py b/ct_doc.py
index 3e5b93f..729cfea 100644
--- a/ct_doc.py
+++ b/ct_doc.py
@@ -1,4 +1,5 @@
import bge # Bibliothèque Blender Game Engine (UPBGE)
+import aud # Sounds
###############################################################################
# ct_doc.py
@@ -24,30 +25,28 @@ color_doc_fct = (0.326, 0.101, 0.0592, 1) # BrownDark
color_doc_hl = (0.13, 0.254, 0.407, 1) # BlueDark
color_doc_activate = (1.0, 0.025, 0.116, 1) # Red
+# Sounds
+audiodev = aud.Device()
+snd_book_flip = aud.Sound('asset/sounds/book_flip.ogg')
+sndbuff_book_flip = aud.Sound.cache(snd_book_flip)
+
# UPBGE constants
JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED
JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED
ACTIVATE = bge.logic.KX_INPUT_ACTIVE
# JUST_DEACTIVATED = bge.logic.KX_SENSOR_JUST_DEACTIVATED
-###############################################################################
-# Screen
-###############################################################################
-
###############################################################################
# Map
###############################################################################
-# Get your level : ct_level ()
-# - Return your level (integer)
-#
-# Time management (temporization) : ct_sleep (delay)
-
map_fct=["ct_level", "ct_sleep"]
+# ct_level ()
ct_level_title="Get your level"
ct_level_text=" ct_level ()\n \v - Return your level (integer)"
+# ct_sleep (delay)
ct_sleep_title="Time management"
ct_sleep_text=" ct_sleep (delay)\n \v - delay : duration in seconds (float)"
@@ -60,15 +59,17 @@ map_fct_text=[ct_level_text, ct_sleep_text]
tower_fct=["ct_build", "ct_remove"]
+# ct_build (x, y, category, name, color, style)
ct_build_title="Build a tower"
ct_build_text="ct_build (x,y, category, name, color, style)\n \v- x position (integer)\n \v- y position (integer)\n"
ct_build_text = ct_build_text +" \v- category (string) : \n \v \v- \"Archer tower\" (default value)\n \v \v- \"Mage tower\"\n"
ct_build_text = ct_build_text +" \v- name (string)\n \v- color (RGB tuple, default=purple)\n"
ct_build_text = ct_build_text +" \v- style (string) : \n \v \v- \"square\" (default value) or \"round\"\n \v \v- version : A (default value), B or C\n \v \v- exemple : 'round-B' \n"
ct_build_text = ct_build_text +" \v- Return boolean flag (builded -> True)\n\n"
-ct_build_text = ct_build_text +"Predefined color : blue, green, magenta,\n orange, purple, red, turquoise, yellow.\n\n"
+ct_build_text = ct_build_text +"Predefined colors : blue, green, magenta,\n orange, purple, red, turquoise, yellow.\n\n"
ct_build_text = ct_build_text +"Exemple : ct_build (1, 1, \"Archer tower\", \n \"Tower #1\", yellow, \"round-A\")\n"
+# ct_remove (x, y)
ct_remove_title="Remove a tower"
ct_remove_text=" ct_remove (x, y) \n \v - x position (integer)\n \v - y position (integer)\n"
@@ -116,9 +117,19 @@ fct_text = {
'Book_chap-tech' : tech_fct_text,
'Book_chap-spell' : spell_fct_text}
+###############################################################################
+# Interface
+###############################################################################
+
+# Sounds
+def sound_play (sound):
+ if scene.objects['Commands']['sound']:
+ audiodev.play(sound)
+
# Afficher le chapitre
def chapter(cont):
- if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
+ if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and cont.sensors['Click'].positive:
+ sound_play (sndbuff_book_flip)
obj = cont.owner
name_chap=obj.name[:-7]
@@ -139,6 +150,7 @@ def chapter(cont):
name_fct = "Book_fct-"+str(i)
scene.objects[name_fct].setVisible(False,False)
scene.objects[name_fct].color = color_doc_fct
+ scene.objects["Book"]['page_fct'] = ""
scene.objects['Book_text_title'].setVisible(False,True)
scene.objects['Book_text'].setVisible(False,True)
@@ -165,6 +177,7 @@ def chapter(cont):
# Afficher les details de la fonction
def function(cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
+ sound_play (sndbuff_book_flip)
obj = cont.owner
# Highlight des fonctions
@@ -179,10 +192,7 @@ def function(cont):
# Afficher le texte de la fonction
name_chap = scene.objects["Book"]['page_chap']
- print ('name_chap : ', name_chap)
- print ('obj.name[9:11] : ', obj.name[9:11])
nb = int(obj.name[9:11])-1
- print ('nb : ', nb)
scene.objects['Book_text_title']['Text'] = fct_title[name_chap][nb]
scene.objects['Book_text']['Text'] = fct_text[name_chap][nb]
scene.objects['Book_text_title'].setVisible(True,True)
diff --git a/ct_lib.py b/ct_lib.py
index 9e5e5a3..4c57abe 100644
--- a/ct_lib.py
+++ b/ct_lib.py
@@ -159,9 +159,16 @@ def thread_cmd_start(fct):
def thread_cmd_stop():
thread_stop(threads_cmd, "commands")
+###############################################################################
+# Sounds
+###############################################################################
+
+def sound_play (sound):
+ if scene.objects['Commands']['sound']:
+ audiodev.play(sound)
###############################################################################
-# Vagues (minions)
+# Waves (minions)
###############################################################################
# Minion caracteristics : category (class), level, hp, speed, armor, bounty, lifes_damage
@@ -267,7 +274,7 @@ def scn_minion_affect(cont):
obj.actuators['Steering'].velocity = obj['speed_base']*scene.objects['Terrain']['speed']
###############################################################################
-# Tours
+# Towers
###############################################################################
# Tower caracteristics : category (class), damage, speed, range
@@ -316,7 +323,7 @@ def ct_build_details(x,y, cat='Archer tower', tower_name="Tower", color=tower_pu
tower_minion.worldScale=[0.25,0.25,0.25]
# Sounds
- audiodev.play(sndbuff_build)
+ sound_play(sndbuff_build)
# Caracteristics
tower_carac= scene.objects['Terrain']['tower_carac']
@@ -433,9 +440,9 @@ def scn_tower_near(cont):
# Sounds
if obj['cat']=="Archer tower":
- audiodev.play(sndbuff_archer)
+ sound_play(sndbuff_archer)
if obj['cat']=="Mage tower":
- audiodev.play(sndbuff_mage)
+ sound_play(sndbuff_mage)
# Ligne (drawLine) (vitesse rapide)
# if scene.objects['Terrain']['speed']>=1:
@@ -499,7 +506,7 @@ def scn_map_end_near(cont):
sensor = obj.sensors['Near']
if sensor.positive :
for obj_i in sensor.hitObjectList :
- audiodev.play(sndbuff_life)
+ sound_play(sndbuff_life)
if scene.objects['Points']['lifes']>0:
scene.objects['Points']['lifes']= scene.objects['Points']['lifes']-obj_i['lifes_damage']
scene.objects['Points']['minions_run'] -=1
@@ -516,7 +523,7 @@ def scn_map_end_near(cont):
# # print ("obj['idm_last'], obj_i ['id'] : ", obj['idm_last'], obj_i ['id'])
# if obj['idm_last'] != obj_i ['id']:
# obj['idm_last'] = obj_i ['id']
-# audiodev.play(sndbuff_life)
+# sound_play(sndbuff_life)
# if scene.objects['Points']['lifes']>0:
# scene.objects['Points']['lifes']= scene.objects['Points']['lifes']-obj_i['lifes_damage']
# scene.objects['Points']['minions_run'] -=1