public float GetSlowingModifier() { if (playerMovement.GetCurrentMovementVectorInWorldSpace().sqrMagnitude == 0) { return(1f); // Skip raycast if not moving } Collider[] invisibleWallColliders = Physics.OverlapSphere(this.transform.position, checkForInvisibleWallsMaxDistance, InvisibleWallLayer, QueryTriggerInteraction.Ignore); if (invisibleWallColliders.Length == 0) { // Debug.Log("invisibleWallColliders.Length == 0"); return(1f); } // Each Invisible Wall can have a different distance at which they start to slow the player // We need to find the Invisible Wall that has the maximum slowing power, i.e. lowest slowing modifier float minSlowingModifier = 1f; for (int i = 0; i < invisibleWallColliders.Length; i++) { InvisibleWall invisibleWall = invisibleWallColliders[i].GetComponent <InvisibleWall>(); if (!invisibleWall || !invisibleWall.slowsToAStop) { continue; } float currentSlowingModifier = invisibleWall.GetNormalizedSlowingModifier(playerCapsuleCollider); minSlowingModifier = currentSlowingModifier < minSlowingModifier ? currentSlowingModifier : minSlowingModifier; } // Debug.Log("minSlowingModifier: " + minSlowingModifier); return(Mathf.Clamp01(minSlowingModifier + minSlowingModifierValue)); // Allow at least some movement so player doesn't get trapped at (nearly) zero }
public override void Initialise() { if (firstRun == true) { // Cupboard createdEntity = EntityManager.getInstance.newEntity <HidingPlace>("Game Items/Wardrope"); SceneManager.getInstance.newEntity(createdEntity, 375, 50); Removables.Add(createdEntity); // Desk createdEntity = EntityManager.getInstance.newEntity <SolidObject>("Desk"); SceneManager.getInstance.newEntity(createdEntity, 425, 150); Removables.Add(createdEntity); // Nurse at Desk createdEntity = EntityManager.getInstance.newEntity <LowLevelAI>("Enemy/NurseA/"); SceneManager.getInstance.newEntity(createdEntity, 400, 150); var asInstance = createdEntity as IAI; asInstance.setVars(false, "Stand", "Right"); Removables.Add(createdEntity); // Nurse Patroling createdEntity = EntityManager.getInstance.newEntity <LowLevelAI>("Enemy/NurseB/"); SceneManager.getInstance.newEntity(createdEntity, 100, ScreenHeight / 2); asInstance = createdEntity as IAI; asInstance.setVars(true, "Idle"); Removables.Add(createdEntity); // Door - North Hallway createdEntity = EntityManager.getInstance.newEntity <Door>(); SceneManager.getInstance.newEntity(createdEntity, (ScreenWidth / 4) - 10, 60); createdEntity.setVars("L2", new Vector2((ScreenWidth / 2) - 18, 250)); Removables.Add(createdEntity); // Door - Boardroom createdEntity = EntityManager.getInstance.newEntity <Door>(); SceneManager.getInstance.newEntity(createdEntity, 75, 150); createdEntity.setVars("L5", new Vector2(540, ScreenHeight / 2)); Removables.Add(createdEntity); // Door - Ward createdEntity = EntityManager.getInstance.newEntity <Door>(); SceneManager.getInstance.newEntity(createdEntity, (ScreenWidth / 4) - 10, 390); createdEntity.setVars("L6", new Vector2((ScreenWidth / 2) - 5, 120)); Removables.Add(createdEntity); // Walls //Left wall = new InvisibleWall(); wall.setVars(new Vector2(55, 50), new Vector2(10, 370)); Walls.Add(wall); //right wall = new InvisibleWall(); wall.setVars(new Vector2(725, 50), new Vector2(10, 195)); Walls.Add(wall); //top left wall = new InvisibleWall(); wall.setVars(new Vector2(55, 50), new Vector2(325, 10)); Walls.Add(wall); //top right wall = new InvisibleWall(); wall.setVars(new Vector2(350, 60), new Vector2(375, 10)); Walls.Add(wall); //bottom wall = new InvisibleWall(); wall.setVars(new Vector2(55, 420), new Vector2(325, 10)); Walls.Add(wall); //L wall = new InvisibleWall(); wall.setVars(new Vector2(350, 245), new Vector2(375, 175)); Walls.Add(wall); firstRun = false; } else { foreach (IEntity e in EntityManager.getInstance.Entities) { foreach (IEntity r in Removables) { if (e.UID == r.UID) { SceneManager.getInstance.newEntity(r, (int)r.DefaultPos.X, (int)r.DefaultPos.Y); r.sub(); } } } foreach (IWall w in Walls) { w.Sub(); } } }