Swap Type.
Blitz3D Forums/Blitz3D Programming/Swap Type.
| ||
Type Gems Field x Field y Field z Field model Field gem_type Field selected Field points Field life Field name$ Field move% End Type global gem.gems = new gems : delete gem Thats my type. Iv made it global to the full code. I cant make it an array of types. as this wont fit what im doing. I need a way to take two of these type instances and swap them and all of their values. Ta for any suggestions. |
| ||
Swap the pointers. |
| ||
And what exactly does this line do!?!global gem.gems = new gems : delete gem |
| ||
I tried to swap them and couldnt get it to work hence me asking here. So if you can write a function id like to see it. |
| ||
Heres a SWAP function to try. It needs expanding to cover all of your fields: Type Gems Field name$ Field worth End Type Global gem.Gems Global swap.Gems gem=New Gems gem\name="silver" : gem\worth=120 gem=New Gems gem\name="red" : gem\worth=250 gem=New Gems gem\name="gold" : gem\worth=170 gem=New Gems gem\name="ruby" : gem\worth=135 ListGems Print "Swapping 'red' and 'ruby'" SwapGems "red","ruby" ListGems WaitKey End Function ListGems() Print "" Print "------[START]------" For g.Gems=Each Gems Print "Name = "+g\name+" Worth = "+g\worth Next Print "-------[END]-------" Print "" End Function ; swap 2 gems by name Function SwapGems(n1$,n2$) Local flag=False For g1.Gems=Each Gems If g1\name=n1$ For g2.Gems=Each Gems If g2\name=n2$ ; swap the variables of the 2 types swap.Gems=New Gems swap\name=g1\name : g1\name=g2\name : g2\name=swap\name swap\worth=g1\worth : g1\worth=g2\worth : g2\worth=swap\worth Delete swap flag=True : Exit EndIf Next EndIf If flag=True Exit Next End Function |
| ||
Assuming you have two types to swap, red.Gems and blue.Gems... temp.Gems = red red = blue blue = temp delete temp |
| ||
What DL said, but don't delete temp. They're just pointers so if you delete temp, you're in fact deleting blue. |
| ||
Or...red even...;op Sorry, but my pedantic bone is just tooooo big for me to resist ;o) YAN |
| ||
You may be pedantic, but you're also wrong ;) It's red before the swap. After the swap, red has become blue and vice versa ;) |
| ||
Yeah, but...Type col Field s$ End Type red.col = New col red\s$ = "I am red" blue.col = New col blue\s$ = "I am blue" temp.col = red red = blue blue = temp Print "'red' = " + red\s$ Print "'blue' = " + blue\s$ Print "'temp' = " + temp\s$ WaitKey() EndSee...It's still red. It's just that blue is now pointing to it! ;o) YAN |
| ||
Yav your way is better and is the way its being done now. the thing is I had it working right from the start. Seems that aftera fresh pair of eyes had a look at it, that the bug was being caused by some other code. Something I should have seen myself but due to little sleep I just overlooked it. |
| ||
...er..um..yeah The delete was a brain fart, sorry. |