示例#1
0
void SpawnModel::delItem(const Item* item)
{
    int index = findItemIndex(item);
    beginRemoveRows(QModelIndex(), index, index);

    m_items.removeAt(index);

    endRemoveRows();
}
示例#2
0
void SpawnModel::changeItem(const Item* item, uint32_t changeType)
{
    int itemIndex = findItemIndex(item);
    emit dataChanged(index(itemIndex, 0),
                     index(itemIndex, tSpawnColMaxCols));
}
示例#3
0
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();
}
示例#4
0
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 );
}