public void Update() { transform.position = playerGameObject.transform.position; if (lastMopState != playerController.mopState) { lastMopState = playerController.mopState; ChangeToAnimation(); } }
void PerformMopping() { if (moppingTime == 0) { Debug.Log("Mopping"); animationController.SetActiveCycle(PlayerAnimationCycle.Mopping); bool playerTouchingMoppableSurface = touchingGrounds.Any(ground => ground.layer == 0); bool playerHasLiquidOnMop = mopState != MopState.CleanMop && mopState != MopState.NoMop; // Check if we have a liquid we can place if (playerTouchingMoppableSurface && playerHasLiquidOnMop) { Fluid fluidToPlace; if (mopState == MopState.OilMop) { fluidToPlace = Fluid.Oil; } else if (mopState == MopState.GlueMop) { fluidToPlace = Fluid.Glue; } else { fluidToPlace = Fluid.Ferro; } PlaceLiquid(transform.position, fluidToPlace); mopState = MopState.CleanMop; } // If we don't have a liquid, let's see if we can pick any up else { CheckPickupLiquid(transform.position); } } moppingTime += Time.fixedDeltaTime; if (moppingTime > 1) { stateMachine.SetBool("Trigger_BreakMopping", true); } }
// Written by Trace Rainbolt private void CheckPickupLiquid(Vector3 position) { Vector2 hitSize = new Vector2(1, 0.5f); float distance = 1; LayerMask moppableLayer = LayerMask.GetMask("Liquids"); Vector2 origin = new Vector2(position.x, position.y + 0.6f); RaycastHit2D hit = Physics2D.BoxCast(origin, hitSize, 0, Vector2.down, distance, moppableLayer); // We found some lqiuid, so set our mop liquid if (hit.collider != null) { LiquidBehavior liquidBehavior = hit.collider.GetComponent <LiquidBehavior>(); if (hit.collider.CompareTag("Oil")) { mopState = MopState.OilMop; } else if (hit.collider.CompareTag("Glue")) { mopState = MopState.GlueMop; } else if (hit.collider.CompareTag("Ferrofluid")) { mopState = MopState.FerrofluidMop; } if (liquidBehavior) { liquidBehavior.RemoveLiquid(); } else { Destroy(hit.collider.gameObject); } } }
private void Start() { currentState = MopState.Dropped; }