diff --git a/src/common/models/ExtraTypes.ts b/src/common/models/ExtraTypes.ts index 319a0f8ae..8e038fd16 100644 --- a/src/common/models/ExtraTypes.ts +++ b/src/common/models/ExtraTypes.ts @@ -27,12 +27,12 @@ export type ParamifyDefaults = { [Name in keyof DefaultMap]: DefaultMap[Name] extends Measurement ? typeof MeasurementParam : DefaultMap[Name] extends Motor - ? typeof MotorParam - : DefaultMap[Name] extends Ratio - ? typeof RatioParam - : DefaultMap[Name] extends boolean - ? typeof BooleanParam - : null; + ? typeof MotorParam + : DefaultMap[Name] extends Ratio + ? typeof RatioParam + : DefaultMap[Name] extends boolean + ? typeof BooleanParam + : null; }; export type UseStateObject = { @@ -66,6 +66,7 @@ export type PulleyBeltType = "HTD" | "GT2" | "RT25"; export type ChainType = "#25" | "#35"; export type Bore = | "NEO" + | "Kraken" | "Falcon" | "775" | "550" @@ -73,14 +74,16 @@ export type Bore = | "3/8 Hex" | "0.875in" | "1.125in" - | "MAXSpline"; -export const MotorBores: Bore[] = ["NEO", "Falcon", "775", "550"]; + | "MAXSpline" + | "SplineXL"; +export const MotorBores: Bore[] = ["NEO", "Kraken", "Falcon", "775", "550"]; export const NonMotorBores: Bore[] = [ "1/2 Hex", "3/8 Hex", "0.875in", "1.125in", "MAXSpline", + "SplineXL", ]; // Quick units, mostly for tests diff --git a/src/common/models/Gearbox.ts b/src/common/models/Gearbox.ts index 1ae91d268..10c22f110 100644 --- a/src/common/models/Gearbox.ts +++ b/src/common/models/Gearbox.ts @@ -45,13 +45,13 @@ export type MotionMethod = BaseMotionMethod & { export function MMTypeStr(mm: MotionMethod): string { let typeStr = ""; if (mm.type === "Gear") { - typeStr = `${(mm as any as GearData).dp} DP`; + typeStr = `${(mm as unknown as GearData).dp} DP`; } else if (mm.type === "Pulley") { - typeStr = (mm as any as PulleyData).beltType; + typeStr = (mm as unknown as PulleyData).beltType; } else if (mm.type === "Sprocket") { - typeStr = (mm as any as SprocketData).chainType; + typeStr = (mm as unknown as SprocketData).chainType; } else if (mm.type === "Planetary") { - const pd = mm as any as PlanetaryData; + const pd = mm as unknown as PlanetaryData; if (pd.stageSequence === undefined) { typeStr = "Planetary"; } else { diff --git a/src/common/models/data/cots/wcp/gears.json b/src/common/models/data/cots/wcp/gears.json new file mode 100644 index 000000000..3afef856e --- /dev/null +++ b/src/common/models/data/cots/wcp/gears.json @@ -0,0 +1,74 @@ +[ + { + "bore": "Kraken", + "dp": 20, + "partNumber": "WCP-1008", + "teeth": 10, + "url": "https://wcproducts.com/products/20dp-motor-gears", + "vendor": "WCP" + }, + { + "bore": "Kraken", + "dp": 20, + "partNumber": "WCP-1009", + "teeth": 11, + "url": "https://wcproducts.com/products/20dp-motor-gears", + "vendor": "WCP" + }, + { + "bore": "Kraken", + "dp": 20, + "partNumber": "WCP-1010", + "teeth": 12, + "url": "https://wcproducts.com/products/20dp-motor-gears", + "vendor": "WCP" + }, + { + "bore": "Kraken", + "dp": 20, + "partNumber": "WCP-1011", + "teeth": 12, + "url": "https://wcproducts.com/products/20dp-motor-gears", + "vendor": "WCP" + }, + { + "bore": "Kraken", + "dp": 20, + "partNumber": "WCP-1012", + "teeth": 13, + "url": "https://wcproducts.com/products/20dp-motor-gears", + "vendor": "WCP" + }, + { + "bore": "Kraken", + "dp": 20, + "partNumber": "WCP-1013", + "teeth": 14, + "url": "https://wcproducts.com/products/20dp-motor-gears", + "vendor": "WCP" + }, + { + "bore": "Kraken", + "dp": 20, + "partNumber": "WCP-1014", + "teeth": 14, + "url": "https://wcproducts.com/products/20dp-motor-gears", + "vendor": "WCP" + }, + { + "bore": "Kraken", + "dp": 20, + "partNumber": "WCP-1015", + "teeth": 15, + "url": "https://wcproducts.com/products/20dp-motor-gears", + "vendor": "WCP" + }, + { + "bore": "Kraken", + "dp": 20, + "partNumber": "WCP-1016", + "teeth": 16, + "url": "https://wcproducts.com/products/20dp-motor-gears", + "vendor": "WCP" + } +] diff --git a/src/common/models/data/cots/wcp/pulleys.json b/src/common/models/data/cots/wcp/pulleys.json new file mode 100644 index 000000000..c74b3f31d --- /dev/null +++ b/src/common/models/data/cots/wcp/pulleys.json @@ -0,0 +1,66 @@ +[ + { + "bore": "Kraken", + "partNumber": "WCP-1178", + "pitch": { + "s": 3, + "u": "mm" + }, + "teeth": 16, + "type": "GT2", + "url": "https://wcproducts.com/collections/motors-pneumatics/products/kraken", + "width": { + "s": 9, + "u": "mm" + }, + "vendor": "WCP" + }, + { + "bore": "Kraken", + "partNumber": "WCP-1179", + "pitch": { + "s": 3, + "u": "mm" + }, + "teeth": 16, + "type": "GT2", + "url": "https://wcproducts.com/collections/motors-pneumatics/products/kraken", + "width": { + "s": 15, + "u": "mm" + }, + "vendor": "WCP" + }, + { + "bore": "Kraken", + "partNumber": "WCP-1017", + "pitch": { + "s": 5, + "u": "mm" + }, + "teeth": 12, + "type": "HTD", + "url": "https://wcproducts.com/collections/motors-pneumatics/products/kraken", + "width": { + "s": 9, + "u": "mm" + }, + "vendor": "WCP" + }, + { + "bore": "Kraken", + "partNumber": "WCP-1018", + "pitch": { + "s": 5, + "u": "mm" + }, + "teeth": 12, + "type": "HTD", + "url": "https://wcproducts.com/collections/motors-pneumatics/products/kraken", + "width": { + "s": 15, + "u": "mm" + }, + "vendor": "WCP" + } +] diff --git a/src/common/models/data/cots/wcp/sprockets.json b/src/common/models/data/cots/wcp/sprockets.json new file mode 100644 index 000000000..04cc21402 --- /dev/null +++ b/src/common/models/data/cots/wcp/sprockets.json @@ -0,0 +1,18 @@ +[ + { + "bore": "Kraken", + "partNumber": "WCP-1019", + "teeth": 10, + "type": "#25", + "url": "https://wcproducts.com/collections/motors-pneumatics/products/kraken", + "vendor": "WCP" + }, + { + "bore": "Kraken", + "partNumber": "WCP-1020", + "teeth": 12, + "type": "#25", + "url": "https://wcproducts.com/collections/motors-pneumatics/products/kraken", + "vendor": "WCP" + } +] diff --git a/src/web/calculators/ratioFinder/components/RatioFinderCalculator.tsx b/src/web/calculators/ratioFinder/components/RatioFinderCalculator.tsx index b654df4b6..5938890a6 100644 --- a/src/web/calculators/ratioFinder/components/RatioFinderCalculator.tsx +++ b/src/web/calculators/ratioFinder/components/RatioFinderCalculator.tsx @@ -250,6 +250,7 @@ export default function RatioFinderCalculator(): JSX.Element { get.enableMaxSpline, get.startingPinionSize, get.forceStartingPinionSize, + get.enableKrakenPinions, ]); const [displayNum, setDisplayNum] = useState(20); @@ -511,6 +512,14 @@ export default function RatioFinderCalculator(): JSX.Element { set.setEnableNEOPinions, ], }, + { + name: "Kraken", + stateHook: [ + get.enableKrakenPinions, + set.setEnableKrakenPinions, + ], + }, + { name: "Falcon", stateHook: [ diff --git a/src/web/calculators/ratioFinder/index.ts b/src/web/calculators/ratioFinder/index.ts index addeefcf5..808e233d7 100644 --- a/src/web/calculators/ratioFinder/index.ts +++ b/src/web/calculators/ratioFinder/index.ts @@ -49,6 +49,7 @@ export const RatioFinderParamsV1 = { enableFalconPinions: withDefault(BooleanParam, true), enable775Pinions: withDefault(BooleanParam, true), enable550Pinions: withDefault(BooleanParam, true), + enableKrakenPinions: withDefault(BooleanParam, true), enableVEX: withDefault(BooleanParam, false), enableREV: withDefault(BooleanParam, true), diff --git a/src/web/calculators/ratioFinder/math.ts b/src/web/calculators/ratioFinder/math.ts index 59e04119f..2f6a83f2d 100644 --- a/src/web/calculators/ratioFinder/math.ts +++ b/src/web/calculators/ratioFinder/math.ts @@ -38,6 +38,9 @@ import ttbSprockets from "common/models/data/cots/ttb/sprockets.json"; import vexGears from "common/models/data/cots/vex/gears.json"; import vexPulleys from "common/models/data/cots/vex/pulleys.json"; import vexSprockets from "common/models/data/cots/vex/sprockets.json"; +import wcpGears from "common/models/data/cots/wcp/gears.json"; +import wcpPulleys from "common/models/data/cots/wcp/pulleys.json"; +import wcpSprockets from "common/models/data/cots/wcp/sprockets.json"; function stagesFromMinToMax( min: number, @@ -239,7 +242,7 @@ export function generateOptions(state: RatioFinderStateV1) { const gears = [ ...(state.enableREV ? revGears : []), ...(state.enableAM ? amGears : []), - ...(state.enableWCP ? [] : []), + ...(state.enableWCP ? wcpGears : []), ...(state.enableTTB ? [] : []), ...(state.enableVEX ? vexGears : []), ]; @@ -247,7 +250,7 @@ export function generateOptions(state: RatioFinderStateV1) { const pulleys = [ ...(state.enableREV ? revPulleys : []), ...(state.enableAM ? amPulleys : []), - ...(state.enableWCP ? [] : []), + ...(state.enableWCP ? wcpPulleys : []), ...(state.enableTTB ? ttbPulleys : []), ...(state.enableVEX ? vexPulleys : []), ]; @@ -255,7 +258,7 @@ export function generateOptions(state: RatioFinderStateV1) { const sprockets = [ ...(state.enableREV ? revSprockets : []), ...(state.enableAM ? amSprockets : []), - ...(state.enableWCP ? [] : []), + ...(state.enableWCP ? wcpSprockets : []), ...(state.enableTTB ? ttbSprockets : []), ...(state.enableVEX ? vexSprockets : []), ]; @@ -286,6 +289,7 @@ export function generateOptions(state: RatioFinderStateV1) { good = good && (state.enableNEOPinions || m.bore !== "NEO"); good = good && (state.enable775Pinions || m.bore !== "775"); good = good && (state.enable550Pinions || m.bore !== "550"); + good = good && (state.enableKrakenPinions || m.bore !== "Kraken"); } else { good = good && (state.enable12HexBore || m.bore !== "1/2 Hex"); good = good && (state.enable38HexBore || m.bore !== "3/8 Hex");