mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-29 03:26:38 +00:00 
			
		
		
		
	bug fix
This commit is contained in:
		
							parent
							
								
									9353f4d14f
								
							
						
					
					
						commit
						2537384c50
					
				
					 2 changed files with 54 additions and 95 deletions
				
			
		|  | @ -22,55 +22,59 @@ namespace MWMechanics | ||||||
|     { |     { | ||||||
|         const MWWorld::Ptr target = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();//MWBase::Environment::get().getWorld()->getPtr(mTargetId, false);
 |         const MWWorld::Ptr target = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();//MWBase::Environment::get().getWorld()->getPtr(mTargetId, false);
 | ||||||
| 
 | 
 | ||||||
|         MWMechanics::DrawState_ state = MWWorld::Class::get(actor).getNpcStats(actor).getDrawState(); |         if(actor.getTypeName() == typeid(ESM::NPC).name()) | ||||||
|         if (state == MWMechanics::DrawState_Spell || state == MWMechanics::DrawState_Nothing) |  | ||||||
|             MWWorld::Class::get(actor).getNpcStats(actor).setDrawState(MWMechanics::DrawState_Weapon);     |  | ||||||
|         MWWorld::Class::get(actor).getCreatureStats(actor).setAttackingOrSpell(true); |  | ||||||
| 
 |  | ||||||
|         ESM::Position pos = actor.getRefData().getPosition(); |  | ||||||
|         const ESM::Pathgrid *pathgrid = |  | ||||||
|             MWBase::Environment::get().getWorld()->getStore().get<ESM::Pathgrid>().search(*actor.getCell()->mCell); |  | ||||||
| 
 |  | ||||||
|         int cellX = actor.getCell()->mCell->mData.mX; |  | ||||||
|         int cellY = actor.getCell()->mCell->mData.mY; |  | ||||||
|         float xCell = 0; |  | ||||||
|         float yCell = 0; |  | ||||||
| 
 |  | ||||||
|         if (actor.getCell()->mCell->isExterior()) |  | ||||||
|         { |         { | ||||||
|             xCell = actor.getCell()->mCell->mData.mX * ESM::Land::REAL_SIZE; | 
 | ||||||
|             yCell = actor.getCell()->mCell->mData.mY * ESM::Land::REAL_SIZE; |             MWMechanics::DrawState_ state = MWWorld::Class::get(actor).getNpcStats(actor).getDrawState(); | ||||||
|  |             if (state == MWMechanics::DrawState_Spell || state == MWMechanics::DrawState_Nothing) | ||||||
|  |                 MWWorld::Class::get(actor).getNpcStats(actor).setDrawState(MWMechanics::DrawState_Weapon);     | ||||||
|  |             MWWorld::Class::get(actor).getCreatureStats(actor).setAttackingOrSpell(true); | ||||||
|  | 
 | ||||||
|  |             ESM::Position pos = actor.getRefData().getPosition(); | ||||||
|  |             const ESM::Pathgrid *pathgrid = | ||||||
|  |                 MWBase::Environment::get().getWorld()->getStore().get<ESM::Pathgrid>().search(*actor.getCell()->mCell); | ||||||
|  | 
 | ||||||
|  |             int cellX = actor.getCell()->mCell->mData.mX; | ||||||
|  |             int cellY = actor.getCell()->mCell->mData.mY; | ||||||
|  |             float xCell = 0; | ||||||
|  |             float yCell = 0; | ||||||
|  | 
 | ||||||
|  |             if (actor.getCell()->mCell->isExterior()) | ||||||
|  |             { | ||||||
|  |                 xCell = actor.getCell()->mCell->mData.mX * ESM::Land::REAL_SIZE; | ||||||
|  |                 yCell = actor.getCell()->mCell->mData.mY * ESM::Land::REAL_SIZE; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             ESM::Pathgrid::Point dest; | ||||||
|  |             dest.mX = target.getRefData().getPosition().pos[0]; | ||||||
|  |             dest.mY = target.getRefData().getPosition().pos[1]; | ||||||
|  |             dest.mZ = target.getRefData().getPosition().pos[2]; | ||||||
|  | 
 | ||||||
|  |             ESM::Pathgrid::Point start; | ||||||
|  |             start.mX = pos.pos[0]; | ||||||
|  |             start.mY = pos.pos[1]; | ||||||
|  |             start.mZ = pos.pos[2]; | ||||||
|  | 
 | ||||||
|  |             std::cout << start.mX << " " << dest.mX << "\n"; | ||||||
|  | 
 | ||||||
|  |             mPathFinder.buildPath(start, dest, pathgrid, xCell, yCell, true); | ||||||
|  | 
 | ||||||
|  |             mPathFinder.checkPathCompleted(pos.pos[0],pos.pos[1],pos.pos[2]) | ||||||
|  | 
 | ||||||
|  |             float zAngle = mPathFinder.getZAngleToNext(pos.pos[0], pos.pos[1]); | ||||||
|  |             std::cout << zAngle; | ||||||
|  |             MWBase::Environment::get().getWorld()->rotateObject(actor, 0, 0, zAngle, false); | ||||||
|  |             MWWorld::Class::get(actor).getMovementSettings(actor).mPosition[1] = 1; | ||||||
|  |              | ||||||
|  |             float range = 100; | ||||||
|  | 
 | ||||||
|  |             if((dest.mX - start.mX)*(dest.mX - start.mX)+(dest.mY - start.mY)*(dest.mY - start.mY)+(dest.mZ - start.mZ)*(dest.mZ - start.mZ) | ||||||
|  |                 < range*range) | ||||||
|  |             { | ||||||
|  |                 MWWorld::Class::get(actor).getMovementSettings(actor).mPosition[1] = 0; | ||||||
|  |                 //MWWorld::Class::get(actor).getCreatureStats(actor).setAttackingOrSpell(!MWWorld::Class::get(actor).getCreatureStats(actor).getAttackingOrSpell());
 | ||||||
|  |             } | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         ESM::Pathgrid::Point dest; |  | ||||||
|         dest.mX = target.getRefData().getPosition().pos[0]; |  | ||||||
|         dest.mY = target.getRefData().getPosition().pos[1]; |  | ||||||
|         dest.mZ = target.getRefData().getPosition().pos[2]; |  | ||||||
| 
 |  | ||||||
|         ESM::Pathgrid::Point start; |  | ||||||
|         start.mX = pos.pos[0]; |  | ||||||
|         start.mY = pos.pos[1]; |  | ||||||
|         start.mZ = pos.pos[2]; |  | ||||||
| 
 |  | ||||||
|         std::cout << start.mX << " " << dest.mX << "\n"; |  | ||||||
| 
 |  | ||||||
|         mPathFinder.buildPath(start, dest, pathgrid, xCell, yCell, true); |  | ||||||
| 
 |  | ||||||
|         if(mPathFinder.checkPathCompleted(pos.pos[0],pos.pos[1],pos.pos[2])) |  | ||||||
|         { |  | ||||||
|             MWWorld::Class::get(actor).getMovementSettings(actor).mPosition[1] = 0; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         float zAngle = mPathFinder.getZAngleToNext(pos.pos[0], pos.pos[1]); |  | ||||||
|         std::cout << zAngle; |  | ||||||
|         MWBase::Environment::get().getWorld()->rotateObject(actor, 0, 0, zAngle, false); |  | ||||||
|         MWWorld::Class::get(actor).getMovementSettings(actor).mPosition[1] = 1; |  | ||||||
| 
 |  | ||||||
|         if(dest.mX - start.mX < 100) |  | ||||||
|         { |  | ||||||
|             //MWWorld::Class::get(actor).getCreatureStats(actor).setAttackingOrSpell(false);
 |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -68,57 +68,12 @@ void MWMechanics::AiSequence::execute (const MWWorld::Ptr& actor) | ||||||
|     { |     { | ||||||
|         if(mCombat) |         if(mCombat) | ||||||
|         { |         { | ||||||
|             //mCombatPackage->execute(actor);
 |             mCombatPackage->execute(actor); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             //mCombat = true;
 |             mCombat = true; | ||||||
|             //mCombatPackage = new AiCombat("player");
 |             mCombatPackage = new AiCombat("player"); | ||||||
| 
 |  | ||||||
|             /*if(actor != MWBase::Environment::get().getWorld()->getPlayer().getPlayer())
 |  | ||||||
|             { |  | ||||||
|             MWMechanics::DrawState_ state = MWWorld::Class::get(actor).getNpcStats(actor).getDrawState(); |  | ||||||
|             if (state == MWMechanics::DrawState_Spell || state == MWMechanics::DrawState_Nothing) |  | ||||||
|             MWWorld::Class::get(actor).getNpcStats(actor).setDrawState(MWMechanics::DrawState_Weapon);     |  | ||||||
|             MWWorld::Class::get(actor).getCreatureStats(actor).setAttackingOrSpell(true); |  | ||||||
| 
 |  | ||||||
|             MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); |  | ||||||
|             ESM::Position pos = actor.getRefData().getPosition(); |  | ||||||
|             const ESM::Pathgrid *pathgrid = |  | ||||||
|             MWBase::Environment::get().getWorld()->getStore().get<ESM::Pathgrid>().search(*actor.getCell()->mCell); |  | ||||||
| 
 |  | ||||||
|             int cellX = actor.getCell()->mCell->mData.mX; |  | ||||||
|             int cellY = actor.getCell()->mCell->mData.mY; |  | ||||||
|             float xCell = 0; |  | ||||||
|             float yCell = 0; |  | ||||||
| 
 |  | ||||||
|             if (actor.getCell()->mCell->isExterior()) |  | ||||||
|             { |  | ||||||
|             xCell = actor.getCell()->mCell->mData.mX * ESM::Land::REAL_SIZE; |  | ||||||
|             yCell = actor.getCell()->mCell->mData.mY * ESM::Land::REAL_SIZE; |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             ESM::Pathgrid::Point dest; |  | ||||||
|             dest.mX = player.getRefData().getPosition().pos[0]; |  | ||||||
|             dest.mY = player.getRefData().getPosition().pos[1]; |  | ||||||
|             dest.mZ = player.getRefData().getPosition().pos[2]; |  | ||||||
| 
 |  | ||||||
|             ESM::Pathgrid::Point start; |  | ||||||
|             start.mX = pos.pos[0]; |  | ||||||
|             start.mY = pos.pos[1]; |  | ||||||
|             start.mZ = pos.pos[2]; |  | ||||||
| 
 |  | ||||||
|             PathFinder mPathFinder; |  | ||||||
|             mPathFinder.buildPath(start, dest, pathgrid, xCell, yCell, true); |  | ||||||
|             float zAngle = mPathFinder.getZAngleToNext(pos.pos[0], pos.pos[1]); |  | ||||||
|             MWBase::Environment::get().getWorld()->rotateObject(actor, 0, 0, zAngle, false); |  | ||||||
|             MWWorld::Class::get(actor).getMovementSettings(actor).mPosition[1] = 1; |  | ||||||
| 
 |  | ||||||
|             if(dest.mX - start.mX < 100) |  | ||||||
|             { |  | ||||||
|             MWWorld::Class::get(actor).getCreatureStats(actor).setAttackingOrSpell(false); |  | ||||||
|             } |  | ||||||
|             }*/ |  | ||||||
|             if (!mPackages.empty()) |             if (!mPackages.empty()) | ||||||
|             { |             { | ||||||
|                 if (mPackages.front()->execute (actor)) |                 if (mPackages.front()->execute (actor)) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue