当前位置: 首页>>代码示例>>C++>>正文


C++ Hotspot::setFrameNumber方法代码示例

本文整理汇总了C++中Hotspot::setFrameNumber方法的典型用法代码示例。如果您正苦于以下问题:C++ Hotspot::setFrameNumber方法的具体用法?C++ Hotspot::setFrameNumber怎么用?C++ Hotspot::setFrameNumber使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Hotspot的用法示例。


在下文中一共展示了Hotspot::setFrameNumber方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: fightHandler

void FightsManager::fightHandler(Hotspot &h, uint16 moveOffset) {
	Resources &res = Resources::getReference();
	FighterRecord &fighter = getDetails(h.hotspotId());
	FighterRecord &opponent = getDetails(fighter.fwenemy_ad);

	uint16 v1, v2;
	bool breakFlag = false;

	while (!breakFlag) {
		if (moveOffset == 0) {
			// Player is doing nothing, so check the move number
			moveOffset = getWord(FIGHT_PLAYER_MOVE_TABLE + (fighter.fwmove_number << 1));

			debugC(ERROR_DETAILED, kLureDebugFights,
				"Hotspot %xh fight move=%d, new offset=%xh",
				h.hotspotId(), fighter.fwmove_number, moveOffset);

			if (moveOffset == 0)
				return;

			fighter.fwseq_no = fighter.fwmove_number;
			fighter.fwseq_ad = moveOffset;
		}

		uint16 moveValue = getWord(moveOffset);
		debugC(ERROR_DETAILED, kLureDebugFights,
			"Hotspot %xh script offset=%xh value=%xh",
			h.hotspotId(), moveOffset, moveValue);
		moveOffset += sizeof(uint16);

		if ((moveValue & 0x8000) == 0) {
			// Set frame to specified number
			h.setFrameNumber(moveValue);

			// Set the new fighter position
			int16 newX, newY;
			newX = h.x() + (int16)getWord(moveOffset);
			if (newX < 32) newX = 32;
			if (newX > 240) newX = 240;
			newY = h.y() + (int16)getWord(moveOffset + 2);
			h.setPosition(newX, newY);

			if (fighter.fwweapon != 0) {
				Hotspot *weaponHotspot = res.getActiveHotspot(fighter.fwweapon);
				assert(weaponHotspot);

				uint16 newFrameNumber = getWord(moveOffset + 4);
				int16 xChange = (int16)getWord(moveOffset + 6);
				int16 yChange = (int16)getWord(moveOffset + 8);

				weaponHotspot->setFrameNumber(newFrameNumber);
				weaponHotspot->setPosition(h.x() + xChange, h.y() + yChange);
			}

			moveOffset += 5 * sizeof(uint16);
			fighter.fwseq_ad = moveOffset;
			return;
		}

		switch (moveValue) {
		case 0xFFFA:
			// Walk left
			if ((fighter.fwmove_number == 5) || (fighter.fwmove_number == 10)) {
				if (h.x() < 32) {
					breakFlag = true;
				} else {
					h.setPosition(h.x() - 4, h.y());
					fighter.fwtrue_x = h.x();
					if (fetchFighterDistance(fighter, opponent) < FIGHT_DISTANCE) {
						h.setPosition(h.x() + 4, h.y());
						fighter.fwtrue_x += 4;
						breakFlag = true;
					} else {
						removeWeapon(fighter.fwweapon);
						fighter.fwtrue_x = h.x();
						fighter.fwtrue_y = h.y();

						uint16 frameNum = (fighter.fwwalk_roll == 7) ? 0 :
							fighter.fwwalk_roll + 1;
						fighter.fwwalk_roll = frameNum;
						fighter.fwseq_ad = moveOffset;
						h.setFrameNumber(frameNum);
						return;
					}
				}
			} else {
				// Signal to start a new action
				moveOffset = 0;
			}
			break;

		case 0xFFF9:
			// Walk right
			if ((fighter.fwmove_number == 9) || (fighter.fwmove_number == 14)) {
				if (h.x() >= 240) {
					breakFlag = true;
				} else {
					removeWeapon(fighter.fwweapon);
					h.setPosition(h.x() + 4, h.y());
					fighter.fwtrue_x = h.x();
//.........这里部分代码省略.........
开发者ID:AReim1982,项目名称:scummvm,代码行数:101,代码来源:fights.cpp


注:本文中的Hotspot::setFrameNumber方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。