mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-03 23:56:43 +00:00 
			
		
		
		
	AI: return back after pursuit
This commit is contained in:
		
							parent
							
								
									3d0631cfcc
								
							
						
					
					
						commit
						74a2cbe696
					
				
					 2 changed files with 23 additions and 20 deletions
				
			
		| 
						 | 
				
			
			@ -308,6 +308,29 @@ void AiSequence::stack (const AiPackage& package, const MWWorld::Ptr& actor, boo
 | 
			
		|||
    if (isActualAiPackage(package.getTypeId()))
 | 
			
		||||
        stopCombat();
 | 
			
		||||
 | 
			
		||||
    // we should return a wandering actor back after combat or pursuit
 | 
			
		||||
    // the same thing for actors without AI packages
 | 
			
		||||
    int currentTypeId = getTypeId();
 | 
			
		||||
    int newTypeId = package.getTypeId();
 | 
			
		||||
    if (currentTypeId <= MWMechanics::AiPackage::TypeIdWander
 | 
			
		||||
        && (newTypeId <= MWMechanics::AiPackage::TypeIdCombat
 | 
			
		||||
        || newTypeId == MWMechanics::AiPackage::TypeIdPursue))
 | 
			
		||||
    {
 | 
			
		||||
        osg::Vec3f dest;
 | 
			
		||||
        if (currentTypeId == MWMechanics::AiPackage::TypeIdWander)
 | 
			
		||||
        {
 | 
			
		||||
            AiPackage* activePackage = getActivePackage();
 | 
			
		||||
            dest = activePackage->getDestination(actor);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            dest = actor.getRefData().getPosition().asVec3();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        MWMechanics::AiTravel travelPackage(dest.x(), dest.y(), dest.z(), true);
 | 
			
		||||
        stack(travelPackage, actor, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // remove previous packages if required
 | 
			
		||||
    if (cancelOther && package.shouldCancelPreviousAi())
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1604,26 +1604,6 @@ namespace MWMechanics
 | 
			
		|||
        if (aiSequence.isInCombat(target))
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        // we should return a wandering actor back after combat
 | 
			
		||||
        // the same thing for actors without AI packages
 | 
			
		||||
        if (aiSequence.getTypeId() <= MWMechanics::AiPackage::TypeIdWander)
 | 
			
		||||
        {
 | 
			
		||||
            int typeId = aiSequence.getTypeId();
 | 
			
		||||
            osg::Vec3f dest;
 | 
			
		||||
            if (typeId == MWMechanics::AiPackage::TypeIdNone)
 | 
			
		||||
            {
 | 
			
		||||
                dest = ptr.getRefData().getPosition().asVec3();
 | 
			
		||||
            }
 | 
			
		||||
            else if (typeId == MWMechanics::AiPackage::TypeIdWander)
 | 
			
		||||
            {
 | 
			
		||||
                AiPackage* activePackage = aiSequence.getActivePackage();
 | 
			
		||||
                dest = activePackage->getDestination(ptr);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            MWMechanics::AiTravel travelPackage(dest.x(), dest.y(), dest.z(), true);
 | 
			
		||||
            aiSequence.stack(travelPackage, ptr, false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        aiSequence.stack(MWMechanics::AiCombat(target), ptr);
 | 
			
		||||
        if (target == getPlayer())
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue