Last active
April 28, 2025 16:31
-
-
Save graffiti75/725b5ba972d1b1fc42dde9f083992bdb to your computer and use it in GitHub Desktop.
All files needed to run the GravityTilt project
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
https://github.com/graffiti75/GravityTilt |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
android:width="52dp" | |
android:height="52dp" | |
android:viewportWidth="52" | |
android:viewportHeight="52"> | |
<group> | |
<clip-path android:pathData="M0,0h52v52h-52z" /> | |
<path | |
android:fillColor="#81BFFD" | |
android:pathData="M26,26m-26,0a26,26 0,1 1,52 0a26,26 0,1 1,-52 0" /> | |
<group> | |
<clip-path android:pathData="M26,26m-26,0a26,26 0,1 1,52 0a26,26 0,1 1,-52 0" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M71.1,33.081H71.097C71.097,33.081 71.1,33.084 71.102,33.086C71.102,33.086 71.102,33.081 71.102,33.079L71.1,33.081ZM103.246,40.201L103.251,40.206C103.251,40.206 103.248,40.204 103.246,40.201Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M126.119,1.08C125.141,1.014 124.204,0.876 123.244,0.623C120.787,-0.033 118.388,-1.053 115.685,-0.302C114.956,-0.098 113.935,-0.359 113.051,-0.46C111.708,-0.616 110.513,-1.439 109.087,-1.233C108.459,-1.143 107.782,-1.098 107.19,-1.422C105.776,-2.193 104.031,-1.681 102.653,-2.6C102.39,-2.776 101.967,-2.753 101.774,-2.444C101.523,-2.05 101.994,-2.04 102.169,-1.861C102.25,-1.778 102.301,-1.562 102.25,-1.47C102.144,-1.274 99.434,-1.241 99.226,-1.394C98.537,-1.904 97.78,-2.243 96.946,-2.494C96.214,-2.713 95.667,-2.133 95.049,-2.223C93.557,-2.441 92.03,-2.163 90.67,-3.426C89.456,-4.551 87.541,-4.137 85.94,-4.262C85.413,-4.303 84.697,-3.722 83.975,-3.662C83.582,-3.629 83.195,-3.436 82.81,-3.449C81.726,-3.491 81.095,-2.323 79.988,-2.459C79.697,-2.494 79.476,-2.454 79.357,-2.07C79.289,-1.846 78.825,-1.53 78.65,-1.588C77.293,-2.037 77.161,-1.736 78.032,-0.699C78.065,-0.661 78.02,-0.56 78.012,-0.488C77.966,-0.51 77.906,-0.52 77.878,-0.555C77.68,-0.827 77.381,-1.083 77.323,-1.382C77.24,-1.824 77.181,-2.2 76.667,-2.301C75.826,-2.467 75.558,-1.834 75.203,-1.291C74.957,-0.917 75.216,-0.746 75.421,-0.533C75.459,-0.495 75.484,-0.445 75.515,-0.402C75.451,-0.397 75.385,-0.38 75.322,-0.387C74.671,-0.488 74.02,-0.666 73.367,-0.663C73.009,-0.663 72.136,-1.495 72.272,-0.206C72.277,-0.171 72.049,-0.106 71.928,-0.061C71.026,0.278 70.036,-0.334 69.154,0.196L69.159,0.191C68.916,0.369 68.678,0.552 68.43,0.723C68.278,0.826 67.997,0.972 67.961,0.741C67.845,-0.008 67.277,-0.003 66.801,0.085C66.282,0.183 66.565,0.708 66.502,1.044C66.424,1.454 65.988,1.175 65.798,1.419C65.702,1.542 65.684,1.411 65.702,1.296C65.823,0.572 65.38,0.336 64.775,0.13C63.569,-0.282 62.285,-0.402 61.12,-0.995C60.408,-1.357 59.531,-1.349 58.769,-1.128C57.665,-0.807 56.466,-0.769 55.458,-0.154C55.071,0.083 53.946,-0.342 54.498,0.826C54.531,0.891 54.369,1.042 54.308,1.157C53.65,2.418 52.335,2.86 51.241,3.574C50.324,4.171 50.838,4.947 51.134,5.55C51.388,6.065 52.051,6.296 52.596,5.889C53.462,5.241 53.657,5.761 53.804,6.467C53.835,6.612 53.822,6.766 53.83,6.916C53.711,6.803 53.531,6.708 53.483,6.57C53.244,5.879 52.89,6.05 52.457,6.379C52.016,6.715 52.188,7.18 52.279,7.524C52.454,8.167 52.105,8.348 51.633,8.453C51.071,8.579 50.62,8.795 50.332,9.337C50.137,9.702 49.658,9.82 49.334,9.722C49.017,9.624 49.47,9.408 49.463,9.192C49.453,8.926 49.354,8.765 49.172,8.566C48.657,8.011 48.054,7.419 47.976,6.68C47.91,6.05 47.472,5.339 46.821,5.379C46.284,5.412 45.724,5.635 45.646,6.083C45.532,6.705 45.701,7.383 46.297,7.838C46.745,8.182 46.747,8.21 46.552,8.386C45.932,8.951 46.182,9.807 45.846,10.48C45.719,10.734 46.122,10.771 46.383,10.671C47.112,10.39 47.859,10.204 48.652,10.239C48.726,10.239 48.802,10.239 48.875,10.239C48.855,10.282 48.845,10.35 48.812,10.362C48.196,10.601 47.593,10.887 46.958,11.043C46.608,11.128 46.18,11.05 46.069,11.472C45.957,11.902 46.373,12.002 46.666,12.173C47.406,12.607 47.515,13.245 47.244,14.009C47.016,14.654 46.537,14.33 46.145,14.303C45.615,14.267 45.086,14.152 44.559,14.16C44.022,14.167 43.422,14.298 43.5,15.003C43.579,15.699 43.422,16.317 43.282,16.982C43.171,17.515 42.798,18.439 43.801,18.61C44.759,18.773 44.959,18.994 44.445,19.813C44.247,20.129 44.019,20.418 43.667,20.619C43.021,20.988 42.51,21.46 42.583,22.317C42.611,22.656 42.494,23.055 42.168,23.198C40.873,23.761 40.121,24.828 39.521,25.999C39.034,26.945 38.133,27.777 38.769,29.08C39.12,29.801 38.928,30.642 38.518,31.413C38.069,32.257 38.472,33.714 39.217,34.364C39.371,34.498 39.511,34.668 39.599,34.852C40.253,36.175 41.03,37.388 42.35,38.174C42.722,38.398 43.123,38.85 43.508,38.659C45.03,37.901 46.836,38.765 48.336,37.702C48.86,37.331 49.853,37.223 50.319,38.026C50.638,38.579 50.98,38.72 51.553,38.632C52.507,38.483 52.9,39.094 52.718,40.028C52.566,40.786 52.062,41.655 52.49,42.341C52.986,43.135 53.564,43.913 53.936,44.755C54.592,46.241 55.076,47.811 54.245,49.424C53.721,50.441 53.617,51.506 54.118,52.515C54.643,53.57 55.033,54.622 55.177,55.805C55.306,56.873 55.299,58.025 56.201,58.874C56.725,59.371 56.864,60.097 57.095,60.743C57.3,61.32 56.846,62.049 57.543,62.556C58.265,63.081 58.835,62.383 59.488,62.398C62.434,62.473 63.936,60.627 65.106,58.292C65.337,57.829 65.091,57.136 65.694,56.895C66.745,56.476 66.976,55.644 66.702,54.735C66.302,53.407 67.037,52.914 68.055,52.462C69.463,51.837 70.383,48.738 69.567,47.5C68.921,46.518 69.106,45.43 69.288,44.401C69.544,42.951 70.641,41.979 71.685,41.088C73.726,39.345 75.056,37.223 75.634,34.626C75.725,34.214 75.717,33.754 75.124,33.819C74.567,33.882 74.023,34.073 73.481,34.239C71.695,34.786 71.695,34.794 71.094,33.099C71.094,33.099 71.092,33.096 71.089,33.094C71.089,33.094 71.089,33.091 71.089,33.089C69.879,32.169 68.84,31.1 68.136,29.738C68.068,29.605 67.964,29.465 67.964,29.326C67.951,27.473 66.401,26.295 65.889,24.663C65.826,24.462 65.638,24.301 65.509,24.123C65.79,24.221 66.246,24.248 66.322,24.429C66.902,25.81 68.356,26.687 68.562,28.282C68.632,28.824 69.22,29.023 69.511,29.44C70.291,30.557 70.732,31.798 71.087,33.086H71.089C71.089,33.086 71.089,33.094 71.089,33.096C71.353,33.337 71.523,33.81 71.986,33.634C72.809,33.322 73.587,32.888 74.42,32.611C75.378,32.295 75.965,31.398 76.862,31.092C78.121,30.66 79.757,28.975 79.838,27.722C79.849,27.576 79.745,27.398 79.643,27.275C79.324,26.875 78.975,26.526 78.443,26.385C78.108,26.295 77.939,25.936 78.02,25.672C78.086,25.456 78.316,25.78 78.504,25.793C79.048,25.828 79.59,25.958 80.132,25.948C81.964,25.916 83.706,25.954 84.692,27.93C84.909,28.367 85.479,28.887 86.13,28.734C86.538,28.638 86.531,28.792 86.563,29.05C86.888,31.594 88.061,33.827 89.226,36.055C89.573,36.718 90.034,36.944 90.452,36.047C90.583,35.766 90.809,35.53 90.994,35.276C91.022,35.249 91.052,35.221 91.077,35.193C91.439,34.332 91.361,33.44 91.234,32.551C91.196,32.283 91.103,31.951 91.432,31.873C92.293,31.67 92.564,30.896 93.043,30.326C93.57,29.696 94.119,28.947 94.72,28.55C95.282,28.176 96.427,27.488 97.22,28.794C97.64,29.485 98.372,29.985 98.405,30.896C98.415,31.18 98.289,31.534 98.689,31.67C99.059,31.795 99.426,31.853 99.725,31.481C99.816,31.368 99.998,31.175 100.102,31.474C100.32,32.089 100.462,32.735 100.723,33.33C101.26,34.548 100.541,35.979 101.587,37.162C102.339,38.011 102.4,39.34 103.238,40.211C103.507,40.347 103.773,40.495 104.046,40.621C104.322,40.749 104.647,40.668 104.563,40.367C104.274,39.337 104.373,38.189 103.274,37.418C102.425,36.821 101.792,35.896 101.913,34.736C101.956,34.329 101.346,33.141 102.757,33.983C103.4,34.367 104.049,34.879 104.241,35.392C104.697,36.615 105.118,35.887 105.601,35.555C105.753,35.45 105.855,35.261 106.017,35.178C106.959,34.686 107.207,33.975 106.962,32.938C106.718,31.923 106.171,31.145 105.417,30.504C104.71,29.904 104.54,29.389 105.227,28.636C105.574,28.254 105.9,28.159 106.232,28.42C106.574,28.688 106.455,29.005 106.078,29.269C105.804,29.46 105.718,29.799 106.042,30.035C106.45,30.336 106.898,30.489 107.281,29.974C107.481,29.703 107.78,29.367 107.352,29.113C106.774,28.774 107.114,28.623 107.423,28.437C108.76,27.636 110.609,27.586 111.278,25.795C111.61,24.906 112.043,24.072 111.909,23.063C111.734,21.757 110.87,20.863 110.082,19.933C109.692,19.471 109.743,19.235 110.242,18.997C110.424,18.909 110.576,18.793 110.553,18.572C110.531,18.346 110.391,18.165 110.176,18.123C109.844,18.055 109.426,17.907 109.181,18.04C108.59,18.359 108.499,17.497 108.036,17.663C108.198,17.52 108.367,17.382 108.522,17.231C108.573,17.181 108.593,17.098 108.618,17.028C108.679,16.857 108.783,16.699 108.98,16.731C109.183,16.764 109.117,16.967 109.14,17.105C109.254,17.751 109.593,17.786 110.054,17.424C110.619,16.985 111.237,17.198 111.41,17.882C111.453,18.05 111.574,18.321 111.681,18.331C112.443,18.401 112.605,19.044 112.77,19.544C113.124,20.619 113.755,20.217 114.363,19.923C115.153,19.542 114.475,19.097 114.345,18.715C114.262,18.469 114.021,18.241 113.796,18.083C112.919,17.475 112.881,16.706 113.241,15.804C113.423,15.342 113.588,15.003 114.153,15.385C114.366,15.528 114.591,15.465 114.756,15.252C115.566,14.195 115.716,11.786 115.052,10.661C114.968,10.52 114.763,10.387 114.925,10.174C115.05,10.279 115.207,10.365 115.29,10.495C115.782,11.254 116.263,12.02 116.739,12.788C116.896,13.044 117.071,13.293 117.4,13.2C117.603,13.145 117.871,13.002 117.927,12.836C118.028,12.537 117.686,12.419 117.504,12.238C117.306,12.045 116.818,11.861 117.157,11.545C117.545,11.183 117.261,11.015 117.086,10.812C116.843,10.528 116.529,10.304 116.286,10.021C115.493,9.096 114.33,8.669 113.583,8.373C112.658,8.006 111.635,8.328 110.792,7.778C110.695,7.715 110.427,7.662 110.564,7.557C111.123,7.135 111.007,6.427 111.339,5.927C111.638,5.48 114.361,5.266 114.984,5.588C115.508,5.862 116.078,5.713 116.577,5.565C116.977,5.445 116.496,5.07 116.582,4.839C116.668,4.603 116.463,4.232 116.78,4.151C117.058,4.081 117.337,4.229 117.59,4.453C117.968,4.782 118.436,5.284 118.791,4.395C118.849,4.247 118.968,4.196 119.107,4.307C119.247,4.42 119.244,4.545 119.163,4.706C118.915,5.211 118.497,5.723 118.492,6.236C118.482,7.1 118.846,7.888 119.609,8.468C120.265,8.971 121.025,9.347 121.549,10.023C121.719,10.242 121.904,10.593 122.279,10.42C122.638,10.254 122.681,9.895 122.646,9.541C122.56,8.677 122.785,7.82 122.18,6.964C121.813,6.442 121.65,5.877 120.913,5.834C120.711,5.824 120.663,5.691 120.627,5.543C120.589,5.374 120.642,5.196 120.825,5.206C121.349,5.234 121.848,4.834 122.395,5.163C122.803,5.409 123.12,5.276 123.274,4.809C123.441,4.304 123.92,4.086 124.31,3.832C124.538,3.682 125.052,3.99 125.126,3.486C125.197,3.006 124.741,2.903 124.422,2.715C124.303,2.647 124.123,2.494 124.138,2.411C124.183,2.195 124.414,2.25 124.568,2.27C125.278,2.366 125.924,2.74 126.666,2.732C126.975,2.727 127.094,2.682 127.208,2.343C127.59,1.23 126.813,1.135 126.101,1.087L126.119,1.08ZM64.884,1.697C65.068,1.68 65.17,1.697 65.177,1.853C65.183,1.991 65.127,2.072 64.982,2.009C64.871,1.964 64.772,1.891 64.668,1.831C64.757,1.775 64.846,1.72 64.886,1.695L64.884,1.697ZM63.665,1.713C63.82,1.76 64.088,1.745 64.033,2.024C64.01,2.142 64.101,2.34 63.878,2.381C63.66,2.3 63.534,2.152 63.511,1.926C63.501,1.813 63.501,1.662 63.665,1.713ZM54.283,7.735C54.319,7.577 54.369,7.522 54.572,7.494C55.195,7.411 55.917,7.298 56.198,6.7C56.454,6.158 56.484,5.53 57.052,5.136C57.229,5.013 57.082,4.804 56.915,4.671C56.127,4.051 56.505,3.589 57.148,3.199C57.566,2.948 58.032,2.782 58.189,2.237C58.267,1.971 58.566,1.954 58.812,1.951C58.88,1.951 58.949,2.042 59.076,2.132C58.89,2.285 58.759,2.416 58.607,2.511C57.396,3.26 57.373,4.302 58.556,5.035C58.726,5.141 58.845,5.236 58.815,5.477C58.784,5.703 58.695,5.756 58.485,5.834C57.948,6.032 57.809,6.497 57.844,7.024C57.882,7.582 57.705,7.853 57.13,7.529C56.932,7.419 56.776,7.449 56.598,7.539C55.924,7.873 55.215,7.981 54.465,7.891C54.334,7.876 54.245,7.918 54.286,7.738L54.283,7.735ZM65.58,21.571C65.562,21.679 65.365,21.847 65.266,21.837C63.498,21.654 61.613,22.267 59.995,21.034C59.354,20.546 58.267,21.106 58.184,21.91C58.159,22.156 58.022,22.485 57.817,22.324C57.297,21.915 56.578,22.015 56.089,21.46C55.648,20.958 54.868,20.941 54.202,20.805C53.782,20.719 53.184,20.745 53.602,19.954C53.825,19.532 53.855,18.909 53.569,18.499C53.283,18.093 52.799,18.208 52.292,18.329C51.254,18.58 50.159,18.271 49.085,18.542C48.561,18.675 48.029,18.823 47.616,19.105C46.998,19.527 46.405,19.228 45.805,19.25C45.749,19.25 45.638,19.167 45.643,19.157C45.722,18.962 45.914,18.956 46.076,18.969C47.067,19.039 47.824,18.507 48.077,17.703C48.391,16.706 49.387,16.355 49.754,15.712C50.281,14.792 50.704,14.813 51.484,14.941C51.677,14.973 51.93,14.752 52.127,14.609C52.69,14.197 52.93,14.278 53.212,14.981C53.478,15.649 54.243,15.978 54.899,16.292C55.317,16.493 55.869,16.663 55.833,17.136C55.793,17.688 55.187,17.575 54.764,17.615C54.544,17.638 54.273,17.608 54.202,17.894C54.131,18.188 54.397,18.268 54.584,18.381C54.949,18.597 55.372,19.085 55.737,18.761C56.211,18.341 56.494,17.706 56.834,17.151C56.882,17.073 56.656,16.869 56.993,16.942C57.404,17.03 57.414,16.669 57.28,16.485C56.991,16.091 56.854,15.488 56.317,15.383C55.6,15.242 55.246,14.702 54.777,14.275C54.638,14.147 54.526,14.004 54.643,13.838C54.757,13.672 54.937,13.838 54.974,13.906C55.42,14.654 56.325,14.735 56.943,15.255C57.748,15.93 57.786,16.94 58.29,17.733C58.45,17.985 58.495,18.354 58.713,18.512C59.035,18.748 59.587,19.275 59.805,18.879C60.005,18.509 60.489,17.979 60.109,17.384C59.98,17.183 59.602,16.867 59.975,16.696C60.261,16.566 60.765,15.908 61.054,16.955C61.337,17.979 61.905,19.192 63.285,19.074C64.116,19.002 64.899,19.695 65.75,19.085C66.196,18.763 66.072,19.253 66.084,19.474C66.257,20.252 65.707,20.863 65.585,21.571H65.58ZM68.681,15.626C68.518,16.01 68.007,15.842 67.645,15.885C67.173,15.935 66.707,15.837 66.325,15.614C65.21,14.968 64.086,15.714 62.974,15.526C62.465,15.44 62.285,15.184 62.353,14.715C62.444,14.089 62.829,13.567 63.214,13.137C63.488,12.836 63.967,13.08 64.093,13.554C64.217,14.011 64.496,14.318 64.95,14.097C66.049,13.557 66.918,13.976 67.761,14.632C67.865,14.712 67.971,14.795 68.052,14.898C68.258,15.157 68.876,15.172 68.681,15.624V15.626ZM73.154,16.834C73.222,16.136 72.374,15.282 71.806,14.609C71.381,14.102 71.431,13.665 71.814,13.336C72.323,12.894 72.908,12.396 73.688,12.758C73.848,12.831 73.926,13.059 73.744,13.24C72.888,14.092 72.959,14.634 73.888,15.455C74.626,16.108 74.902,17.04 75.147,17.959C75.239,18.301 75.021,18.389 74.58,18.359C74.225,17.869 73.012,18.276 73.154,16.837V16.834ZM77.402,25.195C76.999,25.75 76.629,26.343 75.786,26.262C75.682,26.225 75.489,26.195 75.487,26.149C75.391,24.941 74.076,24.59 73.683,23.6C73.61,23.419 73.367,23.171 73.711,23.035C73.944,22.942 74.119,23.095 74.253,23.319C74.947,24.469 75.755,25.413 77.328,24.894C77.424,24.861 77.564,24.959 77.683,24.997C77.587,25.062 77.462,25.105 77.399,25.192L77.402,25.195Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M121.597,51.97C121.909,52.636 122.137,53.336 123.117,53.788C124.059,54.225 124.548,55.157 125.252,55.843C127.492,58.025 127.418,60.092 126.478,61.946C126.106,62.682 125.131,63.006 124.903,63.88C124.872,63.993 124.741,64.068 124.741,64.184C124.743,65.63 123.312,65.796 122.203,65.949C121.339,66.067 120.169,66.125 119.044,65.434C118.667,65.203 118.573,64.97 118.697,64.703C118.854,64.362 118.507,64.251 118.236,64.103C118.145,64.053 118.013,63.932 118.082,64.143C118.104,64.216 118.137,64.302 118.122,64.362C118.056,64.593 117.866,64.718 117.58,64.686C117.441,64.671 117.215,64.563 117.134,64.455C116.929,64.176 117.152,64.076 117.311,63.947C117.39,63.885 117.479,63.729 117.436,63.669C117.286,63.468 117.208,63.661 117.089,63.669C116.364,63.706 116.265,63.096 116.096,62.75C115.655,61.855 114.849,61.72 114.29,61.835C112.828,62.134 111.301,62.38 110.272,63.307C110.09,63.47 109.832,63.515 109.523,63.47C108.765,63.357 108.221,63.573 107.767,63.958C107.192,64.445 106.475,64.349 105.65,63.721C105.305,63.458 105.214,63.214 105.434,62.996C105.797,62.637 105.832,62.147 105.563,61.607C105.09,60.652 104.93,59.685 104.226,58.726C103.39,57.588 103.935,55.564 105.024,55.147C105.759,54.866 106.478,54.564 107.245,54.333C107.701,54.195 108.069,53.949 108.084,53.54C108.127,52.359 109.254,51.892 109.588,50.905C109.801,50.28 110.462,50.29 111.202,50.78C111.615,51.053 111.62,51.028 111.65,50.644C111.701,50.001 112.438,49.752 112.712,49.343C113.357,48.366 114.452,49.243 115.28,49.19C116.063,49.14 116.311,49.672 116.2,50.235C116.015,51.174 117.38,52.568 118.421,52.382C118.928,52.292 118.624,51.518 118.616,51.041C118.606,50.343 118.474,49.612 118.418,48.901C118.398,48.65 118.489,48.439 118.824,48.474C119.135,48.509 119.226,48.76 119.386,48.974C119.852,49.602 120.065,50.335 120.918,50.807C121.326,51.033 121.537,51.498 121.6,51.963L121.597,51.97Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M116.306,42.376C117.203,42.208 117.134,42.941 117.289,43.436C117.441,43.926 117.527,44.298 118.069,43.675C118.553,43.12 119.115,42.821 119.931,43.305C120.566,43.682 121.354,43.8 122.068,44.049C122.281,44.122 122.484,44.235 122.674,44.358C123.358,44.805 125.169,45.377 125.838,45.322C125.99,45.31 126.179,45.222 126.271,45.106C126.473,44.847 126.653,44.476 127.003,44.853C127.307,45.181 127.266,45.666 126.906,45.9C126.499,46.166 125.995,46.528 125.488,46.307C124.875,46.038 124.685,46.55 124.523,46.809C124.341,47.105 124.748,47.394 124.979,47.608C125.361,47.959 125.903,48.386 125.711,48.836C125.48,49.378 124.918,48.813 124.495,48.806C123.849,48.793 123.368,48.544 123.274,47.814C123.231,47.48 123.049,47.221 122.643,47.203C122.238,47.183 122.286,47.5 122.195,47.733C121.985,48.268 120.751,48.321 119.989,47.801C119.771,47.653 119.589,47.557 119.318,47.618C119.08,47.67 118.864,47.593 118.745,47.354C118.644,47.153 118.626,46.947 118.786,46.774C119.229,46.292 118.857,45.752 118.575,45.624C117.952,45.34 117.357,44.938 116.569,44.978C115.941,45.008 115.835,44.31 115.652,43.823C115.619,43.732 115.685,43.562 115.637,43.529C115.379,43.353 114.87,43.333 115.098,42.851C115.326,42.369 115.863,42.454 116.303,42.374L116.306,42.376Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M103.081,41.866C103.188,41.354 103.124,40.663 104.17,40.91C104.482,40.982 104.976,40.505 105.247,40.231C105.817,39.654 106.594,39.249 106.926,38.441C107.045,38.149 107.256,37.757 107.595,37.845C108.165,37.994 108.639,38.403 108.96,38.885C109.201,39.244 108.712,39.393 108.522,39.556C107.843,40.133 108.373,40.598 108.616,41.078C108.803,41.449 109.186,41.66 108.456,42.035C107.99,42.276 107.717,43.107 107.59,43.72C107.397,44.669 107.015,44.905 106.138,44.528C105.764,44.365 105.277,44.536 104.826,44.368C103.937,44.036 103.061,42.901 103.079,41.864L103.081,41.866Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M99.426,41.085C99.902,41.66 100.541,42.067 100.837,42.838C100.986,43.228 101.83,43.034 102.141,43.599C102.316,43.916 102.415,44.114 102.101,44.36C101.673,44.697 101.756,45.197 101.812,45.616C101.86,45.978 102.293,45.764 102.537,45.857C103.783,46.342 105.214,46.116 106.394,46.847C106.688,47.03 107.142,47.131 107.038,47.585C106.921,48.09 106.536,47.831 106.207,47.796C104.831,47.648 103.469,47.434 102.144,47.05C101.658,46.91 100.804,46.972 101.192,46C101.202,45.975 101.181,45.915 101.159,45.907C99.135,45.079 98.565,43.059 97.471,41.472C96.944,40.706 96.369,39.985 95.664,39.367C95.492,39.217 95.355,38.991 95.576,38.777C95.779,38.581 96.024,38.579 96.313,38.644C97.359,38.885 97.835,39.832 98.605,40.41C98.892,40.623 99.158,40.859 99.434,41.085L99.426,41.078V41.085Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M71.908,57.166C71.135,57.166 70.231,55.594 70.74,54.723C71.31,53.746 71.216,52.736 71.386,51.739C71.464,51.279 71.674,50.986 72.095,50.903C73.141,50.697 73.481,49.833 73.909,49.054C74.025,48.843 74.129,48.642 74.39,48.65C74.638,48.657 74.618,48.904 74.699,49.064C75.188,50.071 75.003,51.001 74.595,52.015C74.073,53.314 73.541,54.622 73.235,56.006C73.096,56.639 72.728,57.204 71.91,57.166H71.908Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M118.548,17.487C118.332,16.932 118.401,16.257 117.745,15.787C116.957,15.224 117.542,14.245 117.266,13.481C117.192,13.281 117.783,13.363 118.028,13.499C118.555,13.79 119.034,14.142 119.672,14.215C120.057,14.257 120.602,14.504 120.369,14.948C120.166,15.332 119.652,15.631 119.105,15.616C118.933,15.611 118.717,15.368 118.601,15.596C118.489,15.817 118.806,15.81 118.92,15.903C119.606,16.46 120.389,18.916 120.113,19.735C120.032,19.974 119.837,20.046 119.611,20.134C118.725,20.473 117.864,20.885 116.967,21.199C116.587,21.332 116.635,21.586 116.579,21.85C116.529,22.098 116.42,22.329 116.134,22.375C115.86,22.42 115.794,22.171 115.693,22.003C114.791,20.493 115.179,19.655 116.98,19.23C117.289,19.157 117.461,19.037 117.499,18.68C117.537,18.339 117.595,17.992 118.193,18.226C118.507,18.349 118.479,17.816 118.545,17.485L118.548,17.487Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M126.286,71.168C125.924,71.06 125.551,71.007 125.245,70.841C124.872,70.638 125.004,70.327 125.308,70.196C126.331,69.757 127.21,69.038 128.302,68.714C129.115,68.473 129.652,67.77 130.321,67.285C130.645,67.049 130.954,66.818 131.278,67.288C131.375,67.426 131.529,67.479 131.671,67.345C131.838,67.187 132.117,67.072 131.97,66.755C131.841,66.479 131.947,66.273 132.19,66.137C132.958,65.701 133.186,65.058 132.97,64.224C132.897,63.945 132.851,63.629 133.247,63.543C133.637,63.458 133.847,63.734 133.87,64.04C133.903,64.49 134.323,64.839 134.171,65.331C134.133,65.457 134.26,65.537 134.391,65.502C134.612,65.447 134.896,65.203 134.987,65.598C135.06,65.922 134.817,66.218 134.551,66.331C133.487,66.783 132.699,67.629 131.59,68.104C130.387,68.619 129.12,69.317 128.077,70.229C127.555,70.686 126.944,70.972 126.288,71.168H126.286Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M115.673,35.115C115.987,34.965 116.215,35.12 116.321,35.379C116.564,35.977 116.98,36.605 116.595,37.243C116.422,37.529 116.524,38.159 115.926,38.067C115.412,37.986 115.189,37.283 114.956,37.185C114.231,36.879 113.57,36.863 114.409,35.914C114.472,35.841 113.649,35.161 113.687,34.533C113.699,34.332 113.575,34.046 113.902,33.965C114.153,33.902 114.388,33.953 114.586,34.139C114.677,34.224 114.791,34.282 114.895,34.349C114.93,34.292 114.996,34.231 114.994,34.174C114.984,33.993 114.839,33.965 114.69,33.905C114.292,33.747 114.044,33.543 113.52,33.923C113.003,34.299 112.96,33.46 112.757,33.124C112.671,32.978 112.757,32.702 112.653,32.604C111.916,31.908 112.6,30.997 112.266,30.238C112.19,30.067 112.408,29.799 112.628,29.819C112.932,29.844 113.37,29.618 113.52,29.954C113.745,30.464 114.079,31.012 113.722,31.607C113.482,32.009 113.735,32.403 114.011,32.423C114.92,32.488 115.057,33.443 115.769,33.774C116.326,34.035 115.868,34.668 115.673,35.12C115.346,35.238 114.971,35.304 114.925,35.743C114.923,35.778 115.065,35.871 115.123,35.861C115.533,35.786 115.576,35.432 115.67,35.118L115.673,35.115Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M108.732,45.018C108.302,44.328 108.499,43.403 108.854,42.464C109.181,41.598 109.515,40.844 110.69,41.266C111.017,41.384 111.379,41.482 111.683,41.138C111.802,41.002 112.005,41.043 112.154,41.156C112.291,41.261 112.334,41.414 112.245,41.557C112.035,41.891 111.83,42.268 111.369,42.271C111.012,42.271 110.657,42.163 110.3,42.155C110.156,42.153 109.999,42.268 109.872,42.366C109.832,42.399 109.872,42.537 109.877,42.625C110.016,42.602 110.153,42.562 110.293,42.557C110.632,42.544 111.075,42.283 111.265,42.708C111.448,43.115 110.999,43.21 110.726,43.351C110.211,43.614 110.586,43.921 110.688,44.202C110.786,44.473 111.09,44.742 110.824,45.023C110.599,45.264 110.341,45.576 109.905,45.272C109.692,45.124 109.748,45.395 109.72,45.485C109.629,45.799 109.431,45.993 109.105,45.947C108.715,45.895 108.763,45.561 108.732,45.016V45.018Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M73.615,-4.197C73.975,-4.162 74.339,-4.182 74.365,-3.773C74.39,-3.376 74.007,-3.486 73.782,-3.396C72.946,-3.059 71.994,-3.044 71.239,-2.477C70.722,-2.087 70.431,-1.726 71.229,-1.336C71.401,-1.251 71.593,-1.158 71.528,-0.922C71.467,-0.696 71.257,-0.681 71.064,-0.691C70.464,-0.716 69.871,-0.807 69.316,-1.043C68.749,-1.284 69.028,-2.052 69.706,-2.818C70.798,-4.044 72.341,-3.778 73.615,-4.2V-4.197Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M57.905,-4.74C58.184,-4.634 58.569,-4.571 58.485,-4.177C58.402,-3.775 58.009,-3.941 57.763,-3.971C57.389,-4.014 57.011,-4.024 56.661,-4.308C56.317,-4.586 56.069,-4.162 55.914,-3.926C55.679,-3.559 55.42,-3.562 55.101,-3.735C54.562,-4.029 54.02,-4.32 53.498,-4.644C53.328,-4.75 53.199,-4.956 53.275,-5.182C53.353,-5.413 53.576,-5.46 53.787,-5.465C54.795,-5.485 55.815,-5.699 56.793,-5.269C57.163,-5.091 57.533,-4.915 57.905,-4.737V-4.74Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M44.062,9.802C43.872,9.802 43.652,9.659 43.622,9.355C43.546,8.604 44.488,7.323 45.131,7.306C45.607,7.293 45.985,7.552 46.01,8.006C46.063,8.931 45.157,9.774 44.062,9.802Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M111.633,47.527C111.009,47.686 110.394,47.861 109.766,47.992C109.528,48.042 109.517,48.107 109.55,48.321C109.619,48.76 109.335,48.956 108.968,48.796C108.405,48.547 108.071,47.889 107.311,47.942C107.154,47.952 107.066,47.547 107.288,47.439C107.681,47.249 108.114,46.839 108.552,47.339C108.727,47.54 108.709,47.512 108.975,47.382C109.768,46.987 110.683,47.075 111.557,47.103C111.752,47.108 111.706,47.367 111.627,47.53L111.633,47.525V47.527Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M100.774,-3.665C101.883,-3.037 103.17,-3.732 104.37,-3.343C104.626,-3.26 105.021,-3.225 104.928,-2.853C104.847,-2.537 104.487,-2.416 104.175,-2.522C102.939,-2.949 101.678,-2.745 100.419,-2.725C100.021,-2.72 99.429,-2.58 99.365,-3.097C99.292,-3.72 99.91,-3.456 100.254,-3.524C100.401,-3.554 100.546,-3.602 100.771,-3.662L100.774,-3.665Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M117.119,67.275C117.491,67.943 118.391,66.554 118.694,67.627C118.821,68.079 117.337,69.289 116.742,69.302C116.402,69.31 116.101,69.086 116.205,68.802C116.397,68.267 116.086,67.418 117.119,67.278V67.275Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M91.09,35.183C91.946,35.585 92.301,36.381 92.501,37.197C92.59,37.562 92.146,37.871 91.713,37.938C91.28,38.006 91.11,37.735 91.009,37.376C90.809,36.673 90.859,35.969 91.006,35.269C91.034,35.241 91.062,35.213 91.092,35.186L91.09,35.183Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M83.253,-4.536C82.544,-4.727 81.743,-4.94 80.943,-5.166C80.786,-5.212 80.677,-5.34 80.728,-5.513C80.803,-5.769 80.998,-5.965 81.257,-5.96C82.222,-5.94 83.05,-5.408 83.967,-5.197C84.104,-5.164 84.162,-4.958 84.063,-4.807C83.896,-4.551 83.618,-4.556 83.25,-4.539L83.253,-4.536Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M57.905,-4.74C57.535,-4.918 57.166,-5.094 56.793,-5.272C56.743,-5.37 56.639,-5.473 56.649,-5.566C56.687,-5.985 57.069,-5.975 57.295,-5.895C57.903,-5.679 58.845,-6.164 59.091,-5.254C59.21,-4.815 58.622,-4.78 58.245,-4.75C58.131,-4.74 58.017,-4.742 57.905,-4.74Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M111.625,47.532C111.985,47.422 112.339,47.294 112.704,47.206C112.97,47.143 113.221,47.243 113.287,47.515C113.355,47.801 113.092,47.904 112.879,47.959C112.395,48.085 111.98,48.326 111.569,48.597C111.311,48.771 110.949,49.017 110.746,48.632C110.576,48.308 110.809,47.999 111.166,47.831C111.331,47.753 111.475,47.628 111.627,47.525L111.622,47.53L111.625,47.532Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M112.752,26.637C112.57,26.958 112.97,27.649 112.218,27.684C111.764,27.704 111.491,27.325 111.554,26.875C111.625,26.381 111.6,25.687 112.299,25.662C112.871,25.642 112.701,26.217 112.75,26.637H112.752Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M112.978,34.995C112.813,35.525 112.321,35.902 111.838,36.268C111.709,36.366 111.541,36.291 111.448,36.145C111.326,35.962 111.361,35.776 111.491,35.623C111.82,35.236 112.157,34.859 112.337,34.369C112.367,34.289 112.572,34.189 112.643,34.219C112.927,34.339 112.947,34.618 112.978,34.995Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M65.773,-5.958C66.021,-5.922 66.282,-5.885 66.54,-5.845C66.864,-5.797 67.351,-5.832 67.298,-5.385C67.237,-4.89 66.74,-4.998 66.373,-5.036C66.132,-5.061 65.892,-5.121 65.654,-5.179C65.37,-5.247 64.934,-5.252 64.967,-5.611C65.005,-6.018 65.461,-5.885 65.77,-5.955L65.773,-5.958Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M133.259,55.823C133.234,56.139 133.087,56.3 132.887,56.232C132.241,56.021 131.798,55.584 131.676,54.903C131.636,54.675 131.82,54.459 132.051,54.537C132.707,54.755 132.92,55.391 133.259,55.823Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M117.932,40.354C117.932,40.709 118.482,41.354 117.603,41.475C117.165,41.535 117.046,41.05 117.058,40.691C117.071,40.274 117.192,39.817 117.704,39.767C118.018,39.734 117.99,40.043 117.932,40.354Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M68.724,-5.224C68.361,-5.237 67.832,-5.214 67.87,-5.588C67.931,-6.179 68.607,-6.013 69.02,-6.131C69.301,-6.211 69.732,-6.093 69.714,-5.742C69.684,-5.096 69.073,-5.342 68.724,-5.224Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M119.009,-1.439C119.414,-1.392 119.946,-1.51 119.961,-1.005C119.974,-0.586 119.477,-0.601 119.145,-0.613C118.77,-0.628 118.218,-0.528 118.226,-1.093C118.233,-1.595 118.758,-1.344 119.009,-1.442V-1.439Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M85.35,-5.154C85.685,-5.144 86.166,-5.036 86.082,-4.732C85.94,-4.217 85.277,-4.365 84.861,-4.172C84.682,-4.089 84.393,-4.242 84.451,-4.488C84.552,-4.928 84.861,-5.184 85.353,-5.154H85.35Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M114.426,44.594C114.117,44.523 113.649,44.714 113.575,44.202C113.54,43.956 113.765,43.74 114.062,43.775C114.492,43.825 115.11,43.722 115.194,44.262C115.267,44.737 114.7,44.463 114.426,44.594Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M70.72,-5.119C70.436,-5.126 70.145,-5.179 70.173,-5.483C70.215,-5.975 70.682,-5.809 70.978,-5.877C71.203,-5.927 71.502,-5.877 71.482,-5.588C71.449,-5.134 71.003,-5.214 70.722,-5.119H70.72Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M31.772,-5.807C31.772,-5.807 31.762,-5.799 31.76,-5.797C31.765,-5.797 31.772,-5.799 31.777,-5.802C31.785,-5.804 31.793,-5.809 31.8,-5.814C31.79,-5.814 31.78,-5.809 31.772,-5.807ZM20.49,-3.77C20.49,-3.77 20.488,-3.768 20.485,-3.765C20.485,-3.765 20.49,-3.765 20.493,-3.765C20.493,-3.765 20.493,-3.77 20.493,-3.773C20.493,-3.773 20.49,-3.773 20.488,-3.77H20.49ZM16.498,-1.849C16.498,-1.849 16.496,-1.844 16.493,-1.841H16.501C16.501,-1.841 16.506,-1.849 16.508,-1.849C16.506,-1.849 16.503,-1.849 16.498,-1.849Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M49.625,-6.354C48.214,-6.49 46.813,-6.771 45.417,-6.909C42.251,-7.223 39.088,-6.636 35.919,-6.44C35.283,-6.4 34.642,-6.462 33.996,-6.314C33.834,-6.277 33.381,-6.829 32.892,-6.864C30.668,-7.022 28.469,-6.791 26.258,-6.611C25.06,-6.513 23.933,-5.998 22.687,-6.143C22.154,-6.206 21.453,-6.091 21.172,-5.551C20.946,-5.114 21.379,-4.757 21.719,-4.438C21.863,-4.305 21.871,-4.029 21.939,-3.818C21.79,-3.825 21.587,-3.775 21.504,-3.853C21.121,-4.205 20.815,-3.991 20.495,-3.775C20.495,-3.775 20.495,-3.77 20.495,-3.768C20.495,-3.768 20.49,-3.768 20.488,-3.768C20.338,-3.572 19.951,-3.504 20.062,-3.185C20.176,-2.856 20.531,-2.863 20.832,-2.838C20.888,-2.833 20.946,-2.838 21.002,-2.831C21.276,-2.786 21.549,-2.738 21.825,-2.693C21.691,-2.663 21.554,-2.605 21.423,-2.615C21.296,-2.625 21.182,-2.723 21.058,-2.758C20.665,-2.871 20.328,-2.632 19.966,-2.587C19.839,-2.572 19.528,-2.886 19.548,-3.009C19.629,-3.499 20.017,-3.71 20.49,-3.768C20.49,-3.768 20.493,-3.77 20.495,-3.773C20.495,-3.773 20.498,-3.773 20.5,-3.775C20.546,-4.009 20.564,-4.252 20.65,-4.468C20.716,-4.639 20.913,-4.8 20.736,-4.968C20.462,-5.229 20.098,-5.161 19.766,-5.126C19.561,-5.104 19.454,-4.971 19.429,-4.742C19.368,-4.159 19.12,-3.702 18.477,-3.572C18.423,-3.521 18.373,-3.471 18.32,-3.421C18.398,-3.298 18.454,-3.15 18.56,-3.059C18.659,-2.976 18.808,-2.956 18.938,-2.909C18.786,-2.909 18.626,-2.941 18.484,-2.904C17.357,-2.605 16.146,-3.333 15.047,-2.615C14.849,-2.487 14.474,-2.469 14.52,-2.205C14.571,-1.922 14.799,-1.65 15.004,-1.419C15.161,-1.244 15.371,-1.341 15.576,-1.449C15.873,-1.605 16.194,-1.713 16.503,-1.841C16.503,-1.841 16.503,-1.846 16.508,-1.849C16.511,-1.849 16.514,-1.849 16.519,-1.849C16.8,-2.042 17.066,-2.369 17.42,-1.959H17.423C17.608,-1.967 17.8,-2.004 17.983,-1.977C18.426,-1.912 19.361,-2.424 18.892,-1.236C18.831,-1.08 18.963,-0.902 19.145,-0.844C19.292,-0.799 19.452,-0.794 19.604,-0.771C19.411,-0.553 19.249,-0.292 19.016,-0.123C18.793,0.035 18.606,-0.236 18.418,-0.289C17.499,-0.548 17.615,-1.329 17.423,-1.959H17.418C17.116,-1.924 16.815,-1.889 16.516,-1.851C16.516,-1.851 16.511,-1.849 16.508,-1.846H16.501C15.908,-1.038 14.753,-1.103 14.158,-0.523C13.482,0.138 12.874,0.201 12.109,0.045C11.683,-0.043 11.278,-0.236 10.865,-0.382C11.334,-0.734 11.686,-0.334 12.066,-0.186C12.689,0.055 13.033,-0.498 13.492,-0.683C13.846,-0.827 13.573,-1.128 13.439,-1.387C13.325,-1.603 13.578,-1.733 13.76,-1.841C13.986,-1.977 14.404,-2.01 14.262,-2.394C14.12,-2.776 13.73,-2.61 13.418,-2.647C12.884,-2.71 12.499,-2.303 11.911,-2.364C11.128,-2.444 10.574,-2.846 9.913,-3.107C8.355,-3.722 6.99,-2.966 5.665,-2.231C5.414,-2.09 5.341,-1.897 5.455,-1.613C5.563,-1.339 5.695,-1.143 6.03,-1.201C6.475,-1.281 6.921,-1.359 7.369,-1.439C7.438,-1.452 7.504,-1.467 7.572,-1.482C7.572,-1.429 7.572,-1.374 7.562,-1.321C7.375,-0.445 6.957,-0.098 6.022,-0.515C4.639,-1.136 3.203,-1.156 1.685,-0.947C0.657,-0.807 -0.336,-0.098 -1.354,-0.46C-2.319,-0.801 -3.292,-0.977 -4.282,-1.09C-5.789,-1.261 -7.221,-1.716 -8.852,-1.316C-10.202,-0.987 -11.491,-0.231 -12.968,-0.377C-13.28,-0.41 -13.467,-0.206 -13.378,0.188C-13.257,0.725 -13.447,1.135 -14.07,0.866C-14.847,0.53 -15.43,0.914 -16.043,1.238C-16.294,1.371 -16.451,1.605 -16.342,1.898C-16.238,2.18 -15.987,2.2 -15.724,2.172C-15.516,2.152 -15.303,2.124 -15.098,2.145C-14.885,2.165 -14.495,2.024 -14.498,2.23C-14.498,2.499 -14.898,2.559 -15.149,2.531C-16.479,2.386 -17.497,3.149 -18.606,3.654C-19.43,4.031 -18.804,4.636 -18.834,5.121C-18.857,5.512 -18.454,5.329 -18.209,5.334C-18.095,5.334 -17.981,5.417 -17.864,5.465C-17.958,5.545 -18.042,5.658 -18.15,5.703C-18.662,5.907 -19.186,6.072 -19.691,6.291C-19.896,6.381 -20.083,6.59 -19.962,6.841C-19.837,7.097 -19.607,6.957 -19.409,6.904C-18.862,6.756 -18.262,6.705 -17.773,6.447C-16.995,6.035 -16.089,6.768 -15.379,6.105C-15.108,5.851 -14.842,5.593 -14.574,5.337C-13.989,4.779 -13.277,5.344 -12.606,5.098C-11.752,4.787 -10.924,4.174 -9.847,4.726C-9.062,5.128 -7.988,5.07 -8.145,6.396C-8.173,6.63 -8.069,6.974 -7.897,7.12C-7.178,7.723 -7.221,8.888 -7.461,9.197C-8.094,10.003 -7.856,10.598 -7.59,11.349C-7.509,11.578 -7.694,11.927 -7.821,12.193C-8.421,13.439 -9.553,14.315 -10.166,15.568C-10.59,16.435 -10.8,19.336 -10.098,19.848C-9.085,20.586 -9.25,21.533 -9.077,22.503C-8.976,23.083 -8.978,24.045 -8.829,24.163C-7.91,24.881 -7.988,26.112 -7.231,26.868C-6.99,27.106 -6.775,27.222 -6.494,27.059C-6.212,26.895 -6.202,26.596 -6.375,26.365C-7.243,25.203 -7.162,23.698 -7.821,22.46C-7.889,22.332 -7.783,22.106 -7.737,21.93C-7.73,21.903 -7.555,21.882 -7.547,21.9C-7.476,22.048 -7.375,22.204 -7.375,22.36C-7.36,23.668 -6.499,24.635 -5.924,25.69C-5.412,26.624 -4.498,27.355 -5.007,28.598C-5.108,28.847 -4.885,29.038 -4.703,29.218C-4.229,29.688 -3.647,29.979 -3.087,30.326C-1.98,31.012 -0.972,31.906 0.495,31.469C0.809,31.376 0.989,31.574 1.141,31.81C1.536,32.431 2.088,32.775 2.823,32.938C3.621,33.116 4.55,33.335 4.788,34.219C5.034,35.141 5.71,35.675 6.366,36.1C6.868,36.426 7.64,37.597 8.375,36.198C8.509,35.942 8.775,35.899 8.945,36.303C9.598,37.861 9.231,39.224 7.982,40.437C7.372,41.03 7,41.869 7.524,42.728C7.696,43.012 7.684,43.097 7.481,43.305C6.929,43.881 6.941,44.704 7.407,45.111C8.309,45.9 8.732,46.909 9.267,47.896C10.057,49.358 10.781,50.85 12.506,51.581C13.451,51.98 13.968,52.867 13.986,53.997C14.014,55.72 14.11,57.445 14.224,59.166C14.31,60.459 14.951,61.712 14.515,63.046C14.338,63.593 14.424,64.123 14.634,64.646C14.9,65.299 14.958,65.954 14.875,66.672C14.816,67.182 15.029,67.765 15.619,68.021C15.754,68.079 16.045,67.818 16.02,68.179C15.999,68.481 16.387,68.79 15.961,69.096C15.749,69.249 15.46,69.701 15.685,69.787C16.293,70.023 16.078,70.53 16.23,70.904C16.605,71.821 17.164,72.597 17.879,73.293C19.143,74.521 20.592,75.184 22.382,74.955C22.507,74.94 22.659,74.822 22.717,74.709C22.803,74.551 22.661,74.436 22.524,74.353C22.104,74.099 21.696,73.83 21.263,73.597C20.103,72.976 19.908,72.067 20.64,71.01C21.027,70.45 21.076,69.87 20.245,69.573C19.994,69.483 19.571,69.32 19.908,69.021C20.295,68.677 20.298,68.262 20.376,67.858C20.485,67.288 19.9,66.431 21.065,66.321C21.101,66.318 21.162,66.11 21.134,66.019C20.926,65.339 21.207,65.186 21.861,65.216C22.393,65.238 22.846,64.945 23.097,64.447C23.332,63.978 23.274,63.546 22.897,63.151C22.793,63.041 22.77,62.857 22.709,62.709C22.856,62.727 23.006,62.727 23.142,62.767C23.439,62.847 23.69,62.79 23.953,62.634C24.986,62.016 25.235,60.856 25.837,59.949C26.245,59.336 26.752,58.688 26.43,57.832C26.144,57.069 26.653,56.729 27.183,56.282C27.897,55.68 29.014,55.757 29.515,55.127C30.526,53.856 30.903,52.266 30.952,50.632C30.969,50.021 30.789,49.433 31.365,48.889C31.902,48.381 32.352,47.723 32.654,47.048C33.381,45.415 32.95,44.594 30.896,43.381C30.346,43.054 29.83,42.627 29.125,42.735C28.593,42.816 28.165,42.555 27.742,42.323C27.066,41.952 26.372,41.648 25.632,41.407C25.275,41.291 24.703,41.226 24.632,40.636C24.444,39.046 23.522,37.175 21.633,37.383C21.273,37.424 20.969,37.328 20.706,37.062C20.062,36.416 19.462,35.703 18.727,35.178C18.259,34.844 17.775,34.246 17.03,34.54C16.64,34.694 16.27,34.53 15.913,34.53C15.136,34.53 14.68,33.825 13.927,33.845C13.682,33.852 13.056,34.397 13.2,33.483C13.231,33.292 12.846,33.187 12.75,33.302C12.134,34.053 10.974,34.043 10.467,34.945C10.204,35.414 9.867,35.718 9.284,35.294C8.955,35.055 8.568,35 8.152,35.178C7.147,35.61 6.68,35.309 6.617,34.196C6.587,33.669 6.63,33.152 6.792,32.634C7.083,31.7 6.544,31.059 5.538,31.11C5.29,31.122 5.047,31.147 4.798,31.155C4.469,31.167 4.277,31.142 4.398,30.685C4.603,29.914 4.978,29.239 5.381,28.57C5.558,28.277 5.563,28.038 5.3,27.825C4.684,27.322 3.246,27.752 3.01,28.498C2.737,29.359 1.468,29.934 0.728,29.417C0.004,28.904 -0.536,27.968 -0.255,27.204C0.318,25.65 0.546,23.615 2.628,23.233C3.94,22.995 5.292,22.797 6.625,22.711C7.413,22.661 8.378,23.068 8.061,24.336C8,24.58 8.21,24.911 8.342,25.177C8.494,25.484 8.707,25.81 9.089,25.795C9.497,25.78 9.596,25.386 9.712,25.072C9.877,24.635 9.87,24.17 9.73,23.736C9.315,22.45 9.748,21.579 10.946,20.976C11.584,20.654 12.147,20.19 12.767,19.833C13.669,19.316 13.365,18.143 14.193,17.497C15.077,16.809 15.637,15.707 16.962,15.674C17.175,15.669 17.405,15.583 17.446,15.347C17.605,14.411 18.449,14.245 19.115,13.896C19.305,13.795 19.66,13.542 19.586,14.165C19.538,14.587 19.994,14.71 20.28,14.514C21.068,13.969 22,13.758 22.836,13.333C23.244,13.125 23.545,12.823 23.267,12.406C22.945,11.927 22.671,12.396 22.393,12.577C22.041,12.808 21.663,12.967 21.339,12.555C21.038,12.178 21.283,11.952 21.605,11.743C21.937,11.528 21.914,11.241 21.77,10.9C21.709,10.754 21.306,10.807 21.539,10.601C21.795,10.375 21.871,10.696 22.015,10.869C22.309,11.224 23.059,11.442 23.079,11.131C23.137,10.196 23.748,10.621 24.143,10.518C24.47,10.432 24.695,10.063 25.095,10.191C24.837,10.515 24.584,10.842 24.32,11.161C24.275,11.216 24.194,11.241 24.13,11.284C23.948,11.409 23.811,11.568 23.872,11.804C23.928,12.02 24.146,12.017 24.305,12.108C24.91,12.449 25.66,11.904 26.167,12.324C26.932,12.957 27.134,12.361 27.127,11.882C27.122,11.45 27.519,10.653 26.476,10.601C26.108,10.583 26.18,10.254 26.435,9.983C27.291,9.074 27.003,7.853 25.837,7.439C25.564,7.343 25.328,7.14 25.379,6.936C25.554,6.221 25.04,5.638 25.07,4.965C25.08,4.749 25.062,4.533 24.819,4.448C24.596,4.37 24.399,4.48 24.257,4.636C23.971,4.947 23.649,5.201 23.259,5.367C23.079,5.445 22.909,5.522 22.752,5.317C22.611,5.136 22.717,5.02 22.823,4.874C23.117,4.473 22.985,4.186 22.56,3.97C22.382,3.88 22.205,3.759 22.081,3.609C21.539,2.943 19.743,3.154 19.32,3.87C19.087,4.264 18.935,4.777 18.396,4.962C18.152,5.045 17.985,5.299 18.142,5.563C18.699,6.492 17.988,6.753 17.36,7.039C16.704,7.338 15.918,7.464 15.977,8.476C15.989,8.707 15.731,8.973 15.559,9.189C15.455,9.32 15.29,9.533 15.09,9.383C14.93,9.265 14.859,9.064 14.925,8.825C15.189,7.886 15.288,7.024 13.892,6.977C13.748,6.972 13.583,6.838 13.471,6.723C12.993,6.233 12.481,5.892 11.754,6.188C11.693,6.213 11.6,6.163 11.521,6.145C11.855,5.683 11.27,5.101 11.891,4.583C13.492,3.245 15.637,3.008 17.284,1.798C17.405,1.713 17.529,1.63 17.651,1.544C18.13,1.411 18.603,1.208 19.09,1.163C20.3,1.049 20.837,0.512 20.805,-0.648C20.797,-0.887 20.939,-0.691 21.015,-0.688C21.658,-0.656 22.139,-0.154 22.803,-0.118C23.082,-0.103 23.343,0.233 23.603,0.437C23.616,0.449 23.548,0.633 23.482,0.66C22.813,0.934 22.286,1.549 21.433,1.394C21.012,1.318 20.597,1.544 20.647,2.057C20.701,2.604 21.164,2.541 21.531,2.448C22.058,2.315 22.362,2.489 22.747,2.88C23.16,3.302 23.771,3.579 24.346,3.784C24.753,3.933 24.865,3.543 24.878,3.192C24.878,3.189 24.976,3.174 25.022,3.187C26.167,3.501 26.01,2.787 25.891,2.104C25.863,1.946 25.769,1.697 25.837,1.64C26.032,1.471 26.146,1.755 26.306,1.815C26.82,2.009 27.266,1.768 27.715,1.592C27.91,1.514 27.99,1.24 27.864,1.107C27.215,0.422 26.618,-0.309 25.992,-1.01C25.632,-1.414 25.085,-1.726 24.751,-2.188C24.528,-2.499 24.287,-2.645 23.92,-2.685C23.692,-2.71 23.436,-2.534 23.229,-2.76C23.462,-2.811 23.692,-2.866 23.925,-2.909C24.199,-2.959 24.556,-2.916 24.584,-3.295C24.609,-3.647 24.277,-3.67 24.024,-3.732C23.955,-3.75 23.89,-3.785 23.824,-3.813C23.915,-3.823 24.024,-3.866 24.097,-3.835C25.098,-3.401 25.967,-3.971 26.757,-4.34C28.363,-5.091 30.088,-5.325 31.76,-5.789C31.765,-5.789 31.77,-5.794 31.772,-5.799C31.782,-5.799 31.793,-5.804 31.8,-5.807C32.145,-5.965 32.484,-6.148 32.887,-6.098C32.91,-6.098 32.935,-6.083 32.958,-6.073C32.57,-5.985 32.185,-5.897 31.8,-5.807C31.793,-5.802 31.785,-5.799 31.777,-5.794C31.772,-5.794 31.765,-5.792 31.76,-5.789C30.964,-5.209 30.065,-4.945 29.085,-4.92C28.839,-4.915 28.56,-4.958 28.424,-4.694C28.274,-4.4 28.525,-4.23 28.672,-4.011C29.077,-3.396 29.632,-3.353 30.26,-3.526C31.357,-3.828 32.39,-3.258 32.36,-2.336C32.352,-2.072 32.074,-1.756 32.155,-1.56C32.431,-0.904 31.942,-0.359 31.739,0.042C31.205,1.105 30.792,2.011 31.757,3.006C31.846,3.096 31.942,3.229 31.944,3.345C31.972,4.515 33.107,4.211 33.702,4.583C34.219,4.91 34.576,4.282 34.84,3.895C35.473,2.963 36.463,2.205 37.358,1.916C39.255,1.303 41.035,0.306 43.08,0.073C44.004,-0.033 45.073,-0.349 45.124,-1.663C45.126,-1.766 45.304,-1.881 45.417,-1.962C46.018,-2.381 46.816,-2.665 46.547,-3.652C46.507,-3.8 46.598,-3.735 46.664,-3.732C47.431,-3.687 47.51,-4.094 47.201,-4.632C47.056,-4.88 47.224,-4.863 47.322,-4.94C47.968,-5.453 48.736,-5.521 49.518,-5.563C49.777,-5.578 50.104,-5.636 50.142,-5.948C50.18,-6.272 49.85,-6.329 49.622,-6.349L49.625,-6.354ZM8.071,0.251C7.757,0.301 7.858,0.012 7.787,-0.131C7.727,-0.256 7.79,-0.299 7.995,-0.279C8.096,-0.189 8.243,-0.056 8.39,0.075C8.284,0.135 8.185,0.233 8.071,0.251ZM9.558,0.427C9.447,0.319 9.333,0.208 9.221,0.1C9.472,-0.01 9.72,-0.126 9.976,-0.229C10.032,-0.251 10.103,-0.229 10.12,-0.229C9.935,-0.013 9.745,0.208 9.558,0.427Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M12.04,-4.767C12.648,-4.797 13.137,-4.968 13.031,-4.114C12.99,-3.78 13.57,-3.82 13.821,-4.016C14.388,-4.461 14.763,-4.069 15.171,-3.78C15.336,-3.665 15.346,-3.484 15.232,-3.328C14.941,-2.934 14.545,-2.956 14.105,-3.017C13.758,-3.064 13.36,-3.079 13.041,-2.961C11.688,-2.459 10.622,-3.454 9.396,-3.597C9.325,-3.604 9.198,-3.838 9.231,-3.896C9.305,-4.031 9.441,-4.182 9.581,-4.22C10.434,-4.458 11.26,-4.848 12.04,-4.762V-4.767Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M44.83,3.039C44.04,2.911 43.188,3.008 43.199,1.755C43.204,1.034 43.65,0.962 43.969,1.085C44.812,1.411 45.569,1.08 46.36,0.982C47.031,0.899 47.459,1.323 47.639,1.803C47.824,2.305 47.218,2.333 46.879,2.504C46.226,2.833 45.534,2.986 44.832,3.036L44.83,3.039Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M11.126,28.952C9.999,29.449 9.644,28.021 8.699,27.792C8.152,27.659 7.681,27.455 7.134,27.686C6.903,27.784 6.665,27.787 6.539,27.538C6.402,27.267 6.62,27.129 6.817,27.003C7.825,26.353 9.649,26.566 10.632,27.473C10.875,27.697 11.131,27.865 11.438,27.985C11.744,28.106 12.132,28.191 12.111,28.636C12.099,28.884 11.8,28.982 11.128,28.955L11.126,28.952Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M18.472,-3.572C18.418,-3.521 18.365,-3.471 18.315,-3.421C17.595,-3.225 16.886,-2.713 16.149,-3.421C15.967,-3.597 15.711,-3.697 15.878,-3.994C16.037,-4.275 16.301,-4.503 16.62,-4.33C16.967,-4.142 17.263,-4.182 17.585,-4.325C17.481,-4.491 17.352,-4.647 17.274,-4.825C17.122,-5.177 17.392,-5.3 17.643,-5.393C18.223,-5.609 18.672,-5.315 19.085,-4.973C19.224,-4.858 19.219,-4.554 19.074,-4.531C18.474,-4.431 18.553,-3.961 18.469,-3.572H18.472Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M15.12,29.693C15.055,29.791 15.012,29.902 14.933,29.969C14.48,30.341 12.289,30.341 11.828,29.982C11.683,29.869 11.536,29.625 11.66,29.57C12.114,29.377 12.321,28.781 12.663,28.704C13.492,28.515 14.264,28.912 14.956,29.389C15.037,29.444 15.065,29.578 15.125,29.691L15.12,29.693Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M17.278,1.79C17.403,1.705 17.524,1.622 17.648,1.537C17.985,1.554 18.33,1.537 18.659,1.599C19.087,1.68 19.429,1.931 19.351,2.411C19.264,2.951 18.831,2.755 18.484,2.727C18.279,2.712 18.066,2.72 17.864,2.755C17.509,2.815 17.091,3.132 16.84,2.679C16.612,2.27 17.116,2.082 17.278,1.788V1.79Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M14.507,-4.308C14.163,-4.34 13.689,-4.285 13.745,-4.667C13.859,-5.465 14.619,-5.091 15.093,-5.224C15.313,-5.285 15.754,-5.239 15.675,-4.895C15.533,-4.28 14.918,-4.405 14.507,-4.31V-4.308Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M16.108,30.379C15.706,30.416 15.483,30.228 15.48,29.841C15.48,29.495 15.746,29.424 16.032,29.429C16.377,29.434 16.711,29.527 16.736,29.922C16.764,30.334 16.417,30.361 16.108,30.381V30.379Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M24.693,72.371C25.027,72.389 25.417,72.371 25.392,72.788C25.361,73.285 24.87,73.114 24.576,73.177C24.323,73.23 24.059,73.082 24.059,72.785C24.059,72.348 24.424,72.389 24.693,72.371Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M10.244,29.563C10.508,29.633 10.918,29.57 10.913,30.025C10.911,30.326 10.642,30.404 10.376,30.379C10.044,30.349 9.702,30.261 9.7,29.859C9.697,29.563 9.989,29.575 10.242,29.56L10.244,29.563Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M129.019,46.206C129.014,46.495 128.867,46.661 128.639,46.636C128.173,46.585 128.102,46.181 128.021,45.825C127.983,45.651 128.054,45.448 128.279,45.495C128.68,45.576 128.9,45.872 129.016,46.206H129.019Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M69.162,0.186C68.858,0.228 68.546,0.462 68.258,0.158C68.141,0.035 68.118,-0.106 68.22,-0.251C68.349,-0.44 68.539,-0.533 68.759,-0.495C69.154,-0.427 69.316,-0.201 69.157,0.193L69.162,0.188V0.186Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M112.896,44.795C112.587,44.729 112.289,44.642 112.321,44.285C112.347,44.006 112.613,43.966 112.846,44.006C113.112,44.051 113.385,44.162 113.375,44.481C113.368,44.775 113.107,44.79 112.896,44.795Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M120.417,14.205C120.164,14.192 120.05,14.074 120.088,13.881C120.156,13.534 120.394,13.333 120.749,13.301C120.924,13.283 121.053,13.399 121.015,13.574C120.944,13.911 120.696,14.102 120.417,14.207V14.205Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M52.024,16.57C52.09,16.166 52.363,15.684 52.216,15.119C52.155,14.888 52.444,14.694 52.723,14.694C52.948,14.694 53.118,14.898 53.07,15.064C52.908,15.631 53.176,16.174 53.12,16.729C53.082,17.103 52.986,17.404 52.53,17.404C52.019,17.404 52.051,17.028 52.021,16.57H52.024Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M60.572,19.13C60.902,19.406 61.649,18.962 61.786,19.642C61.867,20.052 61.363,20.104 61.023,20.102C60.535,20.102 60.008,20.004 59.894,19.469C59.823,19.142 60.248,19.177 60.575,19.13H60.572Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M65.145,19.401C65.41,19.381 65.616,19.459 65.613,19.715C65.608,20.069 65.324,20.172 65.025,20.205C64.782,20.23 64.529,20.167 64.521,19.883C64.509,19.464 64.891,19.484 65.145,19.403V19.401Z" /> | |
<path | |
android:fillColor="#0EA67B" | |
android:pathData="M50.061,16.905C50.028,17.183 49.83,17.294 49.589,17.301C49.303,17.309 49.113,17.123 49.096,16.857C49.078,16.578 49.308,16.465 49.554,16.478C49.815,16.488 50.03,16.601 50.058,16.907L50.061,16.905Z" /> | |
</group> | |
</group> | |
</vector> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import androidx.compose.animation.core.animateFloatAsState | |
import androidx.compose.animation.core.tween | |
import androidx.compose.foundation.Image | |
import androidx.compose.foundation.background | |
import androidx.compose.foundation.clickable | |
import androidx.compose.foundation.layout.Arrangement | |
import androidx.compose.foundation.layout.Box | |
import androidx.compose.foundation.layout.Row | |
import androidx.compose.foundation.layout.fillMaxSize | |
import androidx.compose.foundation.layout.padding | |
import androidx.compose.foundation.layout.size | |
import androidx.compose.foundation.layout.width | |
import androidx.compose.foundation.shape.RoundedCornerShape | |
import androidx.compose.material3.CircularProgressIndicator | |
import androidx.compose.material3.MaterialTheme | |
import androidx.compose.runtime.Composable | |
import androidx.compose.runtime.getValue | |
import androidx.compose.ui.Alignment | |
import androidx.compose.ui.Modifier | |
import androidx.compose.ui.draw.alpha | |
import androidx.compose.ui.graphics.Brush | |
import androidx.compose.ui.graphics.Color | |
import androidx.compose.ui.layout.ContentScale | |
import androidx.compose.ui.res.painterResource | |
import androidx.compose.ui.tooling.preview.Preview | |
import androidx.compose.ui.unit.dp | |
import androidx.hilt.navigation.compose.hiltViewModel | |
import androidx.lifecycle.compose.collectAsStateWithLifecycle | |
import com.cericatto.gravitytilt.R | |
import com.cericatto.gravitytilt.ui.SpacecraftScreen | |
import com.cericatto.gravitytilt.ui.theme.backgroundFirst | |
import com.cericatto.gravitytilt.ui.theme.backgroundLast | |
@Composable | |
fun HomeScreenRoot( | |
modifier: Modifier = Modifier, | |
viewModel: HomeScreenViewModel = hiltViewModel() | |
) { | |
val state by viewModel.state.collectAsStateWithLifecycle() | |
HomeScreen( | |
modifier = modifier, | |
onAction = viewModel::onAction, | |
state = state | |
) | |
} | |
@Composable | |
private fun HomeScreen( | |
modifier: Modifier = Modifier, | |
onAction: (HomeScreenAction) -> Unit, | |
state: HomeScreenState | |
) { | |
if (state.loading) { | |
Box( | |
modifier = Modifier | |
.padding(vertical = 20.dp) | |
.fillMaxSize(), | |
contentAlignment = Alignment.Center | |
) { | |
CircularProgressIndicator( | |
color = MaterialTheme.colorScheme.primary, | |
strokeWidth = 4.dp, | |
modifier = Modifier.size(64.dp) | |
) | |
} | |
} else { | |
GravityTilt( | |
modifier = modifier, | |
onAction = onAction, | |
state = state | |
) | |
} | |
} | |
@Composable | |
fun GravityTilt( | |
onAction: (HomeScreenAction) -> Unit, | |
state: HomeScreenState, | |
modifier: Modifier = Modifier | |
) { | |
Box( | |
modifier = Modifier | |
.fillMaxSize() | |
.background( | |
brush = Brush.verticalGradient( | |
colors = listOf( | |
backgroundFirst, | |
backgroundLast | |
) | |
) | |
) | |
) { | |
GravityToggle( | |
onAction = onAction, | |
option = state.option, | |
modifier = Modifier | |
.padding(top = 100.dp) | |
.width(130.dp) | |
.align(Alignment.TopCenter) | |
) | |
Image( | |
painter = painterResource(R.drawable.surface), | |
contentDescription = "Mars", | |
contentScale = ContentScale.Crop, | |
modifier = Modifier | |
.align(Alignment.BottomStart) | |
) | |
/* | |
Image( | |
painter = painterResource(R.drawable.ufo), | |
contentDescription = "UFO", | |
contentScale = ContentScale.Crop, | |
modifier = Modifier | |
.align(Alignment.Center) | |
) | |
*/ | |
SpacecraftScreen( | |
option = state.option, | |
) | |
} | |
} | |
@Composable | |
fun GravityToggle( | |
onAction: (HomeScreenAction) -> Unit, | |
option: OptionPlanet, | |
modifier: Modifier = Modifier | |
) { | |
val duration = 1000 | |
val earthAlpha by animateFloatAsState( | |
targetValue = if (option == OptionPlanet.EARTH) 1f else 0f, | |
animationSpec = tween(durationMillis = duration) | |
) | |
val marsAlpha by animateFloatAsState( | |
targetValue = if (option == OptionPlanet.MARS) 1f else 0f, | |
animationSpec = tween(durationMillis = duration) | |
) | |
Row( | |
verticalAlignment = Alignment.CenterVertically, | |
horizontalArrangement = Arrangement.SpaceEvenly, | |
modifier = modifier | |
.clickable { | |
onAction(HomeScreenAction.OnToggleButton) | |
} | |
.background( | |
color = Color.White, | |
shape = RoundedCornerShape(30.dp) | |
) | |
.padding(5.dp) | |
) { | |
Image( | |
painter = painterResource(R.drawable.earth), | |
contentDescription = "Earth", | |
modifier = Modifier | |
.weight(1f) | |
// .alpha(if (option == OptionPlanet.EARTH) 0f else 1f) | |
.alpha(earthAlpha) | |
) | |
Image( | |
painter = painterResource(R.drawable.mars), | |
contentDescription = "Mars", | |
modifier = Modifier | |
.weight(1f) | |
// .alpha(if (option == OptionPlanet.MARS) 0f else 1f) | |
.alpha(marsAlpha) | |
) | |
} | |
} | |
@Preview(showBackground = true) | |
@Composable | |
private fun GravityTiltPreview() { | |
GravityTilt( | |
onAction = {}, | |
state = HomeScreenState() | |
) | |
} | |
@Preview(showBackground = true) | |
@Composable | |
private fun GravityTogglePreview() { | |
Box( | |
contentAlignment = Alignment.Center, | |
modifier = Modifier | |
.background(Color.Black.copy(alpha = 0.55f)) | |
) { | |
GravityToggle( | |
onAction = {}, | |
option = OptionPlanet.MARS, | |
modifier = Modifier | |
.padding(top = 60.dp) | |
.width(130.dp) | |
.align(Alignment.TopCenter) | |
) | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sealed interface HomeScreenAction { | |
data object OnToggleButton : HomeScreenAction | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
data class HomeScreenState( | |
val loading : Boolean = true, | |
val option: OptionPlanet = OptionPlanet.EARTH | |
) | |
enum class OptionPlanet { | |
MARS, EARTH | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import androidx.lifecycle.ViewModel | |
import dagger.hilt.android.lifecycle.HiltViewModel | |
import kotlinx.coroutines.flow.MutableStateFlow | |
import kotlinx.coroutines.flow.StateFlow | |
import kotlinx.coroutines.flow.asStateFlow | |
import kotlinx.coroutines.flow.update | |
import javax.inject.Inject | |
@HiltViewModel | |
class HomeScreenViewModel @Inject constructor(): ViewModel() { | |
private val _state = MutableStateFlow(HomeScreenState()) | |
val state: StateFlow<HomeScreenState> = _state.asStateFlow() | |
fun onAction(action: HomeScreenAction) { | |
when (action) { | |
is HomeScreenAction.OnToggleButton -> onToggleButton() | |
} | |
} | |
init { | |
_state.update { state -> | |
state.copy( | |
loading = false | |
) | |
} | |
} | |
private fun onToggleButton() { | |
_state.update { state -> | |
state.copy( | |
option = if (_state.value.option == OptionPlanet.EARTH) { | |
OptionPlanet.MARS | |
} else { | |
OptionPlanet.EARTH | |
} | |
) | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.os.Bundle | |
import androidx.activity.ComponentActivity | |
import androidx.activity.compose.setContent | |
import androidx.activity.enableEdgeToEdge | |
import androidx.compose.foundation.layout.fillMaxSize | |
import androidx.compose.foundation.layout.padding | |
import androidx.compose.material3.Scaffold | |
import androidx.compose.ui.Modifier | |
import com.cericatto.gravitytilt.ui.home.HomeScreenRoot | |
import com.cericatto.gravitytilt.ui.theme.GravityTiltTheme | |
import dagger.hilt.android.AndroidEntryPoint | |
@AndroidEntryPoint | |
class MainActivity : ComponentActivity() { | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
enableEdgeToEdge() | |
setContent { | |
GravityTiltTheme { | |
Scaffold( | |
modifier = Modifier | |
.fillMaxSize() | |
) { innerPadding -> | |
HomeScreenRoot( | |
modifier = Modifier | |
.padding(innerPadding) | |
) | |
} | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:aapt="http://schemas.android.com/aapt" | |
android:width="52dp" | |
android:height="52dp" | |
android:viewportWidth="52" | |
android:viewportHeight="52"> | |
<group> | |
<clip-path android:pathData="M0,0h52v52h-52z" /> | |
<group> | |
<clip-path android:pathData="M26,26m-26,0a26,26 0,1 1,52 0a26,26 0,1 1,-52 0" /> | |
<path android:pathData="M26,26m-26,0a26,26 0,1 1,52 0a26,26 0,1 1,-52 0"> | |
<aapt:attr name="android:fillColor"> | |
<gradient | |
android:endX="26" | |
android:endY="22.624" | |
android:startX="26" | |
android:startY="0" | |
android:type="linear"> | |
<item | |
android:color="#FFD76545" | |
android:offset="0" /> | |
<item | |
android:color="#FFB52222" | |
android:offset="1" /> | |
</gradient> | |
</aapt:attr> | |
</path> | |
<path | |
android:fillAlpha="0.07" | |
android:fillColor="#FFF159" | |
android:pathData="M87,-25C87,8.689 59.689,36 26,36C-7.689,36 -35,8.689 -35,-25C-35,-58.689 -7.689,-86 26,-86C59.689,-86 87,-58.689 87,-25ZM-26.807,-25C-26.807,4.165 -3.165,27.807 26,27.807C55.165,27.807 78.807,4.165 78.807,-25C78.807,-54.165 55.165,-77.807 26,-77.807C-3.165,-77.807 -26.807,-54.165 -26.807,-25Z" /> | |
<path | |
android:fillAlpha="0.07" | |
android:fillColor="#FFF159" | |
android:pathData="M82,-36C82,-5.072 56.928,20 26,20C-4.928,20 -30,-5.072 -30,-36C-30,-66.928 -4.928,-92 26,-92C56.928,-92 82,-66.928 82,-36ZM-22.479,-36C-22.479,-9.226 -0.774,12.479 26,12.479C52.774,12.479 74.479,-9.226 74.479,-36C74.479,-62.774 52.774,-84.479 26,-84.479C-0.774,-84.479 -22.479,-62.774 -22.479,-36Z" /> | |
<path | |
android:fillAlpha="0.07" | |
android:fillColor="#FFF159" | |
android:pathData="M103,-29C103,13.526 68.526,48 26,48C-16.526,48 -51,13.526 -51,-29C-51,-71.526 -16.526,-106 26,-106C68.526,-106 103,-71.526 103,-29ZM-41.281,-29C-41.281,8.158 -11.158,38.281 26,38.281C63.158,38.281 93.281,8.158 93.281,-29C93.281,-66.158 63.158,-96.281 26,-96.281C-11.158,-96.281 -41.281,-66.158 -41.281,-29Z" /> | |
</group> | |
</group> | |
</vector> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context | |
import android.hardware.Sensor | |
import android.hardware.SensorEvent | |
import android.hardware.SensorEventListener | |
import android.hardware.SensorManager | |
import androidx.compose.foundation.Image | |
import androidx.compose.foundation.layout.Box | |
import androidx.compose.foundation.layout.fillMaxSize | |
import androidx.compose.foundation.layout.offset | |
import androidx.compose.foundation.layout.size | |
import androidx.compose.runtime.Composable | |
import androidx.compose.runtime.DisposableEffect | |
import androidx.compose.runtime.LaunchedEffect | |
import androidx.compose.runtime.getValue | |
import androidx.compose.runtime.mutableFloatStateOf | |
import androidx.compose.runtime.mutableLongStateOf | |
import androidx.compose.runtime.remember | |
import androidx.compose.runtime.setValue | |
import androidx.compose.ui.Alignment | |
import androidx.compose.ui.Modifier | |
import androidx.compose.ui.platform.LocalContext | |
import androidx.compose.ui.res.painterResource | |
import androidx.compose.ui.tooling.preview.Preview | |
import androidx.compose.ui.unit.IntOffset | |
import androidx.compose.ui.unit.dp | |
import com.cericatto.gravitytilt.R | |
import com.cericatto.gravitytilt.ui.home.OptionPlanet | |
import kotlinx.coroutines.delay | |
import kotlin.math.ln | |
import kotlin.math.roundToInt | |
import kotlin.math.sqrt | |
@Composable | |
fun SpacecraftScreen( | |
option: OptionPlanet, | |
modifier: Modifier = Modifier | |
) { | |
val context = LocalContext.current | |
val sensorManager = remember { context.getSystemService(Context.SENSOR_SERVICE) as SensorManager } | |
val rotationSensor = remember { sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR) } | |
var pitch by remember { mutableFloatStateOf(0f) } | |
var roll by remember { mutableFloatStateOf(0f) } | |
var posX by remember { mutableFloatStateOf(0f) } | |
var posY by remember { mutableFloatStateOf(0f) } | |
var velX by remember { mutableFloatStateOf(0f) } | |
var velY by remember { mutableFloatStateOf(0f) } | |
var lastTime by remember { mutableLongStateOf(0L) } | |
val sensorListener = remember { | |
object : SensorEventListener { | |
override fun onSensorChanged(event: SensorEvent) { | |
if (event.sensor.type == Sensor.TYPE_ROTATION_VECTOR) { | |
val rotationMatrix = FloatArray(9) | |
SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values) | |
val orientation = FloatArray(3) | |
SensorManager.getOrientation(rotationMatrix, orientation) | |
roll = orientation[2] | |
pitch = orientation[1] | |
} | |
} | |
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {} | |
} | |
} | |
DisposableEffect(Unit) { | |
sensorManager.registerListener( | |
sensorListener, | |
rotationSensor, | |
SensorManager.SENSOR_DELAY_GAME | |
) | |
onDispose { | |
sensorManager.unregisterListener(sensorListener) | |
} | |
} | |
LaunchedEffect(option) { | |
lastTime = System.nanoTime() | |
while (true) { | |
delay(16) | |
val currentTime = System.nanoTime() | |
val deltaTime = (currentTime - lastTime) / 1_000_000_000f | |
lastTime = currentTime | |
val g = when (option) { | |
OptionPlanet.EARTH -> 98.1f | |
OptionPlanet.MARS -> 37.2f | |
} | |
val d = when (option) { | |
OptionPlanet.EARTH -> -ln(0.9f) | |
OptionPlanet.MARS -> -ln(0.99f) | |
} | |
val maxSpeed = when (option) { | |
OptionPlanet.EARTH -> 500f | |
OptionPlanet.MARS -> Float.MAX_VALUE | |
} | |
val k = 0.1f | |
val tiltX = Math.toDegrees(roll.toDouble()).toFloat() | |
val tiltY = Math.toDegrees(pitch.toDouble()).toFloat() | |
// Acceleration: a(t) = g * k * tilt | |
val aX = g * k * tiltX | |
val aY = -g * k * tiltY | |
// Friction: f(t) = d * v(t) | |
val fX = d * velX | |
val fY = d * velY | |
// Velocity: v(t + delta) = v(t) + (a(t) - f(t)) * delta | |
velX += (aX - fX) * deltaTime | |
velY += (aY - fY) * deltaTime | |
// Apply max speed | |
val speed = sqrt(velX * velX + velY * velY) | |
if (speed > maxSpeed) { | |
val scale = maxSpeed / speed | |
velX *= scale | |
velY *= scale | |
} | |
// Update position | |
posX += velX * deltaTime | |
posY += velY * deltaTime | |
println("Planet: $option, g: $g, lambda: $d, velX: $velX, velY: $velY") | |
} | |
} | |
Box( | |
modifier = modifier.fillMaxSize() | |
) { | |
Image( | |
painter = painterResource(id = R.drawable.ufo), | |
contentDescription = "Alien Spacecraft", | |
modifier = Modifier | |
.align(Alignment.Center) | |
.size(100.dp) | |
.offset { IntOffset(posX.roundToInt(), posY.roundToInt()) } | |
) | |
} | |
} | |
@Preview(showBackground = true) | |
@Composable | |
fun SpacecraftScreenPreview() { | |
SpacecraftScreen( | |
option = OptionPlanet.EARTH | |
) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:aapt="http://schemas.android.com/aapt" | |
android:width="1424dp" | |
android:height="413dp" | |
android:viewportWidth="1424" | |
android:viewportHeight="413"> | |
<group> | |
<clip-path android:pathData="M712,828m-828,0a828,828 0,1 1,1656 0a828,828 0,1 1,-1656 0" /> | |
<path android:pathData="M712,828m-828,0a828,828 0,1 1,1656 0a828,828 0,1 1,-1656 0"> | |
<aapt:attr name="android:fillColor"> | |
<gradient | |
android:endX="712" | |
android:endY="720.5" | |
android:startX="712" | |
android:startY="0" | |
android:type="linear"> | |
<item | |
android:color="#FFD76545" | |
android:offset="0" /> | |
<item | |
android:color="#FFB52222" | |
android:offset="1" /> | |
</gradient> | |
</aapt:attr> | |
</path> | |
<path | |
android:fillAlpha="0.07" | |
android:fillColor="#FFF159" | |
android:pathData="M712,-601m-783,0a783,783 0,1 1,1566 0a783,783 0,1 1,-1566 0" /> | |
<path | |
android:fillAlpha="0.07" | |
android:fillColor="#FFF159" | |
android:pathData="M1540,-369C1540,88.3 1169.3,459 712,459C254.7,459 -116,88.3 -116,-369C-116,-826.3 254.7,-1197 712,-1197C1169.3,-1197 1540,-826.3 1540,-369ZM65.3,-369C65.3,-11.8 354.8,277.7 712,277.7C1069.2,277.7 1358.7,-11.8 1358.7,-369C1358.7,-726.2 1069.2,-1015.7 712,-1015.7C354.8,-1015.7 65.3,-726.2 65.3,-369Z" /> | |
<path android:pathData="M455,94a98.5,42 0,1 0,197 0a98.5,42 0,1 0,-197 0z"> | |
<aapt:attr name="android:fillColor"> | |
<gradient | |
android:endX="553.5" | |
android:endY="136" | |
android:startX="553.5" | |
android:startY="52" | |
android:type="linear"> | |
<item | |
android:color="#FFBE342C" | |
android:offset="0" /> | |
<item | |
android:color="#FFA62121" | |
android:offset="1" /> | |
</gradient> | |
</aapt:attr> | |
</path> | |
<path | |
android:fillAlpha="0.09" | |
android:fillColor="#FFF159" | |
android:fillType="evenOdd" | |
android:pathData="M651,100C651.7,98 652,96 652,94C652,70.8 607.9,52 553.5,52C499.1,52 455,70.8 455,94C455,96 455.3,98 456,100C462.8,79.6 503.9,64 553.5,64C603.1,64 644.2,79.6 651,100Z" /> | |
<path android:pathData="M683,208a61,26 0,1 0,122 0a61,26 0,1 0,-122 0z"> | |
<aapt:attr name="android:fillColor"> | |
<gradient | |
android:endX="744" | |
android:endY="234" | |
android:startX="744" | |
android:startY="182" | |
android:type="linear"> | |
<item | |
android:color="#FFBE342C" | |
android:offset="0" /> | |
<item | |
android:color="#FFA62121" | |
android:offset="1" /> | |
</gradient> | |
</aapt:attr> | |
</path> | |
<path | |
android:fillAlpha="0.09" | |
android:fillColor="#FFF159" | |
android:fillType="evenOdd" | |
android:pathData="M804.3,211.7C804.7,210.5 805,209.3 805,208C805,193.6 777.7,182 744,182C710.3,182 683,193.6 683,208C683,209.3 683.2,210.5 683.6,211.7C687.8,199.1 713.3,189.4 744,189.4C774.7,189.4 800.1,199.1 804.3,211.7Z" /> | |
<path android:pathData="M749,292.2a120,51.2 0,1 0,240 0a120,51.2 0,1 0,-240 0z"> | |
<aapt:attr name="android:fillColor"> | |
<gradient | |
android:endX="869" | |
android:endY="343.4" | |
android:startX="869" | |
android:startY="241" | |
android:type="linear"> | |
<item | |
android:color="#FFBE342C" | |
android:offset="0" /> | |
<item | |
android:color="#FFA62121" | |
android:offset="1" /> | |
</gradient> | |
</aapt:attr> | |
</path> | |
<path | |
android:fillAlpha="0.09" | |
android:fillColor="#FFF159" | |
android:fillType="evenOdd" | |
android:pathData="M987.8,299.5C988.6,297.1 989,294.7 989,292.2C989,263.9 935.3,241 869,241C802.7,241 749,263.9 749,292.2C749,294.7 749.4,297.1 750.2,299.5C758.5,274.7 808.6,255.6 869,255.6C929.5,255.6 979.5,274.7 987.8,299.5Z" /> | |
<path android:pathData="M407,403a157,67 0,1 0,314 0a157,67 0,1 0,-314 0z"> | |
<aapt:attr name="android:fillColor"> | |
<gradient | |
android:endX="564" | |
android:endY="469.9" | |
android:startX="564" | |
android:startY="336" | |
android:type="linear"> | |
<item | |
android:color="#FFBE342C" | |
android:offset="0" /> | |
<item | |
android:color="#FFA62121" | |
android:offset="1" /> | |
</gradient> | |
</aapt:attr> | |
</path> | |
<path | |
android:fillAlpha="0.09" | |
android:fillColor="#FFF159" | |
android:fillType="evenOdd" | |
android:pathData="M719.5,412.5C720.5,409.4 721,406.2 721,403C721,366 650.7,336 564,336C477.3,336 407,366 407,403C407,406.2 407.5,409.4 408.6,412.5C419.5,380.1 484.9,355.1 564,355.1C643.1,355.1 708.6,380.1 719.5,412.5Z" /> | |
</group> | |
</vector> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
android:width="167dp" | |
android:height="100dp" | |
android:viewportWidth="167" | |
android:viewportHeight="100"> | |
<group> | |
<clip-path android:pathData="M0,0h166.99v100h-166.99z" /> | |
<path | |
android:fillColor="#F3FBC0" | |
android:pathData="M83.49,40.15m-38.75,0a38.75,38.75 0,1 1,77.49 0a38.75,38.75 0,1 1,-77.49 0" /> | |
<path | |
android:fillColor="#FAFEE1" | |
android:pathData="M79.89,9.19a10.92,19.08 122.74,1 0,32.1 20.64a10.92,19.08 122.74,1 0,-32.1 -20.64z" /> | |
<path | |
android:fillColor="#ACEAD8" | |
android:pathData="M0,64.53a83.49,35.47 0,1 0,166.99 0a83.49,35.47 0,1 0,-166.99 0z" /> | |
<path | |
android:fillColor="#5BB59B" | |
android:pathData="M37.11,70.35a46.39,19.83 0,1 0,92.77 0a46.39,19.83 0,1 0,-92.77 0z" /> | |
<path | |
android:fillColor="#5BB59B" | |
android:pathData="M70.94,40.15a12.55,6.73 0,1 0,25.1 0a12.55,6.73 0,1 0,-25.1 0z" /> | |
<path | |
android:fillColor="#5BB59B" | |
android:pathData="M34.56,46.7a10.37,5.64 0,1 0,20.74 0a10.37,5.64 0,1 0,-20.74 0z" /> | |
<path | |
android:fillColor="#5BB59B" | |
android:pathData="M132.43,46.7a5.64,10.37 90,1 1,-20.74 0a5.64,10.37 90,1 1,20.74 0z" /> | |
<path | |
android:fillColor="#5BB59B" | |
android:pathData="M11.28,67.08a8.91,4.91 0,1 0,17.83 0a8.91,4.91 0,1 0,-17.83 0z" /> | |
<path | |
android:fillColor="#5BB59B" | |
android:pathData="M155.71,67.08a4.91,8.91 90,1 1,-17.83 0a4.91,8.91 90,1 1,17.83 0z" /> | |
<path | |
android:fillColor="#5BB59B" | |
android:pathData="M38.93,88.9a5.64,3.09 0,1 0,11.28 0a5.64,3.09 0,1 0,-11.28 0z" /> | |
<path | |
android:fillColor="#5BB59B" | |
android:pathData="M128.06,88.9a3.09,5.64 90,1 1,-11.28 0a3.09,5.64 90,1 1,11.28 0z" /> | |
<path | |
android:fillColor="#5BB59B" | |
android:pathData="M78.58,95.45a4.91,2.73 0,1 0,9.82 0a4.91,2.73 0,1 0,-9.82 0z" /> | |
<path | |
android:fillColor="#EAF797" | |
android:pathData="M122.14,59.38C113.83,54.04 99.62,50.52 83.49,50.52C67.42,50.52 53.26,54.02 44.94,59.32L44.76,65.18C44.75,65.33 44.75,65.47 44.75,65.62C44.75,74.76 62.09,82.17 83.49,82.17C104.89,82.17 122.24,74.76 122.24,65.62C122.24,65.55 122.24,65.47 122.24,65.4L122.14,59.38Z" /> | |
</group> | |
</vector> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment