Пример #1
0
    private void Start()
    {
        tm            = GameObject.FindGameObjectWithTag("TileManager").GetComponent <Tile_Manager>();
        ship_movement = ship_grid.GetComponent <Movement>();

        tm.Init_Ship_Systems();

        Find_Wheel();
    }
Пример #2
0
    protected override void System_Update()
    {
        if (!is_ship)
        {
            ship_rb.velocity        = new Vector2(0.0f, 0.0f);
            ship_rb.position        = new Vector2(0.0f, 0.0f);
            ship_rb.angularVelocity = 0.0f;
            ship_rb.rotation        = 0.0f;
        }

        if (is_ship_control_activated)
        {
            is_ship_control_activated = false;
            Find_Wheel();

            is_converting_to_ship = !is_converting_to_ship;

            if ((is_converting_to_ship) && (!is_ship))
            {
                tm.Init_Ship_Systems();

                Find_Wheel();

                Tilemap wheel_tilemap = tm.Grab_Layer(system_tiles["Wheel"][0]);
                ship_movement.Set_Rotation(wheel_tilemap.GetTransformMatrix(wheel_pos).rotation);
                Debug.Log("Rotation: " + wheel_tilemap.GetTransformMatrix(wheel_pos).rotation);

                ship_tile_positions.Clear();
                Convert_To_Ship(wheel_pos);
                Copy_Touching_Layers(tilemaps, ship_tilemaps, -1, false);

                movement.Set_Parent(ship_rb);


                player_self_movement  = false;
                ship_movement.enabled = !player_self_movement;
                player_movement.Set_Independant_Movement(player_self_movement);

                is_converting_to_ship = false;
                is_ship = true;
            }
            else if (is_ship)
            {
                Debug.Log(ship_rb.angularVelocity);
                if (Mathf.Abs(ship_rb.angularVelocity) > 10.0f)
                {
                    Debug.Log("Ship rotating too fast to dock");
                }
                else if (Mathf.Abs(ship_rb.velocity.magnitude) > 5.0f)
                {
                    Debug.Log("Ship moving too fast to dock");
                }
                else
                {
                    Rotation_Snap();
                    is_snap_in_progress       = true;
                    ship_default_angular_drag = ship_rb.angularDrag;
                }
            }
        }

        if (is_snap_in_progress)
        {
            if (Rotation_Snap())
            {
                ship_rb.angularDrag = ship_default_angular_drag;
                is_snap_in_progress = false;

                ship_tile_positions.Clear();
                Convert_To_World(wheel_pos);
                Copy_Touching_Layers(ship_tilemaps, tilemaps, -1, true);

                movement.Set_Parent(null);
                ship_movement.enabled = false;
                player_movement.Set_Independant_Movement(true);

                ship_rb.velocity        = new Vector2(0.0f, 0.0f);
                ship_rb.position        = new Vector2(0.0f, 0.0f);
                ship_rb.angularVelocity = 0.0f;
                ship_rb.rotation        = 0.0f;

                ship_rb.useAutoMass   = true;
                is_converting_to_ship = false;
                is_ship = false;
            }
        }
    }