예제 #1
0
파일: trigger.cpp 프로젝트: paud/d2x-xl
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;
}
예제 #2
0
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