-
Notifications
You must be signed in to change notification settings - Fork 86
/
SuperSpineboy.java
115 lines (101 loc) · 4.29 KB
/
SuperSpineboy.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/******************************************************************************
* Spine Runtimes Software License
* Version 2.1
*
* Copyright (c) 2013, Esoteric Software
* All rights reserved.
*
* You are granted a perpetual, non-exclusive, non-sublicensable and
* non-transferable license to install, execute and perform the Spine Runtimes
* Software (the "Software") solely for internal use. Without the written
* permission of Esoteric Software (typically granted by licensing Spine), you
* may not (a) modify, translate, adapt or otherwise create derivative works,
* improvements of the Software or develop new applications using the Software
* or (b) remove, delete, alter or obscure any trademarks or any copyright,
* trademark, patent or other intellectual property or proprietary rights notices
* on or in the Software, including any copy thereof. Redistributions in binary
* or source form must include this license and terms.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
package com.esotericsoftware.spine.superspineboy;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.badlogic.gdx.math.Vector2;
import com.esotericsoftware.spine.AnimationState.TrackEntry;
import com.esotericsoftware.spine.superspineboy.Assets.SoundEffect;
/** The controller class for the game. It knows about both the model and view and provides a way for the view to know about events
* that occur in the model. */
class SuperSpineboy extends ApplicationAdapter {
static Vector2 temp = new Vector2();
View view;
Model model;
public void create () {
model = new Model(this);
view = new View(model);
}
public void render () {
float delta = Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f) * model.getTimeScale();
if (delta > 0) {
model.update(delta);
view.update(delta);
}
view.render();
}
public void resize (int width, int height) {
view.resize(width, height);
}
void restart () {
model.restart();
view.restart();
}
void eventHitPlayer (Enemy enemy) {
SoundEffect.hurtPlayer.play();
if (view.player.hp > 0 && view.player.view.hitAnimation != null) {
TrackEntry entry = view.player.view.animationState.setAnimation(1, view.player.view.hitAnimation, false);
entry.setTrackEnd(view.player.view.hitAnimation.getDuration());
}
}
void eventHitEnemy (Enemy enemy) {
SoundEffect.hurtAlien.play();
if (enemy.view.hitAnimation != null) {
TrackEntry entry = enemy.view.animationState.setAnimation(1, enemy.view.hitAnimation, false);
entry.setTrackEnd(enemy.view.hitAnimation.getDuration());
}
}
void eventHitBullet (float x, float y, float vx, float vy) {
Vector2 offset = temp.set(vx, vy).nor().scl(15 * Model.scale);
view.hits.add(View.bulletHitTime);
view.hits.add(x + offset.x);
view.hits.add(y + offset.y);
view.hits.add(temp.angle() + 90);
SoundEffect.hit.play();
}
void eventGameOver (boolean win) {
if (!view.ui.splashTable.hasParent()) {
view.ui.showSplash(view.assets.gameOverRegion, win ? view.assets.youWinRegion : view.assets.youLoseRegion);
view.ui.inputTimer = win ? 5 : 1;
}
view.jumpPressed = false;
view.leftPressed = false;
view.rightPressed = false;
}
public static void main (String[] args) throws Exception {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.title = "Super Spineboy";
config.width = 800;
config.height = 450;
new LwjglApplication(new SuperSpineboy(), config);
}
}