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.
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()
End
See...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.