@@ -4,7 +4,7 @@ export default async function ({ addon, console, msg }) {
4
4
const debug = console . log ;
5
5
const OnlyEditingTarget = addon . settings . get ( "target" ) ;
6
6
7
- let inputsOPs = [ 'math_number' , 'math_positive_number' , "math_whole_number" , 'motion_goto_menu' , "text" ]
7
+ let inputsOPs = [ 'math_number' , 'math_positive_number' , "math_whole_number" , 'motion_goto_menu' , "text" , "argument_reporter_string_number" ]
8
8
let ignoreBlocks = [ "procedures_prototype" ]
9
9
let Cblocks = [ "control_forever" , "control_if" , "control_repeat" , "control_if_else" , "control_repeat_until" , "control_while" ]
10
10
let preventUpdate = false ;
@@ -72,25 +72,25 @@ export default async function ({ addon, console, msg }) {
72
72
var inputBlock = blocks [ input ] //block that has input info
73
73
var nextInput = null
74
74
function getInputValue ( block ) {
75
- if ( block == undefined ) {
75
+ if ( block == undefined ) {
76
76
return
77
77
}
78
78
let inputOpcode = block . opcode
79
79
let v
80
- if ( inputsOPs . includes ( inputOpcode ) ) {
80
+ if ( inputsOPs . includes ( inputOpcode ) ) {
81
81
//virtual block, has value
82
82
let fieldValue = block . fields
83
83
for ( let fl in fieldValue ) {
84
84
v = convertInput ( inputOpcode , fieldValue [ fl ] . value )
85
85
}
86
86
nextInput = null
87
-
87
+
88
88
return v
89
- } else {
89
+ } else {
90
90
//inner block
91
91
let inputs = block . inputs
92
- for ( let IN in inputs ) {
93
- nextInput = inputs [ IN ] . block
92
+ for ( let IN in inputs ) {
93
+ nextInput = inputs [ IN ] . block
94
94
}
95
95
v = "(" + inputOpcode
96
96
@@ -100,19 +100,19 @@ export default async function ({ addon, console, msg }) {
100
100
value = getInputValue ( inputBlock )
101
101
let closeN = 0
102
102
let InCouter = 10 //max inputs
103
- while ( 1 ) {
104
- if ( nextInput != null ) {
103
+ while ( 1 ) {
104
+ if ( nextInput != null ) {
105
105
//return value
106
- closeN ++
106
+ closeN ++
107
107
value += getInputValue ( blocks [ nextInput ] )
108
- } else {
108
+ } else {
109
109
value += ")" . repeat ( closeN )
110
110
return value
111
111
}
112
- if ( ! InCouter ) {
112
+ if ( ! InCouter ) {
113
113
return value
114
114
}
115
- InCouter --
115
+ InCouter --
116
116
}
117
117
}
118
118
function handleBlockDefinition ( block , sprite ) {
@@ -121,15 +121,78 @@ export default async function ({ addon, console, msg }) {
121
121
let mutation = blocks [ prototype ] . mutation
122
122
return "function " + mutation . proccode + "(" + "){"
123
123
}
124
+ function handleSubstack ( _block , _sprite ) {
125
+ let blocks = _sprite . blocks . _blocks ; //blocks in sprite
126
+ let text = ""
127
+ let block = _block
128
+ let a = 4
129
+ let substacks = new Array ( )
130
+ let substack = - 1
131
+ while ( 1 ) {
132
+ debug ( block )
133
+ let opcode = block . opcode
134
+ var id = block . id
135
+ let next = block . next
136
+ let afterC
137
+ if ( Cblocks . includes ( opcode ) ) { //C block
138
+ if ( "SUBSTACK" in block . inputs ) {
139
+ substack ++ //increase counter
140
+ text += "\t" . repeat ( substack ) + opcode + "{\r\n"
141
+ substacks [ substack ] = new Object //create new object for each substack
142
+ substacks [ substack ] . inside = block . inputs [ "SUBSTACK" ] . block //get some values in object
143
+ substacks [ substack ] . next = block . next
144
+ afterC = block . next
145
+ next = block . inputs [ "SUBSTACK" ] . block //get next block.id
146
+
147
+ }
148
+ } else { //normal block
149
+
150
+ text += "\t" . repeat ( substack ) + opcode + "\r\n"
151
+ debug ( opcode )
152
+ debug ( substacks )
153
+ debug ( substack )
154
+ /*if (substacks[substack].next == id) {
155
+ text += "\r\n"+"\t".repeat(substack)+"}"
156
+ next = substacks[substack].next
157
+ substack --
158
+ }else{*/
159
+ if ( next != undefined ) { //next block
160
+ next = block . next
161
+ //debug("next: "+next)
162
+ } else { //return after C
163
+ next = substacks [ substack ] . next
164
+ //debug("next: "+block.next)
165
+ text += "\r\n" + "\t" . repeat ( substack ) + "}"
166
+ substack --
167
+ if ( substack === 1 ) {
168
+ break
169
+ //}
170
+ }
171
+ }
172
+
173
+ }
174
+ if ( ! a ) {
175
+ break
176
+ }
177
+ if ( next != undefined ) {
178
+ block = blocks [ next ] //get block[id]
179
+ }
180
+ a --
181
+ }
182
+
183
+ debug ( text )
184
+ return text
185
+ }
124
186
function printText ( ) {
125
187
const editingTarget = vm . runtime . getEditingTarget ( ) ;
188
+ //debug(vm)
126
189
//let sprite = new Set(vm.runtime.targets.map((i) => i.sprite))
127
190
let sprite = new Set ( vm . runtime . targets )
128
191
//debug(vm.runtime.targets)
129
192
//const editingTarget = vm.runtime.getEditingTarget();
130
193
//debug(editingTarget);
131
194
//debug(sprite)
132
- if ( OnlyEditingTarget ) {
195
+ if ( OnlyEditingTarget ) {
133
196
sprite = [ editingTarget ]
134
197
}
135
198
sprite . forEach ( ( _sprite , i ) => { //sprites
@@ -169,6 +232,7 @@ export default async function ({ addon, console, msg }) {
169
232
}
170
233
text += blockOpcode
171
234
if ( Cblocks . includes ( blockOpcode ) ) {
235
+ handleSubstack ( block , _sprite )
172
236
text += "{"
173
237
if ( ! "SUBSTACK" in block . inputs ) {
174
238
text += "\r\n}"
0 commit comments