Skip to content

Commit

Permalink
Starts adding the basic gameloop
Browse files Browse the repository at this point in the history
  • Loading branch information
migue1s committed May 22, 2020
1 parent 91d62d7 commit a4897b0
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 0 deletions.
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -12,6 +12,7 @@
"storybook": "start-storybook -p 7007"
},
"dependencies": {
"@reduxjs/toolkit": "^1.3.6",
"react": "16.11.0",
"react-native": "0.62.2"
},
Expand Down
11 changes: 11 additions & 0 deletions src/redux/gameSlice.ts
@@ -0,0 +1,11 @@
import {createSlice} from '@reduxjs/toolkit';

const gameSlice = createSlice({
name: 'game',
initialState: {},
reducers: {
tick: (state) => state,
},
});

export default gameSlice;
10 changes: 10 additions & 0 deletions src/redux/store.ts
@@ -0,0 +1,10 @@
import {configureStore} from '@reduxjs/toolkit';
import gameSlice from './gameSlice';

const store = configureStore({
reducer: {
game: gameSlice.reducer,
},
});

export default store;
18 changes: 18 additions & 0 deletions src/utils/TickLoop.test.ts
@@ -0,0 +1,18 @@
import {start, stop} from './TickLoop';

jest.useFakeTimers();
jest.mock('LayoutAnimation');

it('starts and stops', () => {
const callback = jest.fn();

start(callback, undefined, 20);
jest.advanceTimersByTime(100);

expect(callback).toHaveBeenCalledTimes(5);

stop();
jest.advanceTimersByTime(100);

expect(callback).toHaveBeenCalledTimes(5);
});
33 changes: 33 additions & 0 deletions src/utils/TickLoop.ts
@@ -0,0 +1,33 @@
let action: ((delta: number) => void) | undefined;
let lastTime: number;
let timer: number;

export const start = (
callback: (delta: number) => void,
time: number = Date.now(),
delay?: number,
) => {
stop();
lastTime = time;
action = callback;
timer = setInterval(onFiredTimer, delay);
};

const onFiredTimer = () => {
if (!lastTime) {
lastTime = Date.now();
return;
}
const current = Date.now();
const delta = current - lastTime;
lastTime = current;

action && action(delta);
};

export const stop = () => {
if (timer) {
clearInterval(timer);
}
action = undefined;
};
38 changes: 38 additions & 0 deletions yarn.lock
Expand Up @@ -1514,6 +1514,16 @@
resolved "https://registry.yarnpkg.com/@react-native-community/eslint-plugin/-/eslint-plugin-1.1.0.tgz#e42b1bef12d2415411519fd528e64b593b1363dc"
integrity sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ==

"@reduxjs/toolkit@^1.3.6":
version "1.3.6"
resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.3.6.tgz#306171fce2ab7423931736c34fa82190959dcd62"
integrity sha512-eNYURfoJa6mRNU5YtBVbmE5+nDoc4lpjZ181PBwRC6nIFYZdNR3GcoQ4uomFt8eHpXAUAdpCdxBlDsmwyXOt9Q==
dependencies:
immer "^6.0.1"
redux "^4.0.0"
redux-thunk "^2.3.0"
reselect "^4.0.0"

"@sinonjs/commons@^1.7.0":
version "1.7.2"
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.2.tgz#505f55c74e0272b43f6c52d81946bed7058fc0e2"
Expand Down Expand Up @@ -6421,6 +6431,11 @@ immer@1.10.0:
resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d"
integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==

immer@^6.0.1:
version "6.0.6"
resolved "https://registry.yarnpkg.com/immer/-/immer-6.0.6.tgz#ffd46c1976548fe3df0be671b7f8aaf620166623"
integrity sha512-KAo8XDbDcF59lDlKEFOhyssB/z6805ZvH/S3wqMPaTzLMFDUUu1Lq647LrUyuXzI36wMpzwZ83mMxwOXM961aA==

import-cwd@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
Expand Down Expand Up @@ -10071,6 +10086,19 @@ recursive-readdir@2.2.2:
dependencies:
minimatch "3.0.4"

redux-thunk@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==

redux@^4.0.0:
version "4.0.5"
resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==
dependencies:
loose-envify "^1.4.0"
symbol-observable "^1.2.0"

refractor@^2.4.1:
version "2.10.1"
resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e"
Expand Down Expand Up @@ -10243,6 +10271,11 @@ requires-port@^1.0.0:
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=

reselect@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7"
integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==

resize-observer-polyfill@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
Expand Down Expand Up @@ -11234,6 +11267,11 @@ symbol-observable@1.0.1:
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=

symbol-observable@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==

symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
Expand Down

0 comments on commit a4897b0

Please sign in to comment.