public override void OnMoveInto(PhysicsMove move) { if (move.dir == Dir4.down) { StandEffectable standEffectable = move.moving.GetComponent <StandEffectable>(); if (standEffectable) { physics.carryEffector.AddEffectable(standEffectable); } return; } PushEffectable pushEffectable = move.moving.GetComponent <PushEffectable>(); //PlayerUnitController player = move.hit.rigidbody.GetComponent<PlayerUnitController>(); if (pushEffectable && CanBePushed(pushEffectable, move.dir)) { physics.pushEffector.AddEffectable(pushEffectable); if (RaycastHelpers.IsValidDistance(move.collideDistance)) { physics.Move(move.collideDistance, move.dir); } //if (player.di.physics.pushHandler.CanPush(physics.requiredStrength)) //{ // player.di.physics.pushHandler.SetIsPushing(); // physics.Move(move.collideDistance, move.dir); //} } }
void Start() { thisRend = GetComponent <SpriteRenderer> (); physicsMove = gameObject.AddComponent <PhysicsMove> (); physicsMove.moveSpeed = moveSpeed; StartCoroutine(RandMove()); }
public override float GetAllowedMoveInto(PhysicsMove move) { Vector2 hitPoint = move.hit.point; Vector2 skinInCollisionDirection = (Vector2)move.dir * RaycastHelpers.skinWidth; Vector3Int tilemapPosition = ToTileMapPosition(hitPoint + skinInCollisionDirection); TileBase tile = tilemap.GetTile(tilemapPosition); if (!tile) { return(move.collideDistance); } DebugTile(tilemapPosition); float allTilesAllowedMove = 0; while (true) { float allowedMove; if (spikes.MatchForCollidable(tile)) { allowedMove = spikes.TileGetAllowedMoveInto(move); } else if (abyss.MatchForCollidable(tile)) { allowedMove = abyss.TileGetAllowedMoveInto(move); } else if (platforms.MatchForCollidable(tile)) { allowedMove = platforms.TileGetAllowedMoveInto(move); } else { break; } float safeAllowedMove = Mathf.Min(allowedMove, tileSize.x); Vector2 safeAllowedMoveInDir = (Vector2)move.dir * (safeAllowedMove + RaycastHelpers.skinWidth); Vector3Int tilemapPositionAfterAllowedMove = ToTileMapPosition(hitPoint + safeAllowedMoveInDir); TileBase tileAfterAllowedMove = tilemap.GetTile(tilemapPositionAfterAllowedMove); if (tileAfterAllowedMove && tileAfterAllowedMove != tile) { tile = tileAfterAllowedMove; Vector2 newHitPoint = GetNewHitPoint(hitPoint, tilemapPositionAfterAllowedMove, move.dir); allowedMove = Vector2.Distance(newHitPoint, hitPoint); hitPoint = newHitPoint; allTilesAllowedMove += allowedMove; } else { allTilesAllowedMove += allowedMove; break; } } return(allTilesAllowedMove); }
public override void OnMoveInto(PhysicsMove move) { if (IsCrushingComponent(move.moving) && move.dir == Dir4.down) { float allowedMove = physics.movement.GetAllowedMovement(move.collideDistance, move.dir); if (allowedMove < move.collideDistance) { damage.TakeFullDamage(); } } }
public void TileOnMoveInto(PhysicsMove move) { //PlatformSkippable platfromSkippable = wantsToMove.GetComponent<PlatformSkippable>(); //if (!platfromSkippable) // return; //float testMove = 1f; //float canMove = PlatformCollidableHelpers.GetGridAllowedMovementInto(wantsToMove, testMove, direction, hitpoint); //if (canMove == 0) // platfromSkippable.IsStandingOnPlatform = true; }
// TODO: freeze camera and make unconditional fall below the collider public void TileOnMoveInto(PhysicsMove move) { // TODO: use PlayerCollider or move.movement.controller PlayerUnitController unit = move.hit.rigidbody.GetComponent <PlayerUnitController>(); if (!unit) { return; } unit.di.damage.TakeFullDamage(Vector2.zero); }
public override float GetAllowedMoveInto(PhysicsMove move) { if (IsCrushingComponent(move.moving)) { float allowedMove = physics.movement.GetAllowedMovement(move.collideDistance, move.dir); if (move.dir == Dir4.down && allowedMove < move.collideDistance) { // begin crush return(move.collideDistance); } return(0); } return(0); }
public void TileOnMoveInto(PhysicsMove move) { // TODO: use PlayerCollider or move.movement.controller PlayerUnitController unit = move.hit.rigidbody.GetComponent <PlayerUnitController>(); if (!unit) { return; } if (unit.di.vulnerability.IsVulnerable()) { float randomSign = RandomHelpers.OneOrMinusOne(); Vector2 randomPushForce = TileHelpers.TileToWorld(new Vector2(randomSign * pushTileForce.x, pushTileForce.y)); unit.di.damage.TakeFullDamage(randomPushForce); } }
public override float GetAllowedMoveInto(PhysicsMove move) { PushEffectable pushEffectable = move.moving.GetComponent <PushEffectable>(); if (pushEffectable && CanBePushed(pushEffectable, move.dir)) { float allowedMove = physics.movement.GetAllowedMovement(move.collideDistance, move.dir); if (debug) { Debug.Log($"[PushBlock] collideDist: {move.collideDistance}; allowed: {allowedMove}"); } return(allowedMove); } //PlayerUnitController player = move.hit.rigidbody.GetComponent<PlayerUnitController>(); //if (PushConditionsPass(player, move.dir) && player.di.physics.pushHandler.CanPush(physics.requiredStrength)) //{ // float allowedMove = physics.movement.GetAllowedMovement(move.collideDistance, move.dir); // return allowedMove; //} return(0); }
public override void OnMoveInto(PhysicsMove move) { Vector2 hitPoint = move.hit.point; Vector2 skinInCollisionDirection = (Vector2)move.dir * RaycastHelpers.skinWidth; Vector3Int tilemapPosition = ToTileMapPosition(hitPoint + skinInCollisionDirection); TileBase tile = tilemap.GetTile(tilemapPosition); if (tile) { if (spikes.MatchForCollidable(tile)) { spikes.TileOnMoveInto(move); } else if (abyss.MatchForCollidable(tile)) { abyss.TileOnMoveInto(move); } else if (platforms.MatchForCollidable(tile)) { platforms.TileOnMoveInto(move); } } }
public float TileGetAllowedMoveInto(PhysicsMove move) => move.collideDistance;
void Start() { spriteRenderer = GetComponent <SpriteRenderer>(); randomMove = GetComponent <RandomMove>(); physicsMove = GetComponent <PhysicsMove>(); }
public float TileGetAllowedMoveInto(PhysicsMove move) => PlatformCollidableHelpers.GetGridAllowedMovementInto(move, effector);
void Start() { spriteRenderer = GetComponent <SpriteRenderer>(); physicsMove = gameObject.GetComponent <PhysicsMove>(); StartCoroutine(RandMove()); }