Пример #1
0
    public override void BeginExecution(Entity stateEntity, ActionContext action, Otto actor)
    {
        base.BeginExecution(stateEntity, action, actor);

        // Trigger beginning of walk animation.
        m_Animator = actor.GetComponentInParent <Animator>();
        m_Animator.SetBool(k_Walk, true);

        m_TargetPosition = action.GetTrait <Location>(1).Position;
        m_OttoTransform  = actor.transform;

        // Grab nav mesh
        m_NavMeshAgent = actor.GetComponentInParent <NavMeshAgent>();

        // Motion Controller
        m_MotionController = actor.GetComponentInParent <MotionController>();
        m_MotionController.TargetPosition = m_TargetPosition;
        m_MotionController.StartMoving();
        SetAnimationParams();
        m_Arrived = false;

        var startPosition = action.GetTrait <Location>(0).Position;
        var distance      = Vector3.Distance(startPosition, m_TargetPosition);

        m_PredictedDeltaTime = Mathf.FloorToInt(distance / 0.47f + 1f);
    }
Пример #2
0
    public override void BeginExecution(Entity stateEntity, ActionContext action, Otto actor)
    {
        base.BeginExecution(stateEntity, action, actor);

        m_Animator = actor.GetComponentInParent <Animator>();
        m_Animator.SetTrigger(Animator.StringToHash("Sleep"));

        // Reset fatigue.
        foreach (var domainObjectEntity in actor.GetObjectEntities(stateEntity, typeof(Need)))
        {
            var need = actor.GetObjectTrait <Need>(domainObjectEntity);
            if (need.NeedType == NeedType.Fatigue)
            {
                need.Urgency = 0;
                actor.SetObjectTrait(domainObjectEntity, need);
                break;
            }
        }
    }
Пример #3
0
    public override void BeginExecution(StateData state, ActionKey action, Otto actor)
    {
        base.BeginExecution(state, action, actor);

        m_Animator = actor.GetComponentInParent <Animator>();
        m_Animator.SetTrigger(Animator.StringToHash("Sleep"));

        // Reset fatigue
        var domainObjects = new NativeList <(DomainObject, int)>(4, Allocator.TempJob);

        foreach (var(_, domainObjectIndex) in state.GetDomainObjects(domainObjects, new ComponentType[] { typeof(Need) }))
        {
            var need = state.GetTraitOnObjectAtIndex <Need>(domainObjectIndex);
            if (need.NeedType == NeedType.Fatigue)
            {
                need.Urgency = 0;
                state.SetTraitOnObjectAtIndex(need, domainObjectIndex);
                break;
            }
        }
        domainObjects.Dispose();
    }