Skip to content

Commit 15df6db

Browse files
feat(combat): add auto-combat button
Feat/auto combat
2 parents 632d97f + 08e85b1 commit 15df6db

30 files changed

+690
-110
lines changed

angular-rpg.tiled-session

Lines changed: 240 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,258 @@
11
{
2-
"activeFile": "src/assets/maps/town.tmx",
2+
"activeFile": "src/assets/maps/wilderness.tmx",
33
"expandedProjectPaths": [
4+
".",
5+
"src/assets",
6+
"src/art/sprites/characters/magic",
7+
"src/tiled/createdialogtool",
48
"src",
5-
"src/assets/maps/templates",
6-
"src/art/sprites/characters/punch",
79
"src/assets/maps",
8-
"src/art/sprites",
9-
"src/tiled/createdialogtool",
10-
".",
11-
"src/art",
1210
"src/tiled",
13-
"src/assets/maps/tiles",
14-
"src/art/sprites/characters/magic",
11+
"src/art/sprites",
12+
"src/art/sprites/characters/punch",
1513
"src/assets/test",
16-
"src/assets"
14+
"src/art",
15+
"src/assets/maps/templates",
16+
"src/assets/maps/tiles"
1717
],
1818
"file.lastUsedOpenFilter": "All Files (*)",
19-
"fileStates": {},
19+
"fileStates": {
20+
"src/assets/maps/castle.tmx": {
21+
"expandedObjectLayers": [
22+
2
23+
],
24+
"scale": 4,
25+
"selectedLayer": 1,
26+
"viewCenter": {
27+
"x": 263.875,
28+
"y": 135.875
29+
}
30+
},
31+
"src/assets/maps/combat.tmx": {
32+
"scale": 3.5070833333333336,
33+
"selectedLayer": 9,
34+
"viewCenter": {
35+
"x": 239.94297255554233,
36+
"y": 159.8194130925508
37+
}
38+
},
39+
"src/assets/maps/crypt.tmx": {
40+
"expandedObjectLayers": [
41+
2,
42+
3
43+
],
44+
"scale": 1.9243589743589742,
45+
"selectedLayer": 1,
46+
"viewCenter": {
47+
"x": 199.80679546968688,
48+
"y": 311.53231179213856
49+
}
50+
},
51+
"src/assets/maps/fortress1.tmx": {
52+
"expandedObjectLayers": [
53+
2,
54+
3
55+
],
56+
"scale": 2.420967741935484,
57+
"selectedLayer": 1,
58+
"viewCenter": {
59+
"x": 223.6708860759494,
60+
"y": 247.62824783477686
61+
}
62+
},
63+
"src/assets/maps/fortress2.tmx": {
64+
"expandedObjectLayers": [
65+
4,
66+
3
67+
],
68+
"scale": 3.002,
69+
"selectedLayer": 2,
70+
"viewCenter": {
71+
"x": 199.70019986675553,
72+
"y": 199.70019986675553
73+
}
74+
},
75+
"src/assets/maps/isle.tmx": {
76+
"expandedObjectLayers": [
77+
2
78+
],
79+
"scale": 3.9499999999999997,
80+
"selectedLayer": 1,
81+
"viewCenter": {
82+
"x": 199.873417721519,
83+
"y": 151.7721518987342
84+
}
85+
},
86+
"src/assets/maps/keep.tmx": {
87+
"expandedObjectLayers": [
88+
2
89+
],
90+
"scale": 3.2630434782608697,
91+
"selectedLayer": 1,
92+
"viewCenter": {
93+
"x": 183.72418387741504,
94+
"y": 183.72418387741504
95+
}
96+
},
97+
"src/assets/maps/lair.tmx": {
98+
"expandedObjectLayers": [
99+
2
100+
],
101+
"scale": 1.4715686274509803,
102+
"selectedLayer": 1,
103+
"viewCenter": {
104+
"x": 231.38574283810794,
105+
"y": 407.3884077281813
106+
}
107+
},
108+
"src/assets/maps/port.tmx": {
109+
"expandedObjectLayers": [
110+
2
111+
],
112+
"scale": 3.411363636363636,
113+
"selectedLayer": 1,
114+
"viewCenter": {
115+
"x": 231.7255163224517,
116+
"y": 175.73617588274487
117+
}
118+
},
119+
"src/assets/maps/ruins.tmx": {
120+
"expandedObjectLayers": [
121+
3
122+
],
123+
"scale": 2.587931034482758,
124+
"selectedLayer": 2,
125+
"viewCenter": {
126+
"x": 151.66555629580284,
127+
"y": 231.6522318454364
128+
}
129+
},
130+
"src/assets/maps/sewer.tmx": {
131+
"expandedObjectLayers": [
132+
2,
133+
3
134+
],
135+
"scale": 1.8304878048780486,
136+
"selectedLayer": 1,
137+
"viewCenter": {
138+
"x": 183.83077948034645,
139+
"y": 327.508327781479
140+
}
141+
},
142+
"src/assets/maps/tiles/creatures.tsx": {
143+
"dynamicWrapping": true,
144+
"scaleInDock": 1
145+
},
146+
"src/assets/maps/tiles/environment.tsx": {
147+
"scaleInDock": 3
148+
},
149+
"src/assets/maps/tiles/objects.tsx": {
150+
"dynamicWrapping": true,
151+
"scaleInDock": 4,
152+
"scaleInEditor": 11
153+
},
154+
"src/assets/maps/tower1.tmx": {
155+
"expandedObjectLayers": [
156+
2
157+
],
158+
"scale": 3.9499999999999997,
159+
"selectedLayer": 1,
160+
"viewCenter": {
161+
"x": 183.92405063291142,
162+
"y": 151.7721518987342
163+
}
164+
},
165+
"src/assets/maps/tower2.tmx": {
166+
"expandedObjectLayers": [
167+
2
168+
],
169+
"scale": 3.9499999999999997,
170+
"selectedLayer": 1,
171+
"viewCenter": {
172+
"x": 151.7721518987342,
173+
"y": 151.7721518987342
174+
}
175+
},
176+
"src/assets/maps/tower3.tmx": {
177+
"expandedObjectLayers": [
178+
2
179+
],
180+
"scale": 6.822727272727272,
181+
"selectedLayer": 1,
182+
"viewCenter": {
183+
"x": 87.86808794137241,
184+
"y": 87.86808794137244
185+
}
186+
},
187+
"src/assets/maps/town.tmx": {
188+
"expandedObjectLayers": [
189+
2
190+
],
191+
"scale": 3.411363636363636,
192+
"selectedLayer": 1,
193+
"viewCenter": {
194+
"x": 215.89606928714193,
195+
"y": 175.73617588274487
196+
}
197+
},
198+
"src/assets/maps/village.tmx": {
199+
"expandedObjectLayers": [
200+
2
201+
],
202+
"scale": 3.5738095238095235,
203+
"selectedLayer": 1,
204+
"viewCenter": {
205+
"x": 111.7854763491006,
206+
"y": 167.7481678880746
207+
}
208+
},
209+
"src/assets/maps/wilderness.tmx": {
210+
"expandedObjectLayers": [
211+
6,
212+
5
213+
],
214+
"scale": 1.5,
215+
"selectedLayer": 3,
216+
"viewCenter": {
217+
"x": 1108.6666666666665,
218+
"y": 290
219+
}
220+
}
221+
},
222+
"last.imagePath": "C:/Users/justi/Source/angular-rpg/src/art/sprites/objects",
20223
"openFiles": [
21-
"src/assets/maps/town.tmx"
224+
"src/assets/maps/town.tmx",
225+
"src/assets/maps/sewer.tmx",
226+
"src/assets/maps/ruins.tmx",
227+
"src/assets/maps/village.tmx",
228+
"src/assets/maps/wilderness.tmx",
229+
"src/assets/maps/castle.tmx",
230+
"src/assets/maps/port.tmx",
231+
"src/assets/maps/lair.tmx",
232+
"src/assets/maps/fortress1.tmx",
233+
"src/assets/maps/fortress2.tmx",
234+
"src/assets/maps/combat.tmx",
235+
"src/assets/maps/crypt.tmx",
236+
"src/assets/maps/isle.tmx",
237+
"src/assets/maps/keep.tmx",
238+
"src/assets/maps/tower1.tmx",
239+
"src/assets/maps/tower2.tmx",
240+
"src/assets/maps/tower3.tmx"
22241
],
23242
"project": "angular-rpg.tiled-project",
243+
"property.type": "string",
24244
"recentFiles": [
25245
"src/assets/maps/town.tmx",
26-
"src/assets/maps/castle.tmx",
246+
"src/assets/maps/sewer.tmx",
247+
"src/assets/maps/ruins.tmx",
27248
"src/assets/maps/village.tmx",
249+
"src/assets/maps/tower3.tmx",
250+
"src/assets/maps/tower2.tmx",
251+
"src/assets/maps/tower1.tmx",
252+
"src/assets/maps/keep.tmx",
28253
"src/assets/maps/isle.tmx",
254+
"src/assets/maps/crypt.tmx",
29255
"src/assets/maps/combat.tmx",
30-
"src/assets/maps/ruins.tmx",
31-
"src/assets/maps/wilderness.tmx",
32-
"src/assets/maps/lair.tmx",
33-
"src/assets/maps/port.tmx",
34-
"src/assets/maps/sewer.tmx",
35-
"src/assets/maps/tower1.tmx",
36-
"src/assets/maps/tower2.tmx"
256+
"src/assets/maps/fortress2.tmx"
37257
]
38258
}

