I just had a look at your bug. It is caused by an incorrect update to my control flow graph, after removing an unused local assignment. I will fix it for next version of course, but you should be able to fix it by removing your unused local assignments.
if(id==0){k=350;}else{k=150;}//In your code, this value of i is not being read.i=libNtve_gf_CreateDialogItemLabel(d,400,k,c_anchorTopLeft,75,95,GetUnitTooltip(id),Color(100,100,100),false,2.0);
Heh, I do this kind of stuff everywhere, in case I need the dialog item for something later on ;)
Using replace will always replace the characters behind your cursor with the replacement word. Also, undo does not work for replacing; it adds the replaced word again, but does not delete the replacement.
Hell, it's about time - Version 3.0.0 is finally here :)
I don't think that it is bug free though. So much code as been written, so there are likely to still be bugs lurking around.. If it's horrible, remember that you can downgrade in Help->Change to another version.
Indeed, unfortunantly typedefs got broken with this patch.
Take for instance:
typedefpointvector;
Throws the error (in my example file typedeftest):
typedeftest[1, 9]: Found multiple types matching point
typedeftest[1, 9]: Matches primitive point
typedeftest[1, 1]: Matching typedef
This is probably also the underlying reason of why I can't enrich the desired typedef anymore.
Edit: I did also take a look at the documentation regarding namespace nesting. There's a misspell of the word "reference" (it now says "refference"). I also recall this was an error in the editor itself before, but I haven't seen it recently so I guess you already fixed that by now. Anyway, not trying to be a grammar police or anything:P
There's also an issue that you can't "right-click" warnings such as "unused struct: MyStruct", as that activates the error box which says it is unable to open the file. The label stating where the struct is declared seems to not be set properly either, as it says "Library file[1, 8]: Unused struct: MyStruct" when my struct isn't originating from any library.
As of 3.0.0, null checks are now reliable. What this means that if a pointer is uninitialized, pointing to a deleted object, or has been assigned null, writing (p == null) will return false true.
Can confirm the typedef - issue, couldn't get any kind of typedef to work at all.
Some issues I mentioned earlier seem to work properly now, as you mention in the changelog (wait and local re-use havoc)
Others haven't changed (like replace and undo issue, 0 size array), but you are probably aware of that and consider them lower priority.
Suggestion: Add typecast (and maybe implicit cast, but that would depend on your personal taste) from byte/int/fixed to bool, if 0 then false, else true.
Resizing a dynamic array does not seem to work anymore,
int[]i=newint[0]();i->Resize(1);
causes a Method not found error.
Also, if you write i-> , the autocompletion does not suggest length or resize, while for writing i. it does, but it still doesn't work (->lenght seems to work while .length does not; autocompletion suggests the other way around).
And a question: Is implicit resizing supported? I cannot test the result right now, but writing
And a question: Is implicit resizing supported? I cannot test the result right now, but writing
int[]i=newint[5]();i[10]=5;
throws no error for me.
No. It is not supported, though it will work. The only issue with it is that when you delete i, it will only remove elements up to the specified length of the array.
There's also an issue that you can't "right-click" warnings such as "unused struct: MyStruct", as that activates the error box which says it is unable to open the file. The label stating where the struct is declared seems to not be set properly either, as it says "Library file[1, 8]: Unused struct: MyStruct" when my struct isn't originating from any library.
Oh, what? When I create a new project now and test that, it works like it should, but in my older, larger project it doesn't. I'll get back into if I can replicate it later.
I have a suggestion as well. Right now there's one thing that is slightly annoying regarding the autocompleting popup window. How can I force this to show up without having to write anything? There has been a few times where I write something that it doesn't autocomplete at once, which I then want to force a popup to show up, without having to write the next letter. A suggestion could be (for instance like they have in visual studio) to have the autocompletion popup visible if you press ctrl+space (as that now seem to result in writing a space character now anyway).
Are you sure the int[0] i; presists to galaxy code? It should be removed.
Also, it's impossible check at compile time if you create a dynamic array of size 0 - You could use the returned value of a function, and well.. Rice's theorem.
Suggestion: Add something to avoid errors caused by the order your initializers are invoked. Maybe an optional initializer priority or something.
If I have one initializer, which, for example sets tons of variables, I would like to be able to use these variables reliably in other initializers, without having to manually call them in a specific order.
Syntax-wise, it could work like an "overloaded" initializer to not break backwards compatibility:
Initializer{//no argument, priority defaults to some value, possibly 512 similar to render priority for dialogsDoStuff();}Initializer(513){//higher priority, gets invoked firstDoStuffPreviously();}
You can use the initializer library functionally.. Any dependancies will be run before the current initializer. It will be faster to write with a simple integer, but harder to maintain if you share code with multiple people, like if you use libraries that use initializers.
Initializer(LibraryName="Run me last",LibraryVersion="1",RequiredLibraries="Run me first:1"){}Initializer(LibraryName="Run me first",LibraryVersion="1"){}
Hey, I just noticed that the autocompletion in version 3.0.5 does not work for custom types anymore (atleast for me). Crazy thing as it works with some types but not for others. Autocompletion for the default sc2 types is still working. There were some exceptions when I started the editor, which I have sent with the build-in report method.
Initializer{playergrouppg=PlayerGroupEmpty();pg<<1;// ERROR here: <excpecting ";">pg=pg<<1;// does work}// changing this to void does not helpplayergroupoperator<<(playergrouppg,intplayer){PlayerGroupAdd(pg,player);returnpg;}
I would like to use the GAx3 mod for my map, so obviously, I would like its functions to show up in Galaxy++ as well. How would I do that?
Just adding the script as a file does work for the syntax, but all the functions get added to the map again, which conflicts with the mod, which of course adds all functions itself.
And again, an issue with a variable disappearing in the generated map script.
This creates a cyclic dependancy error in g++ (obviously, there is no "thistype", but using "Foo" causes the error). Any way to do something similar, or do I need to use an external array of Foo?
Also, can we create a new instance for a struct, without assigning it for a variable?
Foo*f=newFoo();//instead of thisnewFoo();//I want that
@Kueken531: Go
I just had a look at your bug. It is caused by an incorrect update to my control flow graph, after removing an unused local assignment. I will fix it for next version of course, but you should be able to fix it by removing your unused local assignments.
Heh, I do this kind of stuff everywhere, in case I need the dialog item for something later on ;)
Using replace will always replace the characters behind your cursor with the replacement word. Also, undo does not work for replacing; it adds the replaced word again, but does not delete the replacement.
Hell, it's about time - Version 3.0.0 is finally here :)
I don't think that it is bug free though. So much code as been written, so there are likely to still be bugs lurking around.. If it's horrible, remember that you can downgrade in Help->Change to another version.
Indeed, unfortunantly typedefs got broken with this patch.
Take for instance:
Throws the error (in my example file typedeftest):
typedeftest[1, 9]: Found multiple types matching point typedeftest[1, 9]: Matches primitive point typedeftest[1, 1]: Matching typedef
This is probably also the underlying reason of why I can't enrich the desired typedef anymore.
Edit: I did also take a look at the documentation regarding namespace nesting. There's a misspell of the word "reference" (it now says "refference"). I also recall this was an error in the editor itself before, but I haven't seen it recently so I guess you already fixed that by now. Anyway, not trying to be a grammar police or anything:P
There's also an issue that you can't "right-click" warnings such as "unused struct: MyStruct", as that activates the error box which says it is unable to open the file. The label stating where the struct is declared seems to not be set properly either, as it says "Library file[1, 8]: Unused struct: MyStruct" when my struct isn't originating from any library.
Documentation error for the null-pointers:
As of 3.0.0, null checks are now reliable. What this means that if a pointer is uninitialized, pointing to a deleted object, or has been assigned null, writing (p == null) will return
falsetrue.Can confirm the typedef - issue, couldn't get any kind of typedef to work at all.
Some issues I mentioned earlier seem to work properly now, as you mention in the changelog (wait and local re-use havoc)
Others haven't changed (like replace and undo issue, 0 size array), but you are probably aware of that and consider them lower priority.
Suggestion: Add typecast (and maybe implicit cast, but that would depend on your personal taste) from byte/int/fixed to bool, if 0 then false, else true.
Resizing a dynamic array does not seem to work anymore,
causes a Method not found error.
Also, if you write i-> , the autocompletion does not suggest length or resize, while for writing i. it does, but it still doesn't work (->lenght seems to work while .length does not; autocompletion suggests the other way around).
And a question: Is implicit resizing supported? I cannot test the result right now, but writing
throws no error for me.
Thanks guys, Ill get to work on fixing them.
No. It is not supported, though it will work. The only issue with it is that when you delete i, it will only remove elements up to the specified length of the array.
Edit:
How exactly do you define this 0 sized array? I thought I fixed that one.
I can't replicate this one : / you got some code?
Oh, what? When I create a new project now and test that, it works like it should, but in my older, larger project it doesn't. I'll get back into if I can replicate it later.
I have a suggestion as well. Right now there's one thing that is slightly annoying regarding the autocompleting popup window. How can I force this to show up without having to write anything? There has been a few times where I write something that it doesn't autocomplete at once, which I then want to force a popup to show up, without having to write the next letter. A suggestion could be (for instance like they have in visual studio) to have the autocompletion popup visible if you press ctrl+space (as that now seem to result in writing a space character now anyway).
Nothing special. No error messages, can use them in functions, causes ingame error. Behaves exactly like it did pre-patch.
@Kueken531: Go
Are you sure the int[0] i; presists to galaxy code? It should be removed.
Also, it's impossible check at compile time if you create a dynamic array of size 0 - You could use the returned value of a function, and well.. Rice's theorem.
Yes, for dynamic arrays, it is not needed anyway, there might be cases, where it makes sense to do that (once resize works again, that is ;) ).
Seems so.
Source code:
Generated:
Suggestion: Add something to avoid errors caused by the order your initializers are invoked. Maybe an optional initializer priority or something.
If I have one initializer, which, for example sets tons of variables, I would like to be able to use these variables reliably in other initializers, without having to manually call them in a specific order.
Syntax-wise, it could work like an "overloaded" initializer to not break backwards compatibility:
You can use the initializer library functionally.. Any dependancies will be run before the current initializer. It will be faster to write with a simple integer, but harder to maintain if you share code with multiple people, like if you use libraries that use initializers.
Oops, how did I miss that ;)
Wow, awesome. I'm just coming back from Easter holiday and what do I find? A whole lot of new features!
Also wanted to let you know that my map still compiles fine with the new version (3.0.2). As always, much appreciated.
Edit: The new version (3.0.5) has a bug with enrichments:
generates:
Hmm.. seems I for some reason commented the call to the code that fixes value refs :s Shame on me for only testing if my projects could compile
produces an error message, but when you double-click it to get to the line of the error, you get a File not found error.
I would like support for this:
Hey, I just noticed that the autocompletion in version 3.0.5 does not work for custom types anymore (atleast for me). Crazy thing as it works with some types but not for others. Autocompletion for the default sc2 types is still working. There were some exceptions when I started the editor, which I have sent with the build-in report method.
Error with operator overloading: If you do something like this:
the resulting function will look like this:
which is no valid Galaxy syntax, the function name must not include an asterisk.
If you do it the way it is supposed to be, this is not a problem, because:
this will just be inlined, and the function won't even exist in the generated script.
Operator overloading bug:
I would like to use the GAx3 mod for my map, so obviously, I would like its functions to show up in Galaxy
++
as well. How would I do that?Just adding the script as a file does work for the syntax, but all the functions get added to the map again, which conflicts with the mod, which of course adds all functions itself.
And again, an issue with a variable disappearing in the generated map script.
generates
Attached script file; you will find it in the Detect Mouse file (and, as usual, prepare for a mess ;) )
In vJass, we could do something like this:
This creates a cyclic dependancy error in g
++
(obviously, there is no "thistype", but using "Foo" causes the error). Any way to do something similar, or do I need to use an external array of Foo?Also, can we create a new instance for a struct, without assigning it for a variable?