void SpawnModel::delItem(const Item* item) { int index = findItemIndex(item); beginRemoveRows(QModelIndex(), index, index); m_items.removeAt(index); endRemoveRows(); }
void SpawnModel::changeItem(const Item* item, uint32_t changeType) { int itemIndex = findItemIndex(item); emit dataChanged(index(itemIndex, 0), index(itemIndex, tSpawnColMaxCols)); }
void cBuilder::parseInput() { sObjectPart *part = 0; sPlayerInput *input = mInput->inputGet(0); bool update = false; // Get the current selected 'part' of the object if(mCurrentObject) part = mCurrentObject->partGet(); // Left if(input->mLeft) { if( part && mDragMode ) { switch( part->mDragDirection ) { case eDirectionLeft: part->mLength++; break; case eDirectionRight: part->mLength--; break; default: break; } } else mCursorX -= 4; update = true; } // Right if(input->mRight) { if( part && mDragMode ) { switch( part->mDragDirection ) { case eDirectionLeft: part->mLength--; break; case eDirectionRight: part->mLength++; break; default: break; } } else mCursorX += 4; update = true; } // Down if(input->mDown) { if( part && mDragMode ) { switch( part->mDragDirection ) { case eDirectionDown: part->mLength++; break; case eDirectionUp: part->mLength--; break; default: break; } } else mCursorY += 8; update = true; } // Up if(input->mUp) { if( part && mDragMode ) { switch( part->mDragDirection ) { case eDirectionDown: part->mLength--; break; case eDirectionUp: part->mLength++; break; default: break; } } else mCursorY -= 8; update = true; } // if(part && ((int) part->mLength) < 1) part->mLength = 1; // Button if(input->mButton) { eventProcess( true ); if( part && part->mDrags == true ) { if( mDragMode == false ) mDragMode = true; else { mDragMode = false; if(mLinkMode) { if(mOriginalObject) { mOriginalObject->mLinkedSet( findItemIndex( mCurrentObject ) ); mOriginalObject->mLinked2Set( mCurrentRoom->mNumber ); } mSearchObject = eObjectNone; mLinkMode = false; mCurrentObject = 0; } else if(mCurrentObject) { mCurrentObject->partPlace(); } } } else { mDragMode = false; if(mLinkMode) { if(mOriginalObject) { mOriginalObject->mLinkedSet( findItemIndex( mCurrentObject ) ); mOriginalObject->mLinked2Set( mCurrentRoom->mNumber ); } mSearchObject = eObjectNone; mLinkMode = false; mCurrentObject = 0; } else if(mCurrentObject) { mCurrentObject->partPlace(); } } update = true; } // ESC: Quit builder if( mInput->restoreGet() ) { mTest = false; mQuit = true; return; } // F1: Save Castle To Disk if( mInput->runStopGet() ) castleSaveToDisk(); if( mInput->f3Get() ) { mapBuilder(); update = true; } // F4: Quit builder in test castle mode if( mInput->f4Get() ) { mTest = true; mQuit = true; } // Check cursor position to see if its outside screen range int downWidth = 1; int downHeight = 1; if(mCurrentObject) { downHeight= mCurrentObject->partGet()->mCursorHeight; downWidth = mCurrentObject->partGet()->mCursorWidth; } downHeight *= 8; downWidth *= 4; // Cursor minimum and maximums if( (mCursorX + downWidth) > 0xB0) mCursorX = 0xB0 - downWidth; if( mCursorX < 0x10 ) mCursorX = 0x10; if( mCursorY > 0xF0 ) mCursorY = 0; if( (mCursorY + downHeight) > 0xC8 ) mCursorY = 0xC8 - downHeight; // Does the cursor actually need updating if(update) cursorObjectUpdate(); }
void cBuilder::mainLoop() { mQuit = false; mIntro = false; mNoInput = true; if( mStartCastle != -2 && mStartCastle > -1 ) { // Load Castle mCastle = mCreepParent->castleGet(); mCastle->castleLoad( this ); } else { if(mStartCastle != -2) { // New Castle mScreen->levelNameSet("Untitled"); mCastle = new cCastle( this, 0 ); save( false ); } } // Set the screen ptrs mScreen->bitmapLoad( &mMemory[ 0xE000 ], &mMemory[ 0xCC00 ], &mMemory[ 0xD800 ], 0 ); // Prep Cursor mScreen->cursorSet( mCursorX, mCursorY ); mScreen->cursorEnabled(true); // Change to first room roomChange(mMemory[ 0x7803 ]); // while(!mQuit) { byte key = tolower( mInput->keyGet() ); // Check keyboard input switch(key) { case 0x02: // '1' Set player one starting door if( mCurrentObject && mCurrentObject->objectTypeGet() == eObjectDoor ) { mCastle->mStart_Room_Player1Set(mCurrentRoom->mNumber); mCastle->mStart_Door_Player1Set(findItemIndex( mCurrentObject )); castlePrepare(); } break; case 0x03: // '2' Set player two starting door if( mCurrentObject && mCurrentObject->objectTypeGet() == eObjectDoor ) { mCastle->mStart_Room_Player2Set(mCurrentRoom->mNumber); mCastle->mStart_Door_Player2Set(findItemIndex( mCurrentObject )); castlePrepare(); } break; case 0x10: // 'q' Change Selected Placement Object 'Up' selectedObjectChange( true ); break; case 0x1E: // 'a' Change Selected Placement Object 'Down' selectedObjectChange( false ); break; case 0x1F: // 's' Object State if(mCurrentObject) { mCurrentObject->stateChange(); castlePrepare(); } break; case 0x1A: // '[' Select a placed object selectPlacedObject( false ); break; case 0x1B: // ']' Select a placed object selectPlacedObject( true ); break; case 0x20: // 'd' object direction if( mCurrentObject ) { mCurrentObject->directionChange(); castlePrepare(); } break; case 0x26: // 'l' Link Objects selectedObjectLink(); break; case 0x0C: {// '-' Previous Room int newRoom = ((char) mCurrentRoom->mNumber) - 1; if(newRoom < 0) newRoom = 0; roomChange( newRoom ); break; } case 0x0D: {// '=' Next Room int newRoom = ((char) mCurrentRoom->mNumber) + 1; //if( newRoom >= (int) mRooms.size() ) // newRoom = mRooms.size() - 1; roomChange( newRoom ); break; } case 0x21: // 'f' edit final room if( mCastle->mFinalRoomGet() == mCurrentRoom ) roomChange(0); else roomChange(-1); break; case 0x73: // 'Delete' Delete selected object selectedObjectDelete(); break; default: /*if(key) { cout << "0x"; cout << hex << (int) key << endl; }*/ break; } // Check 'joystick' input parseInput(); interruptWait( 2 ); // Draw Sprite_Execute(); object_Execute(); // Redraw screen hw_Update(); } mScreen->cursorEnabled(false); if( mTest ) save( true ); }