From 5a49dcedbd2c2d1c671912cf01f8ff461efe3d92 Mon Sep 17 00:00:00 2001 From: KebsCS Date: Mon, 16 Sep 2024 03:15:41 +0200 Subject: [PATCH] Change editor teleport number behavior --- src/game/editor/editor.cpp | 24 +++-- src/game/editor/editor.h | 25 +++-- src/game/editor/mapitems/layer_tele.cpp | 31 +++--- src/game/editor/mapitems/layer_tele.h | 5 +- src/game/editor/mapitems/layer_tiles.cpp | 12 +-- src/game/editor/popups.cpp | 130 +++++++++++++---------- 6 files changed, 128 insertions(+), 99 deletions(-) diff --git a/src/game/editor/editor.cpp b/src/game/editor/editor.cpp index 78538e45b..6c765d854 100644 --- a/src/game/editor/editor.cpp +++ b/src/game/editor/editor.cpp @@ -1290,7 +1290,7 @@ void CEditor::DoToolbarLayers(CUIRect ToolBar) { pButtonName = "Tele"; pfnPopupFunc = PopupTele; - Rows = 3; + Rows = m_TeleNumbers.size() + 1; } if(pButtonName != nullptr) @@ -8050,7 +8050,7 @@ void CEditor::Render() return pLayer->m_Type == LAYERTYPE_TILES && std::static_pointer_cast(pLayer)->m_Tele; }); if(HasTeleTiles) - str_copy(m_aTooltip, "Use shift+mousewheel up/down to adjust the tele numbers. Use ctrl+f to change all tele numbers to the first unused number."); + str_copy(m_aTooltip, "Use shift+mousewheel up/down to adjust the tele number. Use ctrl+f to change current tele number to the first unused number."); if(Input()->ShiftIsPressed()) { @@ -8995,9 +8995,6 @@ void CEditor::AdjustBrushSpecialTiles(bool UseNextFree, int Adjust) // Only handle tele, switch and tune layers if(pLayerTiles->m_Tele) { - int NextFreeTeleNumber = FindNextFreeTeleNumber(); - int NextFreeCPNumber = FindNextFreeTeleNumber(true); - std::shared_ptr pTeleLayer = std::static_pointer_cast(pLayer); for(int y = 0; y < pTeleLayer->m_Height; y++) { @@ -9009,13 +9006,18 @@ void CEditor::AdjustBrushSpecialTiles(bool UseNextFree, int Adjust) if(UseNextFree) { - if(IsTeleTileCheckpoint(pTeleLayer->m_pTiles[i].m_Index)) - pTeleLayer->m_pTeleTile[i].m_Number = NextFreeCPNumber; - else - pTeleLayer->m_pTeleTile[i].m_Number = NextFreeTeleNumber; + pTeleLayer->m_pTeleTile[i].m_Number = FindNextFreeTeleNumber(pTeleLayer->m_pTiles[i].m_Index); } else AdjustNumber(pTeleLayer->m_pTeleTile[i].m_Number); + + if(m_TeleNumbers[pTeleLayer->m_pTiles[i].m_Index] != pTeleLayer->m_pTeleTile[i].m_Number) + { + if(UseNextFree || Adjust != 0) + m_TeleNumbers[pTeleLayer->m_pTiles[i].m_Index] = pTeleLayer->m_pTeleTile[i].m_Number; + else if(!UseNextFree && Adjust == 0) + pTeleLayer->m_pTeleTile[i].m_Number = m_TeleNumbers[pTeleLayer->m_pTiles[i].m_Index]; + } } } } @@ -9075,12 +9077,12 @@ int CEditor::FindNextFreeSwitchNumber() return Number; } -int CEditor::FindNextFreeTeleNumber(bool IsCheckpoint) +int CEditor::FindNextFreeTeleNumber(int Index) { int Number = -1; for(int i = 1; i <= 255; i++) { - if(!m_Map.m_pTeleLayer->ContainsElementWithId(i, IsCheckpoint)) + if(!m_Map.m_pTeleLayer->ContainsElementWithId(i, Index)) { Number = i; break; diff --git a/src/game/editor/editor.h b/src/game/editor/editor.h index 6206cea25..02ce453b2 100644 --- a/src/game/editor/editor.h +++ b/src/game/editor/editor.h @@ -218,8 +218,15 @@ public: void MakeTuneLayer(const std::shared_ptr &pLayer); }; -struct CProperty +class CProperty { +public: + CProperty(const char *name, int value, int type, int min, int max) : + m_pName(name), m_Value(value), m_Type(type), m_Min(min), m_Max(max) {} + + CProperty(std::nullptr_t) : + m_pName(nullptr), m_Value(0), m_Type(0), m_Min(0), m_Max(0) {} + const char *m_pName; int m_Value; int m_Type; @@ -428,8 +435,15 @@ public: // DDRace - m_TeleNumber = 1; - m_TeleCheckpointNumber = 1; + m_TeleNumbers = { + {TILE_TELEINEVIL, 1}, + {TILE_TELEINWEAPON, 1}, + {TILE_TELEINHOOK, 1}, + {TILE_TELEIN, 1}, + {TILE_TELEOUT, 1}, + {TILE_TELECHECK, 1}, + {TILE_TELECHECKOUT, 1}}; + m_SwitchNum = 1; m_TuningNum = 1; m_SwitchDelay = 0; @@ -1127,9 +1141,8 @@ public: IGraphics::CTextureHandle GetSwitchTexture(); IGraphics::CTextureHandle GetTuneTexture(); - unsigned char m_TeleNumber; - unsigned char m_TeleCheckpointNumber; unsigned char m_ViewTeleNumber; + std::map m_TeleNumbers; unsigned char m_TuningNum; @@ -1143,7 +1156,7 @@ public: void AdjustBrushSpecialTiles(bool UseNextFree, int Adjust = 0); int FindNextFreeSwitchNumber(); - int FindNextFreeTeleNumber(bool IsCheckpoint = false); + int FindNextFreeTeleNumber(int Index); // Undo/Redo CEditorHistory m_EditorHistory; diff --git a/src/game/editor/mapitems/layer_tele.cpp b/src/game/editor/mapitems/layer_tele.cpp index 977344a58..28343632e 100644 --- a/src/game/editor/mapitems/layer_tele.cpp +++ b/src/game/editor/mapitems/layer_tele.cpp @@ -77,7 +77,7 @@ void CLayerTele::BrushDraw(std::shared_ptr pBrush, float wx, float wy) int sx = ConvertX(wx); int sy = ConvertY(wy); if(str_comp(pTeleLayer->m_aFileName, m_pEditor->m_aFileName)) - m_pEditor->m_TeleNumber = pTeleLayer->m_TeleNum; + m_pEditor->m_TeleNumbers = pTeleLayer->m_TeleNumbers; bool Destructive = m_pEditor->m_BrushDrawDestructive || IsEmpty(pTeleLayer); @@ -99,22 +99,19 @@ void CLayerTele::BrushDraw(std::shared_ptr pBrush, float wx, float wy) m_pTeleTile[Index].m_Type, m_pTiles[Index].m_Index}; - if((m_pEditor->m_AllowPlaceUnusedTiles || IsValidTeleTile(pTeleLayer->m_pTiles[y * pTeleLayer->m_Width + x].m_Index)) && pTeleLayer->m_pTiles[y * pTeleLayer->m_Width + x].m_Index != TILE_AIR) + unsigned char TgtIndex = pTeleLayer->m_pTiles[y * pTeleLayer->m_Width + x].m_Index; + if((m_pEditor->m_AllowPlaceUnusedTiles || IsValidTeleTile(TgtIndex)) && TgtIndex != TILE_AIR) { - bool IsCheckpoint = IsTeleTileCheckpoint(pTeleLayer->m_pTiles[y * pTeleLayer->m_Width + x].m_Index); - if(!IsCheckpoint && !IsTeleTileNumberUsed(pTeleLayer->m_pTiles[y * pTeleLayer->m_Width + x].m_Index, false)) + bool IsCheckpoint = IsTeleTileCheckpoint(TgtIndex); + if(!IsCheckpoint && !IsTeleTileNumberUsed(TgtIndex, false)) { // Tele tile number is unused. Set a known value which is not 0, // as tiles with number 0 would be ignored by previous versions. m_pTeleTile[Index].m_Number = 255; } - else if(!IsCheckpoint && m_pEditor->m_TeleNumber != pTeleLayer->m_TeleNum) + else if(m_pEditor->m_TeleNumbers[TgtIndex] != pTeleLayer->m_TeleNumbers[TgtIndex]) { - m_pTeleTile[Index].m_Number = m_pEditor->m_TeleNumber; - } - else if(IsCheckpoint && m_pEditor->m_TeleCheckpointNumber != pTeleLayer->m_TeleCheckpointNum) - { - m_pTeleTile[Index].m_Number = m_pEditor->m_TeleCheckpointNumber; + m_pTeleTile[Index].m_Number = m_pEditor->m_TeleNumbers[TgtIndex]; } else if(pTeleLayer->m_pTeleTile[y * pTeleLayer->m_Width + x].m_Number) { @@ -122,7 +119,7 @@ void CLayerTele::BrushDraw(std::shared_ptr pBrush, float wx, float wy) } else { - if((!IsCheckpoint && !m_pEditor->m_TeleNumber) || (IsCheckpoint && !m_pEditor->m_TeleCheckpointNumber)) + if(!m_pEditor->m_TeleNumbers[TgtIndex]) { m_pTeleTile[Index].m_Number = 0; m_pTeleTile[Index].m_Type = 0; @@ -138,7 +135,7 @@ void CLayerTele::BrushDraw(std::shared_ptr pBrush, float wx, float wy) } else { - m_pTeleTile[Index].m_Number = IsCheckpoint ? m_pEditor->m_TeleCheckpointNumber : m_pEditor->m_TeleNumber; + m_pTeleTile[Index].m_Number = m_pEditor->m_TeleNumbers[TgtIndex]; } } @@ -283,10 +280,8 @@ void CLayerTele::FillSelection(bool Empty, std::shared_ptr pBrush, CUIRe // as tiles with number 0 would be ignored by previous versions. m_pTeleTile[TgtIndex].m_Number = 255; } - else if(!IsCheckpoint && ((pLt->m_pTeleTile[SrcIndex].m_Number == 0 && m_pEditor->m_TeleNumber) || m_pEditor->m_TeleNumber != pLt->m_TeleNum)) - m_pTeleTile[TgtIndex].m_Number = m_pEditor->m_TeleNumber; - else if(IsCheckpoint && ((pLt->m_pTeleTile[SrcIndex].m_Number == 0 && m_pEditor->m_TeleCheckpointNumber) || m_pEditor->m_TeleCheckpointNumber != pLt->m_TeleCheckpointNum)) - m_pTeleTile[TgtIndex].m_Number = m_pEditor->m_TeleCheckpointNumber; + else if((pLt->m_pTeleTile[SrcIndex].m_Number == 0 && m_pEditor->m_TeleNumbers[m_pTiles[TgtIndex].m_Index]) || m_pEditor->m_TeleNumbers[m_pTiles[TgtIndex].m_Index] != pLt->m_TeleNumbers[m_pTiles[TgtIndex].m_Index]) + m_pTeleTile[TgtIndex].m_Number = m_pEditor->m_TeleNumbers[m_pTiles[TgtIndex].m_Index]; else m_pTeleTile[TgtIndex].m_Number = pLt->m_pTeleTile[SrcIndex].m_Number; } @@ -303,13 +298,13 @@ void CLayerTele::FillSelection(bool Empty, std::shared_ptr pBrush, CUIRe FlagModified(sx, sy, w, h); } -bool CLayerTele::ContainsElementWithId(int Id, bool Checkpoint) +bool CLayerTele::ContainsElementWithId(int Id, int Index) { for(int y = 0; y < m_Height; ++y) { for(int x = 0; x < m_Width; ++x) { - if(IsTeleTileNumberUsed(m_pTeleTile[y * m_Width + x].m_Type, Checkpoint) && m_pTeleTile[y * m_Width + x].m_Number == Id) + if(m_pTeleTile[y * m_Width + x].m_Type == Index && m_pTeleTile[y * m_Width + x].m_Number == Id) { return true; } diff --git a/src/game/editor/mapitems/layer_tele.h b/src/game/editor/mapitems/layer_tele.h index 8d1c5570e..267dd2f56 100644 --- a/src/game/editor/mapitems/layer_tele.h +++ b/src/game/editor/mapitems/layer_tele.h @@ -22,8 +22,7 @@ public: ~CLayerTele(); CTeleTile *m_pTeleTile; - unsigned char m_TeleNum; - unsigned char m_TeleCheckpointNum; + std::map m_TeleNumbers; void Resize(int NewW, int NewH) override; void Shift(int Direction) override; @@ -33,7 +32,7 @@ public: void BrushFlipY() override; void BrushRotate(float Amount) override; void FillSelection(bool Empty, std::shared_ptr pBrush, CUIRect Rect) override; - virtual bool ContainsElementWithId(int Id, bool Checkpoint); + virtual bool ContainsElementWithId(int Id, int Index); virtual void GetPos(int Number, int Offset, int &TeleX, int &TeleY); int m_GotoTeleOffset; diff --git a/src/game/editor/mapitems/layer_tiles.cpp b/src/game/editor/mapitems/layer_tiles.cpp index 665a0fec9..58cfc823a 100644 --- a/src/game/editor/mapitems/layer_tiles.cpp +++ b/src/game/editor/mapitems/layer_tiles.cpp @@ -310,17 +310,15 @@ int CLayerTiles::BrushGrab(std::shared_ptr pBrush, CUIRect Rect) for(int x = 0; x < r.w; x++) { pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x] = static_cast(this)->m_pTeleTile[(r.y + y) * m_Width + (r.x + x)]; - if(IsValidTeleTile(pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type)) + unsigned char TgtIndex = pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type; + if(IsValidTeleTile(TgtIndex)) { - if(IsTeleTileNumberUsed(pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type, false)) - m_pEditor->m_TeleNumber = pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Number; - else if(IsTeleTileNumberUsed(pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type, true)) - m_pEditor->m_TeleCheckpointNumber = pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Number; + if(IsTeleTileNumberUsedAny(TgtIndex)) + m_pEditor->m_TeleNumbers[TgtIndex] = pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Number; } } - pGrabbed->m_TeleNum = m_pEditor->m_TeleNumber; - pGrabbed->m_TeleCheckpointNum = m_pEditor->m_TeleCheckpointNumber; + pGrabbed->m_TeleNumbers = m_pEditor->m_TeleNumbers; str_copy(pGrabbed->m_aFileName, m_pEditor->m_aFileName); } diff --git a/src/game/editor/popups.cpp b/src/game/editor/popups.cpp index d1f0d8ab3..9c3692776 100644 --- a/src/game/editor/popups.cpp +++ b/src/game/editor/popups.cpp @@ -2433,23 +2433,29 @@ CUi::EPopupMenuFunctionResult CEditor::PopupTele(void *pContext, CUIRect View, b { CEditor *pEditor = static_cast(pContext); - static int s_PreviousTeleNumber; - static int s_PreviousCheckpointNumber; + const size_t TeleNumbersSize = pEditor->m_TeleNumbers.size(); + + static std::vector s_PreviousTeleNumbers; + if(s_PreviousTeleNumbers.size() != TeleNumbersSize) + s_PreviousTeleNumbers.resize(TeleNumbersSize); static int s_PreviousViewTeleNumber; CUIRect NumberPicker; CUIRect FindEmptySlot; - CUIRect FindFreeTeleSlot, FindFreeCheckpointSlot, FindFreeViewSlot; + CUIRect FindFreeViewSlot; + std::vector FindFreeTeleSlots; + if(FindFreeTeleSlots.size() != TeleNumbersSize) + FindFreeTeleSlots.resize(TeleNumbersSize); View.VSplitRight(15.f, &NumberPicker, &FindEmptySlot); NumberPicker.VSplitRight(2.f, &NumberPicker, nullptr); - FindEmptySlot.HSplitTop(13.0f, &FindFreeTeleSlot, &FindEmptySlot); - FindEmptySlot.HSplitTop(13.0f, &FindFreeCheckpointSlot, &FindEmptySlot); + for(auto &Slot : FindFreeTeleSlots) + FindEmptySlot.HSplitTop(13.0f, &Slot, &FindEmptySlot); FindEmptySlot.HSplitTop(13.0f, &FindFreeViewSlot, &FindEmptySlot); - FindFreeTeleSlot.HMargin(1.0f, &FindFreeTeleSlot); - FindFreeCheckpointSlot.HMargin(1.0f, &FindFreeCheckpointSlot); + for(auto &Slot : FindFreeTeleSlots) + Slot.HMargin(1.0f, &Slot); FindFreeViewSlot.HMargin(1.0f, &FindFreeViewSlot); auto ViewTele = [](CEditor *pEd) -> bool { @@ -2465,79 +2471,95 @@ CUi::EPopupMenuFunctionResult CEditor::PopupTele(void *pContext, CUIRect View, b return false; }; - static std::vector s_vColors = { - ColorRGBA(0.5f, 1, 0.5f, 0.5f), - ColorRGBA(0.5f, 1, 0.5f, 0.5f), - ColorRGBA(0.5f, 1, 0.5f, 0.5f), - }; - enum + static std::vector s_vColors; + if(s_vColors.size() != TeleNumbersSize + 1) { - PROP_TELE = 0, - PROP_TELE_CP, - PROP_TELE_VIEW, - NUM_PROPS, - }; + s_vColors.resize(TeleNumbersSize + 1, ColorRGBA(0.5f, 1, 0.5f, 0.5f)); + } // find next free numbers buttons { // Pressing ctrl+f will find next free numbers for both tele and checkpoints - static int s_NextFreeTelePid = 0; - if(pEditor->DoButton_Editor(&s_NextFreeTelePid, "F", 0, &FindFreeTeleSlot, 0, "[ctrl+f] Find next free tele number") || (Active && pEditor->Input()->ModifierIsPressed() && pEditor->Input()->KeyPress(KEY_F))) + static std::vector s_NextFreeTelePids; + if(s_NextFreeTelePids.size() != TeleNumbersSize) + s_NextFreeTelePids.resize(TeleNumbersSize, 0); + for(size_t i = 0; i < s_NextFreeTelePids.size(); i++) { - int TeleNumber = pEditor->FindNextFreeTeleNumber(); + if(pEditor->DoButton_Editor(&s_NextFreeTelePids[i], "F", 0, &FindFreeTeleSlots[i], 0, "[ctrl+f] Find next free tele number") || (Active && pEditor->Input()->ModifierIsPressed() && pEditor->Input()->KeyPress(KEY_F))) + { + int Tile = (*std::next(pEditor->m_TeleNumbers.begin(), i)).first; + int TeleNumber = pEditor->FindNextFreeTeleNumber(Tile); - if(TeleNumber != -1) - pEditor->m_TeleNumber = TeleNumber; - } - - static int s_NextFreeCheckpointPid = 0; - if(pEditor->DoButton_Editor(&s_NextFreeCheckpointPid, "F", 0, &FindFreeCheckpointSlot, 0, "[ctrl+f] Find next free checkpoint number") || (Active && pEditor->Input()->ModifierIsPressed() && pEditor->Input()->KeyPress(KEY_F))) - { - int CPNumber = pEditor->FindNextFreeTeleNumber(true); - - if(CPNumber != -1) - pEditor->m_TeleCheckpointNumber = CPNumber; + if(TeleNumber != -1) + { + pEditor->m_TeleNumbers[Tile] = TeleNumber; + pEditor->AdjustBrushSpecialTiles(false); + } + } } static int s_NextFreeViewPid = 0; int btn = pEditor->DoButton_Editor(&s_NextFreeViewPid, "N", 0, &FindFreeViewSlot, 0, "[n] Show next tele with this number"); if(btn || (Active && pEditor->Input()->KeyPress(KEY_N))) - s_vColors[PROP_TELE_VIEW] = ViewTele(pEditor) ? ColorRGBA(0.5f, 1, 0.5f, 0.5f) : ColorRGBA(1, 0.5f, 0.5f, 0.5f); + s_vColors[TeleNumbersSize] = ViewTele(pEditor) ? ColorRGBA(0.5f, 1, 0.5f, 0.5f) : ColorRGBA(1, 0.5f, 0.5f, 0.5f); } // number picker { - CProperty aProps[] = { - {"Number", pEditor->m_TeleNumber, PROPTYPE_INT, 1, 255}, - {"Checkpoint", pEditor->m_TeleCheckpointNumber, PROPTYPE_INT, 1, 255}, - {"View", pEditor->m_ViewTeleNumber, PROPTYPE_INT, 1, 255}, - {nullptr}, - }; + static std::map TeleText = { + {TILE_TELEINEVIL, "Red Tele"}, + {TILE_TELEINWEAPON, "Weapon Tele"}, + {TILE_TELEINHOOK, "Hook Tele"}, + {TILE_TELEIN, "Blue Tele"}, + {TILE_TELEOUT, "Tele To"}, + {TILE_TELECHECK, "CP Tele"}, + {TILE_TELECHECKOUT, "CP Tele To"}}; - static int s_aIds[NUM_PROPS] = {0}; + std::vector aProps; + for(size_t i = 0; i < TeleNumbersSize; i++) + { + auto Tele = (*std::next(pEditor->m_TeleNumbers.begin(), i)); + aProps.emplace_back(CProperty{TeleText[Tele.first], Tele.second, PROPTYPE_INT, 1, 255}); + } + aProps.emplace_back(CProperty{"View", pEditor->m_ViewTeleNumber, PROPTYPE_INT, 1, 255}); + aProps.emplace_back(nullptr); + + static std::vector s_aIds; + if(s_aIds.size() != TeleNumbersSize + 2) + { + s_aIds.resize(TeleNumbersSize, 0); + s_aIds.emplace_back(0); // PROP_TELE_VIEW + s_aIds.emplace_back(0); // NUM_PROPS + } int NewVal = 0; - int Prop = pEditor->DoProperties(&NumberPicker, aProps, s_aIds, &NewVal, s_vColors); - if(Prop == PROP_TELE) - pEditor->m_TeleNumber = (NewVal - 1 + 255) % 255 + 1; - else if(Prop == PROP_TELE_CP) - pEditor->m_TeleCheckpointNumber = (NewVal - 1 + 255) % 255 + 1; - else if(Prop == PROP_TELE_VIEW) + int Prop = pEditor->DoProperties(&NumberPicker, aProps.data(), s_aIds.data(), &NewVal, s_vColors); + + if(Prop >= 0 && Prop < static_cast(TeleNumbersSize)) + { + auto Tele = (*std::next(pEditor->m_TeleNumbers.begin(), Prop)); + pEditor->m_TeleNumbers[Tele.first] = (NewVal - 1 + 255) % 255 + 1; + pEditor->AdjustBrushSpecialTiles(false); + } + else if(Prop == static_cast(TeleNumbersSize)) pEditor->m_ViewTeleNumber = (NewVal - 1 + 255) % 255 + 1; - if(s_PreviousTeleNumber == 1 || s_PreviousTeleNumber != pEditor->m_TeleNumber) - s_vColors[PROP_TELE] = pEditor->m_Map.m_pTeleLayer->ContainsElementWithId(pEditor->m_TeleNumber, false) ? ColorRGBA(1, 0.5f, 0.5f, 0.5f) : ColorRGBA(0.5f, 1, 0.5f, 0.5f); - - if(s_PreviousCheckpointNumber == 1 || s_PreviousCheckpointNumber != pEditor->m_TeleCheckpointNumber) - s_vColors[PROP_TELE_CP] = pEditor->m_Map.m_pTeleLayer->ContainsElementWithId(pEditor->m_TeleCheckpointNumber, true) ? ColorRGBA(1, 0.5f, 0.5f, 0.5f) : ColorRGBA(0.5f, 1, 0.5f, 0.5f); + for(size_t i = 0; i < s_PreviousTeleNumbers.size(); i++) + { + auto Tele = (*std::next(pEditor->m_TeleNumbers.begin(), i)); + if(s_PreviousTeleNumbers[i] == 1 || s_PreviousTeleNumbers[i] != Tele.second) + s_vColors[i] = pEditor->m_Map.m_pTeleLayer->ContainsElementWithId(Tele.second, Tele.first) ? ColorRGBA(1, 0.5f, 0.5f, 0.5f) : ColorRGBA(0.5f, 1, 0.5f, 0.5f); + } if(s_PreviousViewTeleNumber != pEditor->m_ViewTeleNumber) - s_vColors[PROP_TELE_VIEW] = ViewTele(pEditor) ? ColorRGBA(0.5f, 1, 0.5f, 0.5f) : ColorRGBA(1, 0.5f, 0.5f, 0.5f); + s_vColors[TeleNumbersSize] = ViewTele(pEditor) ? ColorRGBA(0.5f, 1, 0.5f, 0.5f) : ColorRGBA(1, 0.5f, 0.5f, 0.5f); } - s_PreviousTeleNumber = pEditor->m_TeleNumber; - s_PreviousCheckpointNumber = pEditor->m_TeleCheckpointNumber; + for(size_t i = 0; i < s_PreviousTeleNumbers.size(); i++) + { + s_PreviousTeleNumbers[i] = (*std::next(pEditor->m_TeleNumbers.begin(), i)).second; + } s_PreviousViewTeleNumber = pEditor->m_ViewTeleNumber; return CUi::POPUP_KEEP_OPEN;