示例#1
0
    protected void Move(ECollision colType)
    {
        StopAllCoroutines();
        float dist = ControllerInput.instance.GetMoveInputMagnitude();
        float k    = Mathf.Clamp(dist / ControllerInput.instance.circleInputWidth, 0f, 1f);

        if (colType == ECollision.NONE)
        {
            transform.position += (k * playerAsset.transform.forward) * (Time.deltaTime / 3f);
            transform.position  = SnapToPlanet(transform.position);
            if (posCallBack != Vector3.zero)
            {
                if (Vector3.Distance(transform.position, posCallBack) <= 0.1f)
                {
                    vCallBack();
                    posCallBack = Vector3.zero;
                    vCallBack   = null;
                }
            }
        }
        else if (colType == ECollision.WALL)
        {
            Vector3 lForward = playerAsset.transform.forward.normalized;
            float   angle    = Vector3.Angle(lForward, normalSlideVector);
            Vector3 slideDir = Vector3.RotateTowards(lForward, normalSlideVector, angle * Mathf.Deg2Rad, 0f);
            transform.position += ((lForward + slideDir).normalized * k * (Mathf.Clamp(angle, 0, 90f) / 90f)) * (Time.deltaTime / 3f);
            transform.position  = SnapToPlanet(transform.position);
        }

        Reoriente();
        DoEmitter();

        UpdateCells(false);
    }
示例#2
0
 public HitBox(Rectangle rect, Transform transform, ECollision type)
 {
     _trackingID = -1;
     _rect       = rect;
     _transform  = transform;
     Type        = type;
 }
示例#3
0
 public HitBox(Rectangle rect, Transform transform)
 {
     _trackingID = -1;
     _rect       = rect;
     _transform  = transform;
     Type        = ECollision.obstacle;
 }
示例#4
0
    protected void Update()
    {
        if (GameManager.Instance.LoadedScene == SceneString.MapView)
        {
            return;
        }
        if (!PlayerManager.Instance.player)
        {
            return;
        }
        if (PlayerManager.Instance.player == gameObject)
        {
            OnCell();
        }

        if (PlayerManager.Instance.player.GetComponent <Player>().playerType != playerType)
        {
            return;
        }

        Physics.gravity = PlayerManager.Instance.player.transform.position.normalized * -9.81f;

        if (moveHold)
        {
            if (GameManager.Instance.LoadedScene == SceneString.MapView)
            {
                return;
            }
            if (moveHold && !_onUI && _isHolding)
            {
                Rotate();
                ECollision lCollision = CanMoveForward(playerAsset.transform.forward);
                Move(lCollision);
                _isTapMoving = false;
                SetAnimation(true);
            }
        }
        else if (!_isTapMoving)
        {
            SetAnimation(false);
        }
        _currentPos = _transform.position;
    }
示例#5
0
 public GameObject(Game game) : base(game)
 {
     _game  = game;
     _boxes = new List <HitBox>();
     _type  = ECollision.obstacle;
 }
示例#6
0
 public GameObject(Game game, string textureName, ECollision type) : base(game, textureName)
 {
     _game  = game;
     _type  = type;
     _boxes = new List <HitBox>();
 }
