Beispiel #1
0
    public override bool EndConditionsMet()
    {
        var  distance    = DistanceUtility.Get2d(SetPiece.transform, Target.transform);
        bool withinRange = distance <= 2;

        return(withinRange && base.EndConditionsMet());
    }
Beispiel #2
0
    public override float GetProgress()
    {
        var distance = DistanceUtility.Get2d(SetPiece.transform, Target.transform);

        if (distance >= LargestDistance)
        {
            LargestDistance = distance;
        }
        return(1 - (distance / LargestDistance));
    }
    public override float GetProgress()
    {
        if (Target == null)
        {
            return(EndConditionsMet() ? 1f : 0f);
        }

        var distance = DistanceUtility.Get2d(TargetProp.transform, Target.transform);

        if (distance >= LargestDistance)
        {
            LargestDistance = distance;
        }
        return(1 - (distance / LargestDistance));
    }
    public override bool EndConditionsMet()
    {
        if (Target != null)
        {
            var distance = DistanceUtility.Get2d(TargetPropHolder.transform, Target.transform);
            if (distance >= 3)
            {
                return(false);
            }
        }

        bool correctHolder = TargetPropHolder == TargetProp.PropHolder;

        return(correctHolder && base.EndConditionsMet());
    }
Beispiel #5
0
    public virtual void DropProp()
    {
        if (PropHolder == null)
        {
            Logger.LogError($"DropProp called with PropHolder == null");
            return;
        }

        //find nearest prop holder
        PropHolder nearestPropHolder = null;
        float      smallestDistance  = float.MaxValue;

        foreach (var holder in PropHolder.PropHoldersList)
        {
            if (holder == PropHolder)
            {
                continue;
            }

            var distance = DistanceUtility.Get2d(transform, holder.transform);
            if (distance <= smallestDistance &&
                holder.CanHoldProp(this, distance:distance))
            {
                smallestDistance  = distance;
                nearestPropHolder = holder;
            }
        }

        //remove prop from old prop holder
        PropHolder.RemoveProp(this);

        PropHolder = null;

        if (nearestPropHolder == null)
        {
            //set pos to scene prop root
            transform.parent           = PlayerManger.MangerInstance.PropsRoot;
            transform.localEulerAngles = Vector3.zero;
            Rigidbody.isKinematic      = false;
            Collider.enabled           = true;
            SetRotateToCam(true);
        }
        else
        {
            PickUpProp(nearestPropHolder);
        }
    }
Beispiel #6
0
    public virtual bool CanHoldProp(Prop prop, float distance = -1)
    {
        if (prop == null)
        {
            return(false);
        }
        if (PropSlot != null)
        {
            return(false);
        }

        if (distance < 0)
        {
            distance = DistanceUtility.Get2d(prop.transform, transform);
        }
        return(distance <= prop.PropSize);
    }
    protected override void Update()
    {
        var acceleration = Vector3.zero;

        if (CurrentTask == null && PropSlot == null)
        {
            acceleration = UpdateMovement();
            if (IsInputInState(eInput.Interact, eButtonState.Pressed))
            {
                float minDistance = float.MaxValue;
                Prop  closestProp = null;
                foreach (var prop in Prop.PropsList)
                {
                    var distance = DistanceUtility.Get2d(prop.transform, transform);
                    if (CanHoldProp(prop, distance:distance) &&
                        prop.CanMoveProp() &&
                        distance < minDistance)
                    {
                        closestProp = prop;
                        minDistance = distance;
                    }
                }

                if (closestProp != null)
                {
                    closestProp.PickUpProp(this);
                }


                if (PropSlot == null)
                {
                    foreach (var task in Interactable.Interactables)
                    {
                        var distance = (transform.position - task.transform.position).magnitude;
                        if (distance <= minDistance && task.CanInteract(transform.position))
                        {
                            CurrentTask = task;
                            minDistance = distance;
                            CurrentTask.StartInteraction(this);
                        }
                    }
                }
            }
        }
        else if (PropSlot != null)
        {
            acceleration = UpdateMovement();
            if (IsInputInState(eInput.Interact, eButtonState.Pressed))
            {
                PropSlot.DropProp();
            }
        }
        else if (CurrentTask != null)
        {
            Debug.DrawLine(transform.position, CurrentTask.transform.position, Color.green);

            var distance = (transform.position - CurrentTask.transform.position).magnitude;
            if (!CurrentTask.CanInteract(transform.position) ||
                IsInputInState(eInput.Interact, eButtonState.Pressed))
            {
                CurrentTask.EndInteraction();
                CurrentTask = null;
            }

            if (CurrentTask != null)
            {
                acceleration -= Velocity;
                Velocity      = Vector3.zero;
            }
        }
        UpdateVisuals(acceleration, Velocity);
        TryHideObjectsHiddingPlayer();
        base.Update();
    }