int CMine::DeleteTargetFromTrigger (CDTrigger *trigger, INT16 linknum, bool bAutoDeleteTrigger) { if (!--trigger->num_links) { if (bAutoDeleteTrigger) DeleteTrigger (); return 0; } if (linknum < trigger->num_links) { memcpy (trigger->seg + linknum, trigger->seg + linknum + 1, (trigger->num_links - linknum) * sizeof (*(trigger->seg))); memcpy (trigger->side + linknum, trigger->side + linknum + 1, (trigger->num_links - linknum) * sizeof (*(trigger->side))); } return trigger->num_links; }
VOID ViewTriggers_OnCommand( HWND hwnd, INT id, HWND hwndCtrl, UINT codeNotify ) { INT i, j; HWND hwndList; LRESULT lResult; switch(id) { case IDC_TRIGGER_LIST: if ( codeNotify == LBN_SELCHANGE ) { ViewTriggers_TriggerChanged( hwnd ); } break; case IDC_TRIGGER_NEW: i = pLevel->nTriggers; if (i == MAX_TRIGGERS) { MsgBox( hwnd, MB_ICONEXCLAMATION, "The limit of %d triggers has been reached.", MAX_TRIGGERS ); break; } _fmemset(szNewTriggerName, 0, sizeof(szNewTriggerName)); dNewRadius = 1000.0; dNewHeight = 3000.0; nNewItemType = -1; nNewSoundIndex = -1; wNewFlags = TF_USER_TRIGGER; if (EditTriggerDialog(hwnd) == IDCANCEL) { break; } hwndList = GetDlgItem(hwnd, IDC_TRIGGER_LIST); ListBox_AddString(hwndList, szNewTriggerName); _fmemset(&pLevel->pTriggerData[i], 0, sizeof(TRIGGER)); _fstrcpy(pLevel->pTriggerData[i].trigger_name, szNewTriggerName); pLevel->pTriggerData[i].radius = (float)dNewRadius; pLevel->pTriggerData[i].height = (float)dNewHeight; pLevel->pTriggerData[i].flags = wNewFlags; pLevel->pTriggerData[i].item_type = nNewItemType; pLevel->pTriggerData[i].sound_index = nNewSoundIndex; ++pLevel->nTriggers; ListBox_SetCurSel(hwndList, i); ViewTriggers_TriggerChanged(hwnd); bChange = TRUE; break; case IDC_TRIGGER_DELETE: hwndList = GetDlgItem( hwnd, IDC_TRIGGER_LIST ); lResult = ListBox_GetCurSel( hwndList ); if ( lResult >= 0 && lResult < pLevel->nTriggers ) { i = (INT)lResult; DeleteTrigger( pLevel, i ); ListBox_DeleteString( hwndList, i ); if ( i == 0 ) ListBox_SetCurSel( hwndList, 0 ); else ListBox_SetCurSel( hwndList, i - 1 ); ViewTriggers_TriggerChanged( hwnd ); bChange = TRUE; } break; case IDC_TRIGGER_EDIT: hwndList = GetDlgItem( hwnd, IDC_TRIGGER_LIST ); lResult = ListBox_GetCurSel( hwndList ); if ( lResult >= 0 && lResult < pLevel->nTriggers ) { i = (INT)lResult; _fstrcpy( szNewTriggerName, pLevel->pTriggerData[i].trigger_name ); dNewRadius = (double)pLevel->pTriggerData[i].radius; dNewHeight = (double)pLevel->pTriggerData[i].height; wNewFlags = pLevel->pTriggerData[i].flags; nNewItemType = pLevel->pTriggerData[i].item_type; nNewSoundIndex = pLevel->pTriggerData[i].sound_index; if ( EditTriggerDialog( hwnd ) == IDCANCEL ) { break; } if ( !szNewTriggerName[0] ) { MsgBox( hwnd, MB_ICONEXCLAMATION, "The trigger must be given a name." ); break; } _fmemset( &pLevel->pTriggerData[i], 0, sizeof(TRIGGER) ); _fstrcpy( pLevel->pTriggerData[i].trigger_name, szNewTriggerName ); pLevel->pTriggerData[i].radius = (float)dNewRadius; pLevel->pTriggerData[i].height = (float)dNewHeight; pLevel->pTriggerData[i].flags = wNewFlags; pLevel->pTriggerData[i].item_type = nNewItemType; pLevel->pTriggerData[i].sound_index = nNewSoundIndex; j = ListBox_GetTopIndex(hwndList); ListBox_ResetContent(hwndList); for( i = 0; i < pLevel->nTriggers; ++i ) { ListBox_AddString( hwndList, pLevel->pTriggerData[i].trigger_name ); } ListBox_SetTopIndex( hwndList, j ); ListBox_SetCurSel( hwndList, (INT)lResult ); ViewTriggers_TriggerChanged( hwnd ); bChange = TRUE; } break; case IDOK: case IDCANCEL: if ( hPalCommon ) { DeleteObject( hPalCommon ); hPalCommon = NULL; } EndDialog( hwnd, IDOK ); break; } } // ViewTriggers_OnCommand