Presets, and Array Questions
Tuesday, October 2nd, 2007A quick status update for all of you listening out there.
I’ve now created a simple load/save preset system. It’s not pretty, but it works perfectly! ( wish I could say the same for that bloody remove option…More on that later )
I’m using simple .txt file exporting and importing to do the preset saving/loading. When the ’save’ button is pressed, all the current elements are saved into a ‘.aav’ file, Which is simply a sneaky .txt file in disguise. for example :
0*default sphere*72.0*300.0*0.0*100.0
1*default cube*400.0*300.0*0.0*100.0
0*default sphere*720.0*300.0*0.0*100.0
This preset file will created 3 objects. Two Spheres, and a Cube ( oh yeah, I added cubes ). It’s fairly simple, each value is separated by a *, and each new line is a new element. The object “type” is dictated by the number at the front of the line. 0 for sphere, 1 for cube, etc. This text file is imported back into the program, the current element list is cleared ( though, in the final version I hope for a fadeout, but for now, it just vanishes like my social life while completing this assignment ), and is replaced by our new friends there.
So that’s rad.
Now I need some help.
I’ve been puzzling over this stupid remove function all day, and just when I think I’ve got it working again, I manage to break it. It wouldn’t be so complicated, however the GUI library I’m using is still in the early stages of development ( especially with the MultiList system I’m using ) and so it’s still missing some things ( such as items that remove properly … ). This is how my remove system works :
REMOVE BUTTON IS SELECTED.
REMOVE BUTTON TEXT IS CHANGED TO -REMOVED-
ELEMENT CORRESPONDING TO REMOVE BUTTON IS REMOVED
Seems simple enough. And it is for the *first* item. However I’m storing the elements in an ArrayList, which means if I remove one, the rest cascade through the list and fill in the spots, which means I have to keep an array which holds the relative button positions for the elements place in the elements ArrayList.
Confused yet ? So Am I.
SO
ArrayList elements = new ArrayList();
int[] currentElementPos;
and the remove code :
// set "edit" label to "-removed-"
gui.controller(Integer.toString(theEvent.controller().id()+1000)).setLabel("-removed-");
// set "removed" label to "-removed-"
gui.controller(Integer.toString(theEvent.controller().id())).setLabel("-removed-");
// remove item
elements.remove(currentElementPos[theEvent.controller().id()-1000]);
for (int i=theEvent.controller().id()-1000;i<=elements.size();i++){
currentElementPos[i]=currentElementPos[i]-1;
}
Yes, there are some magic numbers there, and that’s where the GUI Issues come in to play. Each button is assigned an ID number. the ‘remove’ buttons I’ve assigned incremental ID’s from 1000 upwards. ( to 2000, so don’t add more than 1000 elements
). so “theEvent.controller().id()” is the ID of the button that was pressed. so, 1000 would be the first element created, hence 1000-1000 = 0. Which means it is element 0. However, once I delete element 0, element 1 should now be element 0, element 2 should be element 1 etc. That’s what the for loop *should* do. But it’s … not. Maybe with a fresh mind in the morning I can work this out, but right now - I’ve tried 4 different solutions, each one works for a bit, then falls apart.
Any Ideas ? Even if it’s not in java, psuedocode is fine.
Thanks
- Anthony