karma.conf.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ module.exports = function (config) {
4040
// Don't hang rAF/timers when in background
4141
"--disable-background-timer-throttling",
4242
"--disable-backgrounding-occluded-windows",
43+
// Don't play audio effects
44+
"--mute-audio",
4345
],
4446
},
4547
ChromeDebug: {

package-lock.json

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@
7979
"@angular/compiler-cli": "^17.1.3",
8080
"@babel/core": "^7.23.9",
8181
"@compodoc/compodoc": "^1.1.19",
82-
"@mapeditor/tiled-api": "^1.9.2",
8382
"@semantic-release/changelog": "^6.0.0",
8483
"@semantic-release/commit-analyzer": "^9.0.2",
8584
"@semantic-release/git": "^10.0.0",

src/app/core/animator.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ export class Animator {
2121
sourceAnims: any = null;
2222

2323
setAnimationSource(spriteName: string) {
24-
console.log(`Sprite is ${spriteName}`);
2524
this.sourceMeta = getSpriteMeta(spriteName);
2625
if (this.sourceMeta) {
2726
this.sourceAnims = this.sourceMeta.animations;

src/app/core/point.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ describe('Point', () => {
7575
});
7676
});
7777

78+
describe('ceil', () => {
79+
it('should truncate floating point by rounding up', () => {
80+
const p1: Point = new Point(15.1, 15.1);
81+
expect(p1.ceil()).toEqual(new Point(16, 16));
82+
});
83+
});
84+
7885
describe('round', () => {
7986
it('should round up when decimal is greater than or equal to 0.5', () => {
8087
const p1: Point = new Point(15.6, 15.6).round();

src/app/core/point.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ export class Point implements IPoint {
5252
return new Point(this.x, this.y);
5353
}
5454

55+
ceil(): Point {
56+
this.x = Math.ceil(this.x);
57+
this.y = Math.ceil(this.y);
58+
return this;
59+
}
60+
5561
floor(): Point {
5662
this.x = Math.floor(this.x);
5763
this.y = Math.floor(this.y);

src/app/core/state-machine.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export interface IResumeCallback {
1111
/** A state change description */
1212
export interface IStateChange<T extends string> {
1313
from: State<T> | null;
14-
to: State<T>;
14+
to: State<T> | null;
1515
}
1616

1717
// Implementation
@@ -33,6 +33,19 @@ export class StateMachine<StateNames extends string> {
3333
private _previousState: State<StateNames> | null = null;
3434
private _pendingStates: [State<StateNames>, (result: boolean) => void][] = [];
3535

36+
/** Destroy the state machine, and exit any current state. */
37+
async destroy() {
38+
const state = this._currentState;
39+
this._currentState = null;
40+
this._pendingStates = [];
41+
this._previousState = null;
42+
this._transitioning = false;
43+
if (state) {
44+
this.onExitState$.emit({ from: state, to: null });
45+
await state.exit(this);
46+
}
47+
}
48+
3649
addState(state: State<StateNames>): void {
3750
this.states.push(state);
3851
}

src/app/models/game-data/magic.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ export const MAGIC_DATA: ITemplateMagic[] = [
44
{
55
id: 'push',
66
type: 'spell',
7-
name: 'Minor Wind Stone',
7+
name: 'Wind (Push)',
88
level: 1,
9-
magicname: 'Forceful Gust',
9+
magicname: 'Push',
1010
icon: 'blueGem.png',
1111
target: 'target',
1212
magiccost: 4,
1313
effect: 'elemental-damage',
14-
magnitude: 2,
14+
magnitude: 1,
1515
usedby: ['mage', 'healer'],
1616
groups: ['default'],
1717
elements: ['wind'],
@@ -21,9 +21,9 @@ export const MAGIC_DATA: ITemplateMagic[] = [
2121
{
2222
id: 'heal',
2323
type: 'spell',
24-
name: 'Minor Life Stone',
24+
name: 'Heal',
2525
level: 2,
26-
magicname: 'Healing Bubbles',
26+
magicname: 'Heal',
2727
icon: 'turqoiseGem.png',
2828
target: 'target',
2929
magiccost: 12,

0 commit comments

Comments
 (0)