Показать сообщение отдельно
Старый 23.02.2018, 21:19   #34
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: The Dwarf Adventure

Потихоньку переношу мозги мобов на Behaviour Trees. NPC стали более адекватно себя вести. На текущий момент код мозгов NPC такой.

mBehaviour = bt::Builder()
    .Parallel()
        .Sequence("Heal")
            .Condition([this] { return NeedHealing(); })
            .Do([this] { return UseHealingPotion(); })
        .End()

        .Selector("Behaviour")                
            .Sequence("Attack")
                .Condition([this] { return !NeedHealing(); })                    
                .Do([this] { return LookForTarget(); })                                    
                .Condition([this] { return IsEnemyCloseEnoughToDefaultPosition(); })
                .Do([this] { return SelectWeapon(); })
                .Selector()
                    .Sequence()
                        .Condition([this] { return IsTooCloseToEnemy(); })
                        .Do([this] { return SetMoveDestinationFarEnoughFromEnemy(); })        
                    .End()                    
                    .Do([this] { return SetMoveDestinationEnemyPosition(); })                    
                .End()
                .Do([this] { return OpenNearbyDoors(); })
                .Do([this] { return MoveToDestination(); })
                .Do([this] { return LookAtActor(); })
                .Do([this] { return AimAtLookPoint(); })
                .Do([this] { return UseWeapons(); })
            .End()
            
            .Sequence("WalkAway")
                .Selector("Position")
                    .Sequence("Danger")
                        .Condition([this] { return IsDefaultPositionTooDangerous(); })
                        .Do([this] { return SetMoveDestinationSafePoint(); })
                    .End()
                    .Do([this] { return SetMoveDestinationDefault(); })
                .End()                
                .Condition([this] { return !ReachDestination(); })
                .Do([this] { return LookAtWaypoint(); })
                .Do([this] { return AimAtLookPoint(); })
                .Do([this] { return OpenNearbyDoors(); })
                .Do([this] { return MoveToDestination(); })
            .End()

            .Sequence("Idle")
                .Condition([this] { return ReachDestination(); })
                .Do([this] { return StayStill(); })
            .End()
        .End()    
    .End()
    .Build();
Самая мякотка в том что при помощи Behaviour Tree я могу рандомизировать еще и поведение мобов, а не только их внешний вид. Больше рандома богу рандома!
__________________

(Offline)
 
Ответить с цитированием
Эти 7 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
ABTOMAT (27.02.2018), mauNgerS (24.02.2018), Mr_F_ (24.02.2018), Randomize (24.02.2018), Samodelkin (27.02.2018), St_AnGer (23.02.2018), Жека (25.02.2018)