mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-03 23:26:40 +00:00 
			
		
		
		
	Merge pull request #2681 from akortunov/hello
Do not interrupt greeting update when Hello = 0 or actor starts to swim
This commit is contained in:
		
						commit
						2652b10b9c
					
				
					 1 changed files with 9 additions and 15 deletions
				
			
		| 
						 | 
					@ -452,22 +452,12 @@ namespace MWMechanics
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        CreatureStats &stats = actor.getClass().getCreatureStats(actor);
 | 
					        CreatureStats &stats = actor.getClass().getCreatureStats(actor);
 | 
				
			||||||
        int hello = stats.getAiSetting(CreatureStats::AI_Hello).getModified();
 | 
					 | 
				
			||||||
        if (hello == 0)
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (MWBase::Environment::get().getWorld()->isSwimming(actor))
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        MWWorld::Ptr player = getPlayer();
 | 
					 | 
				
			||||||
        osg::Vec3f playerPos(player.getRefData().getPosition().asVec3());
 | 
					 | 
				
			||||||
        osg::Vec3f actorPos(actor.getRefData().getPosition().asVec3());
 | 
					 | 
				
			||||||
        osg::Vec3f dir = playerPos - actorPos;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const MWMechanics::AiSequence& seq = stats.getAiSequence();
 | 
					        const MWMechanics::AiSequence& seq = stats.getAiSequence();
 | 
				
			||||||
        int packageId = seq.getTypeId();
 | 
					        int packageId = seq.getTypeId();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (seq.isInCombat() || (packageId != AiPackage::TypeIdWander && packageId != AiPackage::TypeIdTravel && packageId != -1))
 | 
					        if (seq.isInCombat() ||
 | 
				
			||||||
 | 
					            MWBase::Environment::get().getWorld()->isSwimming(actor) ||
 | 
				
			||||||
 | 
					            (packageId != AiPackage::TypeIdWander && packageId != AiPackage::TypeIdTravel && packageId != -1))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            stats.setTurningToPlayer(false);
 | 
					            stats.setTurningToPlayer(false);
 | 
				
			||||||
            stats.setGreetingTimer(0);
 | 
					            stats.setGreetingTimer(0);
 | 
				
			||||||
| 
						 | 
					@ -475,6 +465,11 @@ namespace MWMechanics
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        MWWorld::Ptr player = getPlayer();
 | 
				
			||||||
 | 
					        osg::Vec3f playerPos(player.getRefData().getPosition().asVec3());
 | 
				
			||||||
 | 
					        osg::Vec3f actorPos(actor.getRefData().getPosition().asVec3());
 | 
				
			||||||
 | 
					        osg::Vec3f dir = playerPos - actorPos;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (stats.isTurningToPlayer())
 | 
					        if (stats.isTurningToPlayer())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Reduce the turning animation glitch by using a *HUGE* value of
 | 
					            // Reduce the turning animation glitch by using a *HUGE* value of
 | 
				
			||||||
| 
						 | 
					@ -492,11 +487,10 @@ namespace MWMechanics
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Play a random voice greeting if the player gets too close
 | 
					        // Play a random voice greeting if the player gets too close
 | 
				
			||||||
        float helloDistance = static_cast<float>(hello);
 | 
					 | 
				
			||||||
        static int iGreetDistanceMultiplier = MWBase::Environment::get().getWorld()->getStore()
 | 
					        static int iGreetDistanceMultiplier = MWBase::Environment::get().getWorld()->getStore()
 | 
				
			||||||
            .get<ESM::GameSetting>().find("iGreetDistanceMultiplier")->mValue.getInteger();
 | 
					            .get<ESM::GameSetting>().find("iGreetDistanceMultiplier")->mValue.getInteger();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        helloDistance *= iGreetDistanceMultiplier;
 | 
					        float helloDistance = static_cast<float>(stats.getAiSetting(CreatureStats::AI_Hello).getModified() * iGreetDistanceMultiplier);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        int greetingTimer = stats.getGreetingTimer();
 | 
					        int greetingTimer = stats.getGreetingTimer();
 | 
				
			||||||
        GreetingState greetingState = stats.getGreetingState();
 | 
					        GreetingState greetingState = stats.getGreetingState();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue