0

construct.js infraction, coupled in with the source at Symbol.tsx, likely.

Symbol.tsx

import type {
  SkFont,
  Vector,
  SkiaValue,
  SkiaClockValue,
} from "@shopify/react-native-skia";
import {
  interpolate,
  dist,
  useComputedValue,
  vec,
  Group,
  Text,
} from "@shopify/react-native-skia";
import React from "react";
import SimplexNoise from "simplex-noise";
import { useWindowDimensions } from "react-native";

import { FG } from "./Theme";

export const COLS = 5;
export const ROWS = 10;
const DIGITS = new Array(10).fill(0).map((_, i) => `${i}`);
const F = 0.0008;
const R = 125;
const A = 10;

interface SymbolProps {
  i: number;
  j: number;
  font: SkFont;
  pointer: SkiaValue<Vector>;
  clock: SkiaClockValue;
}

export const Symbol = ({ i, j, font, pointer, clock }: SymbolProps) => {
  const { width, height } = useWindowDimensions();
  const SIZE = { width: width / COLS, height: height / ROWS };
  const x = i * SIZE.width;
  const y = j * SIZE.height;
  const noise = new SimplexNoise(`${i}-${j}`);
  const text = DIGITS[Math.round(Math.random() * 9)];
  const [symbolWidth] = font.getGlyphWidths(font.getGlyphIDs(text));
  const origin = vec(x + SIZE.width / 2, y + SIZE.height / 2);
  const transform = useComputedValue(
    () => [
      {
        scale: interpolate(
          dist(pointer.current, origin),
          [0, R],
          [1.25, 0.25],
          {
            extrapolateLeft: "clamp",
            extrapolateRight: "clamp",
          }
        ),
      },
    ],
    [pointer]
  );
  const dx = useComputedValue(() => {
    const d = A * noise.noise2D(x, clock.current * F);
    return origin.x - symbolWidth / 2 + d;
  }, [clock]);
  const dy = useComputedValue(() => {
    const d = A * noise.noise2D(y, clock.current * F);
    return origin.y + font.getSize() / 2 + d;
  }, [clock]);
  return (
    <Group transform={transform} origin={origin}>
      <Text text={text} x={dx} y={dy} font={font} color={FG} />
    </Group>
  );
};

Severance.tsx
import {
  Canvas,
  Fill,
  Group,
  useClockValue,
  useFont,
  useTouchHandler,
  useValue,
} from "@shopify/react-native-skia";
import React from "react";
import { useWindowDimensions } from "react-native";

import { CRT } from "./CRT";
import { COLS, ROWS, Symbol } from "./Symbol";
import { BG } from "./Theme";

const rows = new Array(COLS).fill(0).map((_, i) => i);
const cols = new Array(ROWS).fill(0).map((_, i) => i);

export const Severance = () => {
  const { width, height } = useWindowDimensions();
  const clock = useClockValue();
  const font = useFont(require("./SF-Mono-Medium.otf"), height / ROWS);
  const pointer = useValue({ x: width / 2, y: height / 2 });
  const onTouch = useTouchHandler({
    onActive: (pt) => {
      pointer.current = pt;
    },
  });
  if (font === null) {
    return null;
  }
  return (
    <Canvas style={{ flex: 1 }} onTouch={onTouch} debug>
      <CRT>
        <Group>
          <Fill color={BG} />
          {rows.map((_i, i) =>
            cols.map((_j, j) => {
              return (
                <Symbol
                  key={`${i}-${j}`}
                  i={i}
                  j={j}
                  font={font}
                  pointer={pointer}
                  clock={clock}
                />
              );
            })
          )}
        </Group>
      </CRT>
    </Canvas>
  );
};



CRT.tsx
import {
  Group,
  Skia,
  RuntimeShader,
  usePaintRef,
  Paint,
  vec,
} from "@shopify/react-native-skia";
import type { ReactNode } from "react";
import React from "react";
import { useWindowDimensions } from "react-native";

const source = Skia.RuntimeEffect.Make(`
uniform shader image;
uniform vec2 resolution;
vec2 curve(vec2 uv)
{
    // as we near the edge of our screen apply greater distortion using a sinusoid.
    float curvature = 6.0;
    uv = uv * 2.0 - 1.0;
    vec2 offset = abs(uv.yx) / curvature;
    uv = uv + uv * offset * offset;
    uv = uv * 0.5 + 0.5;
    return uv;
}
vec4 scanLine(float x)
{
    float f = 900;
    float opacity = 0.25;
    float intensity = ((0.5 * sin(x * f)) + 0.5) * 0.9 + 0.1;
    return vec4(vec3(pow(intensity, opacity)), 1.0);
}
half4 main(float2 xy) {
  vec2 uv = xy/resolution;
  vec2 curvedUV = curve(vec2(uv.x, uv.y));
  vec4 baseColor = image.eval(curvedUV * resolution);
  baseColor *= scanLine(curvedUV.x);
  baseColor *= scanLine(curvedUV.y);
  baseColor *= vec4(vec3(1.5), 1.0);
  if (curvedUV.x < 0.0 || curvedUV.y < 0.0 || curvedUV.x > 1.0 || curvedUV.y > 1.0){
      return vec4(0.0, 0.0, 0.0, 1.0);
  } else {
      return baseColor;
  }
}
`)!;

interface CRTProps {
  children: ReactNode | ReactNode[];
}

export const CRT = ({ children }: CRTProps) => {
  const paint = usePaintRef();
  const { width, height } = useWindowDimensions();
  return (
    <>
      <Paint ref={paint}>
        <RuntimeShader
          source={source}
          uniforms={{ resolution: vec(width, height) }}
        />
      </Paint>
      <Group layer={paint}>{children}</Group>
    </>
  );
};

index.ts
export * from "./Severance";

Issue occurs in Symbol.tsx at const noise = SimplexNoise declaration, please help.

1 Answer 1

0

I guess it’s pretty niche software. It was predictably version 4.0 updates, however I was trying to format with seeding using a now separated alea feature when I just had to format for randomization now all works perfectly.

Sign up to request clarification or add additional context in comments.

2 Comments

This feels more like a review than answer
No im saying the version 4 from 3 brought new changes that need to be leveraged or pre july code wont work.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.