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); }
public HitBox(Rectangle rect, Transform transform, ECollision type) { _trackingID = -1; _rect = rect; _transform = transform; Type = type; }
public HitBox(Rectangle rect, Transform transform) { _trackingID = -1; _rect = rect; _transform = transform; Type = ECollision.obstacle; }
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; }
public GameObject(Game game) : base(game) { _game = game; _boxes = new List <HitBox>(); _type = ECollision.obstacle; }
public GameObject(Game game, string textureName, ECollision type) : base(game, textureName) { _game = game; _type = type; _boxes = new List <HitBox>(); }
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; }