MCPcopy Create free account
hub / github.com/crossuo/crossuo / AddMultiObject

Method AddMultiObject

src/GameObjects/GameItem.cpp:879–942  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

877}
878
879void CGameItem::AddMultiObject(CMultiObject *obj)
880{
881 if (m_Items == nullptr)
882 {
883 m_Items = new CMulti(obj->GetX(), obj->GetY());
884 m_Items->m_Next = nullptr;
885 m_Items->m_Items = obj;
886 obj->m_Next = nullptr;
887 obj->m_Prev = nullptr;
888 }
889 else
890 {
891 CMulti *multi = GetMultiAtXY(obj->GetX(), obj->GetY());
892 if (multi != nullptr)
893 {
894 QFOR(multiobj, multi->m_Items, CMultiObject *)
895 {
896 if (obj->GetZ() < multiobj->GetZ())
897 {
898 if (multiobj->m_Prev == nullptr)
899 {
900 multi->Insert(multiobj->m_Prev, obj);
901 }
902 else
903 {
904 multi->Insert(multiobj, obj);
905 }
906
907 return;
908 }
909
910 if (multiobj->m_Next == nullptr)
911 {
912 multiobj->m_Next = obj;
913 obj->m_Prev = multiobj;
914 obj->m_Next = nullptr;
915
916 return;
917 }
918 }
919
920 //Если пришли сюда - что-то пошло не так
921 }
922 else
923 {
924 // FIXME: check potential leak
925 CMulti *newmulti = new CMulti(obj->GetX(), obj->GetY());
926 newmulti->m_Next = nullptr;
927 newmulti->m_Items = obj;
928 obj->m_Next = nullptr;
929 obj->m_Prev = nullptr;
930
931 QFOR(subMulti, m_Items, CMulti *)
932 {
933 if (subMulti->m_Next == nullptr)
934 {
935 subMulti->m_Next = newmulti;
936 newmulti->m_Prev = subMulti;

Callers

nothing calls this directly

Calls 5

GetYMethod · 0.80
GetZMethod · 0.80
QFORFunction · 0.70
GetXMethod · 0.45
InsertMethod · 0.45

Tested by

no test coverage detected