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. |