示例#1
0
    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);
            //}
        }
    }
示例#2
0
 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();
         }
     }
 }
示例#5
0
    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;
    }
示例#6
0
    // 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);
 }
示例#8
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);
        }
    }
示例#9
0
    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);
    }
示例#10
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);
            }
        }
    }
示例#11
0
 public float TileGetAllowedMoveInto(PhysicsMove move) => move.collideDistance;
示例#12
0
 void Start()
 {
     spriteRenderer = GetComponent <SpriteRenderer>();
     randomMove     = GetComponent <RandomMove>();
     physicsMove    = GetComponent <PhysicsMove>();
 }
示例#13
0
 public float TileGetAllowedMoveInto(PhysicsMove move) =>
 PlatformCollidableHelpers.GetGridAllowedMovementInto(move, effector);
示例#14
0
 void Start()
 {
     spriteRenderer = GetComponent <SpriteRenderer>();
     physicsMove    = gameObject.GetComponent <PhysicsMove>();
     StartCoroutine(RandMove());
 }