示例#7
0
    protected IEnumerator CoroutineRotation(Vector3 targetPos)
    {
        Vector3 previousPos  = transform.position;
        float   stopDistance = 0.12f;

        if (_targetInteractable)
        {
            stopDistance = 0.125f;
        }
        if (_targetItemPickUp)
        {
            stopDistance = 0.05f;
        }

        SetAnimation(true);
        _isTapMoving = true;

        while (Vector3.Distance(transform.position, targetPos) > stopDistance)
        {
            Vector3 midPos     = ((transform.position + targetPos) / 2f);
            Vector3 snapMidPos = midPos.normalized * transform.position.magnitude;

            ECollision lCollision = CanMoveForward(playerAsset.transform.forward);

            if (lCollision == ECollision.NONE)
            {
                previousPos         = transform.position;
                transform.position += (snapMidPos - transform.position).normalized * Time.deltaTime / 3f;

                if (previousPos == transform.position)
                {
                    _isTapMoving = false;
                    break;
                }

                _targetRotation = Quaternion.LookRotation(transform.position - previousPos, transform.position);
                playerAsset.transform.rotation = Quaternion.Lerp(playerAsset.transform.rotation, _targetRotation, Time.deltaTime * 10);
                transform.position             = SnapToPlanet(transform.position);
                Reoriente();
                UpdateCells(true);

                if (posCallBack != Vector3.zero)
                {
                    if (Vector3.Distance(transform.position, posCallBack) <= 0.2f)
                    {
                        vCallBack();
                        posCallBack = Vector3.zero;
                        vCallBack   = null;
                    }
                }
            }
            else
            {
                _targetItemPickUp = null;
                _isTapMoving      = false;
                StopMove();
                break;
            }

            DoEmitter();

            yield return(null);
        }

        transform.position = SnapToPlanet(transform.position);
        SetAnimation(false);
        _isTapMoving = false;

        if (!_targetInteractable && !_targetItemPickUp)
        {
            yield break;
        }

        if (_targetItemPickUp)
        {
            if (PlayerManager.Instance.playerType != EPlayer.ECO)
            {
                CancelMove();
                yield break;
            }

            _targetItemPickUp.GetComponent <ItemPickup>().PickUp();
            StopMove();
            yield break;
        }

        if (Vector3.Distance(transform.position, targetPos) <= stopDistance)
        {
            InteractablePNJ lPnj            = _targetInteractable as InteractablePNJ;
            NPCGender       genderComponent = lPnj.GetComponent <NPCGender>();

            if (PlayerManager.Instance.playerType == EPlayer.NGO)
            {
                if (lPnj && lPnj.CanTalkTo(EPlayer.NGO))
                {
                    playerAsset.transform.rotation = Quaternion.LookRotation(lPnj.transform.position - transform.position, transform.up);
                    UIManager.instance.PNJState.Active(false);
                    PointingBubble.instance.Show(true);
                    PointingBubble.instance.SetProperties(lPnj);
                    QuestManager.Instance.NGOTalkTo(lPnj.IDname);
                    lPnj = null;
                    CancelMove();

                    if (genderComponent)
                    {
                        Events.Instance.Raise(new OnNPCDialogueSFX(genderComponent.gender));
                    }
                }
                else
                {
                    lPnj = null;
                    CancelMove();
                }
            }
            else if (lPnj && PlayerManager.Instance.playerType == EPlayer.GOV)
            {
                playerAsset.transform.rotation = Quaternion.LookRotation(lPnj.transform.position - transform.position, transform.up);
                if (lPnj.CanTalkTo(EPlayer.GOV))
                {
                    Events.Instance.Raise(new OnPopupBuilding(lPnj.budgetComponent, lPnj));
                }
                lPnj = null;
                CancelMove();

                if (genderComponent)
                {
                    Events.Instance.Raise(new OnNPCDialogueSFX(genderComponent.gender));
                }
            }
            else if (lPnj && PlayerManager.Instance.playerType == EPlayer.ECO)
            {
                playerAsset.transform.rotation = Quaternion.LookRotation(lPnj.transform.position - transform.position, transform.up);
                if (lPnj.CanTalkTo(EPlayer.ECO))
                {
                    InventoryScreen.Instance.HandleActiveFromNPC(lPnj);
                    QuestManager.Instance.EcoTalkTo(lPnj.budgetComponent.type);
                }
                lPnj = null;
                CancelMove();

                if (genderComponent)
                {
                    Events.Instance.Raise(new OnNPCDialogueSFX(genderComponent.gender));
                }
            }
        }
        else
        {
            StopMove();
        }

        yield break;
    }