Well, I think it's the collision, here is some code demonstrating colliding boxes or slots in this case, now the inventory type creates it's own box or slot and also the mouse cursor has it's own slot, the slot type handles the slot drawing and also collition detection, the problem is in the inventory Draw it's asking if the slots have collided and if so DrawText at the m_slot.m_x now I was assuming it would draw it at the Inventory's slot x and y but it's drawing the text on both? Which is strange considering I am using composition here, i.e. m_slot:CSlot;
Thanks for any possible help here :)
Thanks for any possible help here :)
SuperStrict Type CSlot Field m_x:Int, m_y:Int; Field m_red:Int, m_green:Int, m_blue:Int; Field m_mouseSelected:Int = False; Function Create:CSlot(x:Int, y:int, red:Int, green:Int, blue:Int) Local slot:CSlot = New CSlot; slot.m_x = x; slot.m_y = y; slot.m_red = red; slot.m_green = green; slot.m_blue = blue; object_list.AddLast(slot); return slot; End Function Method Draw() if m_mouseSelected m_x = MouseX(); m_y = MouseY(); SetColor(200, 0, 0); DrawRect(Self.m_x, Self.m_y, 30, 30); DrawText(Self.m_x, Self.m_x, Self.m_y+30); DrawText(Self.m_y, Self.m_x+30, Self.m_y+30); Else SetColor(150, 150, 150); DrawRect(Self.m_x, Self.m_y, 30, 30); DrawText(Self.m_x, Self.m_x, Self.m_y+30); DrawText(Self.m_y, Self.m_x+30, Self.m_y+30); endif End Method Method collide:int() For Local slot:CSlot = eachin object_list If slot <> Self Then If RectsOverlap(Self.m_x, Self.m_y, 30, 30, slot.m_x, slot.m_y, 30, 30) return True; End If End If Next End Method Method RectsOverlap:int(x0:Int, y0:Int, w0:Int, h0:Int, x2:Int, y2:Int, w2:Int, h2:Int) If x0 > (x2 + w2) Or (x0 + w0) < x2 Then Return False If y0 > (y2 + h2) Or (y0 + h0) < y2 Then Return False Return True End Method End Type Type CInventory Field m_x:Int, m_y:Int; Field m_slot:CSlot; Function Create:CInventory(x:Int, y:int) Local inv:CInventory = New CInventory; inv.m_x = x; inv.m_y = y; inv.createSlot(); object_list.AddLast(inv); return inv; End Function Method createSlot() Self.m_slot = CSlot.Create(m_x, m_y, 150, 150, 150); Self.m_slot.m_mouseSelected = False; object_list.AddLast(Self.m_slot); End Method Method Draw() For Self.m_slot:CSlot = eachin object_list Self.m_slot.Draw() Next For Self.m_slot = eachin object_list if Self.m_slot.collide() DrawText("collided", Self.m_slot.m_x, Self.m_slot.m_y-25); endif Next End Method End Type Type CMouse Field m_x:Int, m_y:Int; Field m_slot:CSlot; Function Create:CMouse() Local mouse:CMouse = New CMouse; mouse.createSlot(); object_list.AddLast(mouse); return mouse; End Function Method createSlot() Self.m_slot = CSlot.Create(m_x, m_y, 200, 0, 0); Self.m_slot.m_mouseSelected = True; object_list.AddLast(m_slot); End Method Method Draw() For Self.m_slot = EachIn object_list Self.m_slot.Draw(); Next End Method End Type Graphics(800, 600); Global object_list:TList = New TList; Local inventory:CInventory = CInventory.Create(50, 50); Local mouse:CMouse = CMouse.Create(); While Not KeyHit(KEY_ESCAPE) Cls SortList(object_list); inventory.Draw(); mouse.Draw(); Flip Wend End