/// <summary> /// Attempt to grab for a pillow. Returns the grabbed pillow, or null /// if none was found. /// </summary> public IPillow AttemptGrab() { var rayStart = player.Position; var rayEnd = player.Forward * playerSettings.PickupDistance; var numHits = Physics.RaycastNonAlloc( new Ray(rayStart, rayEnd), hitBuffer, playerSettings.PickupDistance ); IPillow hit = null; var hitDistance = float.MaxValue; for (var i = 0; i < numHits; i++) { if (!hitBuffer[i].transform.CompareTag(PillowTag)) { continue; } var pillow = hitBuffer[i].transform.GetComponent <IPillow>(); if (pillow == null) { continue; } var distance = (pillow.Position - player.Position).sqrMagnitude; if (distance < hitDistance) { hit = pillow; } } return(hit); }
public override void Update() { var pillow = pillowCarrier.AttemptGrab(); if (prevPillow != null && prevPillow != pillow) { prevPillow.ToggleButtonPrompt(false); } if (pillow != null) { pillow.ToggleButtonPrompt(true); prevPillow = pillow; } if (inputManager.GetGrabButtonDown(player.ControllerIndex)) { // TODO: user factory if (pillow != null) { player.SetPickupAnim(); player.SetState(pillowCarryStateFactory.Create(player, pillow)); } } }
public ThrowState( IPlayer player, IPillow pillow, IInputManager inputManager, IPlayerSettings playerSettings, PlayerMovement.Factory playerMovementFactory, WalkState.Factory walkStateFactory ) { this.player = player; this.pillow = pillow; this.inputManager = inputManager; this.playerSettings = playerSettings; this.playerMovement = playerMovementFactory.Create(player); this.walkStateFactory = walkStateFactory; }
public PillowCarryState( IPlayer player, IPillow pillow, PlayerMovement.Factory playerMovementFactory, IInputManager inputManager, WalkState.Factory walkStateFactory, ThrowState.Factory throwStateFactory ) { this.player = player; this.pillow = pillow; this.playerMovement = playerMovementFactory.Create(player); this.inputManager = inputManager; this.walkStateFactory = walkStateFactory; this.throwStateFactory = throwStateFactory; }