Fix bug that allowed players to place pieces outside the baord.

This commit is contained in:
Olivier Gagnon
2021-10-16 17:27:35 -04:00
parent 092d5146b4
commit ab7d1a8ce9
4 changed files with 64 additions and 81 deletions

View File

@ -1,4 +1,5 @@
import { FragmentType } from "./FragmentType"; import { FragmentType } from "./FragmentType";
import { Shapes } from "./data/Shapes";
export const Fragments: Fragment[] = []; export const Fragments: Fragment[] = [];
@ -101,12 +102,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
0, // id 0, // id
[ Shapes.T,
// shape
[X, X, X],
[_, _, X],
[_, _, X],
],
FragmentType.Hacking, // type FragmentType.Hacking, // type
1, 1,
1, // limit 1, // limit
@ -115,12 +111,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
1, // id 1, // id
[ Shapes.Z,
// shape
[_, X, _],
[X, X, X],
[_, X, _],
],
FragmentType.Hacking, // type FragmentType.Hacking, // type
1, 1,
1, // limit 1, // limit
@ -129,10 +120,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
5, // id 5, // id
[ Shapes.S,
// shape
[X, X],
],
FragmentType.HackingSpeed, // type FragmentType.HackingSpeed, // type
1.3, 1.3,
1, // limit 1, // limit
@ -142,10 +130,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
6, // id 6, // id
[ Shapes.I,
[X, _],
[X, X],
], // shape
FragmentType.HackingMoney, // type FragmentType.HackingMoney, // type
2, // power 2, // power
1, // limit 1, // limit
@ -154,10 +139,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
7, // id 7, // id
[ Shapes.J,
[X, X],
[X, X],
], // shape
FragmentType.HackingGrow, // type FragmentType.HackingGrow, // type
0.5, // power 0.5, // power
1, // limit 1, // limit
@ -166,11 +148,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
8, // id 8, // id
[ Shapes.O,
[X, X, X],
[_, X, _],
[X, X, X],
], // shape
FragmentType.Hacking, // type FragmentType.Hacking, // type
1, // power 1, // power
1, // limit 1, // limit
@ -179,10 +157,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
10, // id 10, // id
[ Shapes.T,
[X, X],
[_, X],
], // shape
FragmentType.Strength, // type FragmentType.Strength, // type
2, // power 2, // power
1, // limit 1, // limit
@ -191,10 +166,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
12, // id 12, // id
[ Shapes.L,
[_, X],
[X, X],
], // shape
FragmentType.Defense, // type FragmentType.Defense, // type
2, // power 2, // power
1, // limit 1, // limit
@ -203,10 +175,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
14, // id 14, // id
[ Shapes.L,
[X, X],
[X, _],
], // shape
FragmentType.Dexterity, // type FragmentType.Dexterity, // type
2, // power 2, // power
1, // limit 1, // limit
@ -215,10 +184,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
16, // id 16, // id
[ Shapes.S,
[X, _],
[X, X],
], // shape
FragmentType.Agility, // type FragmentType.Agility, // type
2, // power 2, // power
1, // limit 1, // limit
@ -227,10 +193,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
18, // id 18, // id
[ Shapes.S,
[X, X],
[X, _],
], // shape
FragmentType.Charisma, // type FragmentType.Charisma, // type
3, // power 3, // power
1, // limit 1, // limit
@ -239,11 +202,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
20, // id 20, // id
[ Shapes.I,
[X, _, _],
[X, X, _],
[X, X, X],
], // shape
FragmentType.HacknetMoney, // type FragmentType.HacknetMoney, // type
1, // power 1, // power
1, // limit 1, // limit
@ -252,11 +211,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
21, // id 21, // id
[ Shapes.O,
[X, X],
[_, X],
[_, X],
], // shape
FragmentType.HacknetCost, // type FragmentType.HacknetCost, // type
-1, // power -1, // power
1, // limit 1, // limit
@ -265,10 +220,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
25, // id 25, // id
[ Shapes.J,
[X, X, X],
[_, X, _],
], // shape
FragmentType.Rep, // type FragmentType.Rep, // type
0.5, // power 0.5, // power
1, // limit 1, // limit
@ -277,10 +229,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
27, // id 27, // id
[ Shapes.J,
[X, _],
[_, X],
], // shape
FragmentType.WorkMoney, // type FragmentType.WorkMoney, // type
10, // power 10, // power
1, // limit 1, // limit
@ -289,7 +238,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
28, // id 28, // id
[[X, X]], // shape Shapes.L,
FragmentType.Crime, // type FragmentType.Crime, // type
2, // power 2, // power
1, // limit 1, // limit
@ -298,11 +247,7 @@ export function FragmentById(id: number): Fragment | null {
Fragments.push( Fragments.push(
new Fragment( new Fragment(
30, // id 30, // id
[ Shapes.S,
[X, X, X],
[X, X, X],
[X, X, X],
], // shape
FragmentType.Bladeburner, // type FragmentType.Bladeburner, // type
0.4, // power 0.4, // power
1, // limit 1, // limit

View File

@ -70,20 +70,21 @@ export class StaneksGift implements IStaneksGift {
return CalculateEffect(fragment.charge, fragment.fragment().power, boost); return CalculateEffect(fragment.charge, fragment.fragment().power, boost);
} }
canPlace(x: number, y: number, rotation: number, fragment: Fragment): boolean { canPlace(worldX: number, worldY: number, rotation: number, fragment: Fragment): boolean {
if (x + fragment.width(0) > this.width()) return false; if (worldX < 0 || worldY < 0) return false;
if (y + fragment.height(0) > this.height()) return false; if (worldX + fragment.width(rotation) > this.width()) return false;
if (worldY + fragment.height(rotation) > this.height()) return false;
if (this.count(fragment) >= fragment.limit) return false; if (this.count(fragment) >= fragment.limit) return false;
const newFrag = new ActiveFragment({ x: x, y: y, rotation: rotation, fragment: fragment }); const newFrag = new ActiveFragment({ x: worldX, y: worldY, rotation: rotation, fragment: fragment });
for (const aFrag of this.fragments) { for (const aFrag of this.fragments) {
if (aFrag.collide(newFrag)) return false; if (aFrag.collide(newFrag)) return false;
} }
return true; return true;
} }
place(x: number, y: number, rotation: number, fragment: Fragment): boolean { place(worldX: number, worldY: number, rotation: number, fragment: Fragment): boolean {
if (!this.canPlace(x, y, rotation, fragment)) return false; if (!this.canPlace(worldX, worldY, rotation, fragment)) return false;
this.fragments.push(new ActiveFragment({ x: x, y: y, rotation: rotation, fragment: fragment })); this.fragments.push(new ActiveFragment({ x: worldX, y: worldY, rotation: rotation, fragment: fragment }));
return true; return true;
} }

View File

@ -3,5 +3,5 @@ export const StanekConstants: {
BaseSize: number; BaseSize: number;
} = { } = {
RAMBonus: 0.1, RAMBonus: 0.1,
BaseSize: 12, BaseSize: 9,
}; };

37
src/CotMG/data/Shapes.ts Normal file
View File

@ -0,0 +1,37 @@
const _ = false;
const X = true;
export const Shapes: {
O: boolean[][];
I: boolean[][];
L: boolean[][];
J: boolean[][];
S: boolean[][];
Z: boolean[][];
T: boolean[][];
} = {
O: [
[X, X],
[X, X],
],
I: [[X, X, X, X]],
L: [
[_, _, X],
[X, X, X],
],
J: [
[X, _, _],
[X, X, X],
],
S: [
[_, X, X],
[X, X, _],
],
Z: [
[X, X, _],
[_, X, X],
],
T: [
[X, X, X],
[_, X, _],
],
};