chingu 0.8rc2 → 0.8rc3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +66 -19
- data/benchmarks/arrays_bench.rb +22 -0
- data/benchmarks/game_objects_benchmark.rb +29 -35
- data/chingu.gemspec +16 -2
- data/examples/example18_animation_trait.rb +14 -9
- data/examples/example19.yml +305 -561
- data/examples/example19_edit_viewport.rb +3 -1
- data/examples/example1_basics.rb +4 -4
- data/examples/example21.yml +62 -54
- data/examples/example21_sidescroller_with_edit.rb +13 -21
- data/examples/example4_gamestates.rb +0 -2
- data/examples/example7_gfx_helpers.rb +1 -1
- data/examples/example8_traits.rb +1 -2
- data/examples/example9_collision_detection.rb +1 -1
- data/examples/game1.rb +1 -1
- data/lib/chingu.rb +1 -2
- data/lib/chingu/animation.rb +13 -5
- data/lib/chingu/assets.rb +2 -2
- data/lib/chingu/basic_game_object.rb +33 -30
- data/lib/chingu/game_object.rb +0 -5
- data/lib/chingu/game_object_list.rb +34 -21
- data/lib/chingu/game_states/edit.rb +2 -5
- data/lib/chingu/game_states/fade_to.rb +0 -1
- data/lib/chingu/game_states/pause.rb +1 -1
- data/lib/chingu/helpers/game_object.rb +0 -1
- data/lib/chingu/parallax.rb +3 -9
- data/lib/chingu/simple_menu.rb +7 -8
- data/lib/chingu/traits/animation.rb +2 -4
- data/lib/chingu/traits/sprite.rb +16 -13
- data/lib/chingu/window.rb +1 -1
- data/spec/chingu/animation_spec.rb +88 -0
- data/spec/chingu/assets_spec.rb +58 -0
- data/spec/chingu/basic_game_object_spec.rb +111 -0
- data/spec/chingu/game_object_list_spec.rb +78 -0
- data/spec/chingu/game_object_spec.rb +50 -14
- data/spec/chingu/game_state_manager_spec.rb +105 -0
- data/spec/chingu/helpers/input_client_spec.rb +4 -0
- data/spec/chingu/helpers/input_dispatcher_spec.rb +4 -0
- data/spec/chingu/images/droid_11x15.bmp +0 -0
- data/spec/chingu/parallax_spec.rb +25 -16
- data/spec/chingu/window_spec.rb +55 -0
- data/spec/spec_helper.rb +1 -5
- metadata +17 -3
@@ -33,7 +33,9 @@ class Example19 < GameState
|
|
33
33
|
# 1) map 2) stars 3) player
|
34
34
|
# Since we don't give any zorders Chingu automatically increments zorder between each object created, putting player on top
|
35
35
|
#
|
36
|
-
def
|
36
|
+
def initialize(options = {})
|
37
|
+
super
|
38
|
+
|
37
39
|
self.input = { :escape => :exit, :e => :edit }
|
38
40
|
|
39
41
|
Sound["laser.wav"] # cache sound by accessing it once
|
data/examples/example1_basics.rb
CHANGED
@@ -30,10 +30,10 @@ class Game < Chingu::Window
|
|
30
30
|
end
|
31
31
|
|
32
32
|
class Player < Chingu::GameObject
|
33
|
-
def move_left; @x -=
|
34
|
-
def move_right; @x +=
|
35
|
-
def move_up; @y -=
|
36
|
-
def move_down; @y +=
|
33
|
+
def move_left; @x -= 3; end
|
34
|
+
def move_right; @x += 3; end
|
35
|
+
def move_up; @y -= 3; end
|
36
|
+
def move_down; @y += 3; end
|
37
37
|
end
|
38
38
|
|
39
39
|
|
data/examples/example21.yml
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
- CogWheel:
|
3
3
|
:x: 1088.0
|
4
4
|
:y: 352.0
|
5
|
-
:angle:
|
5
|
+
:angle: 21.323463353534763
|
6
6
|
:zorder: 95
|
7
7
|
:factor_x: 1.68525252525252
|
8
8
|
:factor_y: 1.68525252525252
|
@@ -930,7 +930,7 @@
|
|
930
930
|
- CogWheel:
|
931
931
|
:x: 1792.0
|
932
932
|
:y: 320.0
|
933
|
-
:angle:
|
933
|
+
:angle: 62.67709557472743
|
934
934
|
:zorder: 95
|
935
935
|
:factor_x: 1.68525252525252
|
936
936
|
:factor_y: 1.68525252525252
|
@@ -946,7 +946,7 @@
|
|
946
946
|
- CogWheel:
|
947
947
|
:x: 2464.0
|
948
948
|
:y: 288.0
|
949
|
-
:angle:
|
949
|
+
:angle: 133.9767839000518
|
950
950
|
:zorder: 95
|
951
951
|
:factor_x: 1.68525252525252
|
952
952
|
:factor_y: 1.68525252525252
|
@@ -954,7 +954,7 @@
|
|
954
954
|
- CogWheel:
|
955
955
|
:x: 2460.0
|
956
956
|
:y: 960.0
|
957
|
-
:angle:
|
957
|
+
:angle: 64.67709557472737
|
958
958
|
:zorder: 95
|
959
959
|
:factor_x: 1.68525252525252
|
960
960
|
:factor_y: 1.68525252525252
|
@@ -1065,40 +1065,40 @@
|
|
1065
1065
|
:alpha: 255
|
1066
1066
|
- Saw:
|
1067
1067
|
:x: 2304.0
|
1068
|
-
:y:
|
1069
|
-
:angle:
|
1068
|
+
:y: 42982.52618296432
|
1069
|
+
:angle: 156.78075709785693
|
1070
1070
|
:zorder: 100
|
1071
1071
|
:factor_x: 0.317794486215539
|
1072
1072
|
:factor_y: 0.320401002506266
|
1073
1073
|
:alpha: 255
|
1074
1074
|
- Saw:
|
1075
1075
|
:x: 2016.0
|
1076
|
-
:y:
|
1077
|
-
:angle:
|
1076
|
+
:y: 32179.99471564744
|
1077
|
+
:angle: 87.12304982424301
|
1078
1078
|
:zorder: 100
|
1079
1079
|
:factor_x: 0.398395989974937
|
1080
1080
|
:factor_y: 0.401002506265664
|
1081
1081
|
:alpha: 255
|
1082
1082
|
- Saw:
|
1083
1083
|
:x: 1696.0
|
1084
|
-
:y: 14501.
|
1085
|
-
:angle:
|
1084
|
+
:y: 14501.157370140168
|
1085
|
+
:angle: 261.2054788220373
|
1086
1086
|
:zorder: 100
|
1087
1087
|
:factor_x: 0.958395989974934
|
1088
1088
|
:factor_y: 0.961002506265664
|
1089
1089
|
:alpha: 255
|
1090
1090
|
- Saw:
|
1091
1091
|
:x: 1056.0
|
1092
|
-
:y:
|
1093
|
-
:angle:
|
1092
|
+
:y: 24039.250707326933
|
1093
|
+
:angle: 115.75652310590293
|
1094
1094
|
:zorder: 100
|
1095
1095
|
:factor_x: 0.637794486215539
|
1096
1096
|
:factor_y: 0.640401002506266
|
1097
1097
|
:alpha: 255
|
1098
1098
|
- Saw:
|
1099
1099
|
:x: 1344.0
|
1100
|
-
:y:
|
1101
|
-
:angle:
|
1100
|
+
:y: 24039.250707326933
|
1101
|
+
:angle: 118.75652310590394
|
1102
1102
|
:zorder: 100
|
1103
1103
|
:factor_x: 0.637794486215539
|
1104
1104
|
:factor_y: 0.640401002506266
|
@@ -1353,72 +1353,72 @@
|
|
1353
1353
|
:alpha: 255
|
1354
1354
|
- Saw:
|
1355
1355
|
:x: 2176.0
|
1356
|
-
:y:
|
1357
|
-
:angle:
|
1356
|
+
:y: 42822.52618296432
|
1357
|
+
:angle: 159.7807570978569
|
1358
1358
|
:zorder: 100
|
1359
1359
|
:factor_x: 0.317794486215539
|
1360
1360
|
:factor_y: 0.320401002506266
|
1361
1361
|
:alpha: 255
|
1362
1362
|
- Saw:
|
1363
1363
|
:x: 1280.0
|
1364
|
-
:y:
|
1365
|
-
:angle:
|
1364
|
+
:y: 30828.455270887032
|
1365
|
+
:angle: 14.551566069882607
|
1366
1366
|
:zorder: 100
|
1367
1367
|
:factor_x: 0.47739348370927
|
1368
1368
|
:factor_y: 0.48
|
1369
1369
|
:alpha: 255
|
1370
1370
|
- Saw:
|
1371
1371
|
:x: 1055.0
|
1372
|
-
:y:
|
1373
|
-
:angle:
|
1372
|
+
:y: 91503.18461541468
|
1373
|
+
:angle: 287.05617791584626
|
1374
1374
|
:zorder: 100
|
1375
1375
|
:factor_x: 0.156390977443606
|
1376
1376
|
:factor_y: 0.158997493734336
|
1377
1377
|
:alpha: 255
|
1378
1378
|
- Saw:
|
1379
1379
|
:x: 960.0
|
1380
|
-
:y:
|
1381
|
-
:angle:
|
1380
|
+
:y: 91567.18461541476
|
1381
|
+
:angle: 290.0561779158443
|
1382
1382
|
:zorder: 100
|
1383
1383
|
:factor_x: 0.156390977443606
|
1384
1384
|
:factor_y: 0.158997493734336
|
1385
1385
|
:alpha: 255
|
1386
1386
|
- Saw:
|
1387
1387
|
:x: 1120.0
|
1388
|
-
:y:
|
1389
|
-
:angle:
|
1388
|
+
:y: 91567.18461541476
|
1389
|
+
:angle: 290.0561779158443
|
1390
1390
|
:zorder: 100
|
1391
1391
|
:factor_x: 0.156390977443606
|
1392
1392
|
:factor_y: 0.158997493734336
|
1393
1393
|
:alpha: 255
|
1394
1394
|
- Saw:
|
1395
1395
|
:x: 864.0
|
1396
|
-
:y:
|
1397
|
-
:angle:
|
1396
|
+
:y: 91503.18461541468
|
1397
|
+
:angle: 293.0561779158443
|
1398
1398
|
:zorder: 100
|
1399
1399
|
:factor_x: 0.156390977443606
|
1400
1400
|
:factor_y: 0.158997493734336
|
1401
1401
|
:alpha: 255
|
1402
1402
|
- Saw:
|
1403
1403
|
:x: 1247.0
|
1404
|
-
:y:
|
1405
|
-
:angle:
|
1404
|
+
:y: 27760.30945377652
|
1405
|
+
:angle: 35.78469307954082
|
1406
1406
|
:zorder: 100
|
1407
1407
|
:factor_x: 0.477192982456137
|
1408
1408
|
:factor_y: 0.479799498746867
|
1409
1409
|
:alpha: 255
|
1410
1410
|
- Saw:
|
1411
1411
|
:x: 1088.0
|
1412
|
-
:y:
|
1413
|
-
:angle:
|
1412
|
+
:y: 54687.2512711895
|
1413
|
+
:angle: 322.8948625787961
|
1414
1414
|
:zorder: 100
|
1415
1415
|
:factor_x: 0.236591478696738
|
1416
1416
|
:factor_y: 0.239197994987469
|
1417
1417
|
:alpha: 255
|
1418
1418
|
- Saw:
|
1419
1419
|
:x: 960.0
|
1420
|
-
:y:
|
1421
|
-
:angle:
|
1420
|
+
:y: 54687.2512711895
|
1421
|
+
:angle: 325.89486257879616
|
1422
1422
|
:zorder: 100
|
1423
1423
|
:factor_x: 0.236591478696738
|
1424
1424
|
:factor_y: 0.239197994987469
|
@@ -1537,88 +1537,88 @@
|
|
1537
1537
|
:alpha: 255
|
1538
1538
|
- Saw:
|
1539
1539
|
:x: 2272.0
|
1540
|
-
:y:
|
1541
|
-
:angle:
|
1540
|
+
:y: 1465.5598892803227
|
1541
|
+
:angle: 252.69677906419255
|
1542
1542
|
:zorder: 100
|
1543
1543
|
:factor_x: 0.398395989974937
|
1544
1544
|
:factor_y: 0.401002506265664
|
1545
1545
|
:alpha: 255
|
1546
1546
|
- Saw:
|
1547
1547
|
:x: 1792.0
|
1548
|
-
:y:
|
1549
|
-
:angle:
|
1548
|
+
:y: 1382.9861913130887
|
1549
|
+
:angle: 28.365553602565324
|
1550
1550
|
:zorder: 100
|
1551
1551
|
:factor_x: 0.79859649122807
|
1552
1552
|
:factor_y: 0.801203007518797
|
1553
1553
|
:alpha: 255
|
1554
1554
|
- Saw:
|
1555
1555
|
:x: 2112.0
|
1556
|
-
:y:
|
1557
|
-
:angle:
|
1556
|
+
:y: 1318.1290050590083
|
1557
|
+
:angle: 359.9863811226902
|
1558
1558
|
:zorder: 100
|
1559
1559
|
:factor_x: 0.237794486215539
|
1560
1560
|
:factor_y: 0.240401002506266
|
1561
1561
|
:alpha: 255
|
1562
1562
|
- Saw:
|
1563
1563
|
:x: 1504.0
|
1564
|
-
:y:
|
1565
|
-
:angle:
|
1564
|
+
:y: 1554.4759087066618
|
1565
|
+
:angle: 18.26627219000278
|
1566
1566
|
:zorder: 100
|
1567
1567
|
:factor_x: 0.23719298245614
|
1568
1568
|
:factor_y: 0.239799498746867
|
1569
1569
|
:alpha: 255
|
1570
1570
|
- Saw:
|
1571
1571
|
:x: 1344.0
|
1572
|
-
:y:
|
1573
|
-
:angle:
|
1572
|
+
:y: 1424.913778529173
|
1573
|
+
:angle: 21.266272190005793
|
1574
1574
|
:zorder: 100
|
1575
1575
|
:factor_x: 0.23719298245614
|
1576
1576
|
:factor_y: 0.239799498746867
|
1577
1577
|
:alpha: 255
|
1578
1578
|
- Saw:
|
1579
1579
|
:x: 1152.0
|
1580
|
-
:y:
|
1581
|
-
:angle:
|
1580
|
+
:y: 1404.766272189363
|
1581
|
+
:angle: 24.26627219000278
|
1582
1582
|
:zorder: 100
|
1583
1583
|
:factor_x: 0.23719298245614
|
1584
1584
|
:factor_y: 0.239799498746867
|
1585
1585
|
:alpha: 255
|
1586
1586
|
- Saw:
|
1587
1587
|
:x: 992.0
|
1588
|
-
:y:
|
1589
|
-
:angle:
|
1588
|
+
:y: 1379.7088122605323
|
1589
|
+
:angle: 149.27841257069542
|
1590
1590
|
:zorder: 100
|
1591
1591
|
:factor_x: 0.156992481203007
|
1592
1592
|
:factor_y: 0.159598997493734
|
1593
1593
|
:alpha: 255
|
1594
1594
|
- Saw:
|
1595
1595
|
:x: 800.0
|
1596
|
-
:y:
|
1597
|
-
:angle:
|
1596
|
+
:y: 1379.7088122605323
|
1597
|
+
:angle: 152.27841257069542
|
1598
1598
|
:zorder: 100
|
1599
1599
|
:factor_x: 0.156992481203007
|
1600
1600
|
:factor_y: 0.159598997493734
|
1601
1601
|
:alpha: 255
|
1602
1602
|
- Saw:
|
1603
1603
|
:x: 1248.0
|
1604
|
-
:y:
|
1605
|
-
:angle:
|
1604
|
+
:y: 1404.0892744479506
|
1605
|
+
:angle: 192.80716136183597
|
1606
1606
|
:zorder: 100
|
1607
1607
|
:factor_x: 0.317794486215539
|
1608
1608
|
:factor_y: 0.320401002506266
|
1609
1609
|
:alpha: 255
|
1610
1610
|
- Saw:
|
1611
1611
|
:x: 928.0
|
1612
|
-
:y:
|
1613
|
-
:angle:
|
1612
|
+
:y: 1348.0114942528803
|
1613
|
+
:angle: 155.27841257069545
|
1614
1614
|
:zorder: 100
|
1615
1615
|
:factor_x: 0.156992481203007
|
1616
1616
|
:factor_y: 0.159598997493734
|
1617
1617
|
:alpha: 255
|
1618
1618
|
- Saw:
|
1619
1619
|
:x: 672.0
|
1620
|
-
:y:
|
1621
|
-
:angle:
|
1620
|
+
:y: 1324.7171136654108
|
1621
|
+
:angle: 152.27841257069542
|
1622
1622
|
:zorder: 100
|
1623
1623
|
:factor_x: 0.156992481203007
|
1624
1624
|
:factor_y: 0.159598997493734
|
@@ -2135,3 +2135,11 @@
|
|
2135
2135
|
:factor_x: 0.071748878923767
|
2136
2136
|
:factor_y: 0.071748878923767
|
2137
2137
|
:alpha: 255
|
2138
|
+
- Block:
|
2139
|
+
:x: 384.0
|
2140
|
+
:y: 352.0
|
2141
|
+
:angle: 0
|
2142
|
+
:zorder: 100
|
2143
|
+
:factor_x: 0.13901345291479816
|
2144
|
+
:factor_y: 0.13901345291479816
|
2145
|
+
:alpha: 255
|
@@ -8,14 +8,15 @@ include Chingu
|
|
8
8
|
#
|
9
9
|
# Press 'E' when demo is running to edit the playfield!
|
10
10
|
#
|
11
|
-
class Game < Chingu::Window
|
11
|
+
class Game < Chingu::Window
|
12
12
|
def initialize
|
13
|
-
super(1000,700)
|
13
|
+
#super(1000,700)
|
14
|
+
super(1024,768, true)
|
14
15
|
end
|
15
16
|
|
16
17
|
def setup
|
17
|
-
|
18
|
-
switch_game_state(Example21
|
18
|
+
retrofy
|
19
|
+
switch_game_state(Example21)
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
@@ -25,14 +26,14 @@ end
|
|
25
26
|
class Example21 < GameState
|
26
27
|
traits :viewport, :timer
|
27
28
|
|
28
|
-
def
|
29
|
+
def initialize(options = {})
|
30
|
+
super
|
31
|
+
|
29
32
|
self.input = { :escape => :exit, :e => :edit }
|
30
33
|
self.viewport.game_area = [0, 0, 3500, 2000]
|
31
34
|
|
32
|
-
@droid = Droid.create(:x => 100, :y => 400)
|
33
|
-
#@droid = Droid.create(:x => 400, :y => 1300)
|
34
|
-
|
35
35
|
load_game_objects
|
36
|
+
@droid = Droid.create(:x => 100, :y => 400)
|
36
37
|
|
37
38
|
# Reverse the cog wheels in relation to eachother
|
38
39
|
CogWheel.each_collision(CogWheel) do |cog_wheel, cog_wheel_2|
|
@@ -44,7 +45,7 @@ class Example21 < GameState
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def edit
|
47
|
-
push_game_state(GameStates::Edit.new(:grid => [32,32], :classes => [Tube, CogWheel, Block, Saw, Battery]))
|
48
|
+
push_game_state(GameStates::Edit.new(:grid => [32,32], :classes => [Droid, Tube, CogWheel, Block, Saw, Battery]))
|
48
49
|
end
|
49
50
|
|
50
51
|
def restore_player_position
|
@@ -58,19 +59,10 @@ class Example21 < GameState
|
|
58
59
|
def update
|
59
60
|
super
|
60
61
|
|
61
|
-
visible_blocks = Block
|
62
|
-
|
63
|
-
#
|
64
|
-
# Eating a lot of CPU cause our crude collision detection, just kill fireballs after 3 secs instead.
|
65
|
-
#
|
66
|
-
# FireBall.each_collision(visible_blocks) do |fire_ball, block|
|
67
|
-
# fire_ball.destroy
|
68
|
-
# end
|
69
|
-
|
70
62
|
# Makes all saw pendle up and down between Y-coordinate 1000 - 1500
|
71
63
|
# TODO: Not a very flexible sollution, how about setting out circle,rects,lines in editor..
|
72
64
|
# .. when then can be used for this kind of stuff?
|
73
|
-
Saw.
|
65
|
+
Saw.select {|saw| saw.y < 1300 || saw.y > 1550 }.each do |saw|
|
74
66
|
saw.velocity_y = -saw.velocity_y
|
75
67
|
saw.y += saw.velocity_y * saw.factor_y
|
76
68
|
end
|
@@ -124,7 +116,7 @@ class Droid < Chingu::GameObject
|
|
124
116
|
|
125
117
|
def die
|
126
118
|
self.collidable = false
|
127
|
-
@color = Color::RED
|
119
|
+
@color = Color::RED.dup
|
128
120
|
between(1,600) { self.velocity_y = 0; self.scale += 0.2; self.alpha -= 5; }.then { resurrect }
|
129
121
|
end
|
130
122
|
|
@@ -132,7 +124,7 @@ class Droid < Chingu::GameObject
|
|
132
124
|
self.alpha = 255
|
133
125
|
self.factor = 3
|
134
126
|
self.collidable = true
|
135
|
-
@color = Color::WHITE
|
127
|
+
@color = Color::WHITE.dup
|
136
128
|
game_state.restore_player_position
|
137
129
|
end
|
138
130
|
|
@@ -124,7 +124,7 @@ class Particles < Chingu::GameState
|
|
124
124
|
:mode => :additive
|
125
125
|
)
|
126
126
|
|
127
|
-
Particle.
|
127
|
+
Particle.each { |particle| particle.y -= 5; particle.x += 2 - rand(4) }
|
128
128
|
game_objects.destroy_if { |object| object.outside_window? || object.color.alpha == 0 }
|
129
129
|
super
|
130
130
|
end
|
data/examples/example8_traits.rb
CHANGED
@@ -63,9 +63,8 @@ class Particles < Chingu::GameState
|
|
63
63
|
Plasma.create(:x => 0, :y => 50 + rand(5), :color => Color.new(0xFF86EFFF), :velocity_x => 14)
|
64
64
|
Plasma.create(:x => 0, :y => 100 + rand(5), :color => Color.new(0xFF86EFFF), :velocity_x => 7)
|
65
65
|
Plasma.create(:x => 0, :y => 200 + rand(5), :color => Color.new(0xFF86EFFF), :velocity_x => 6)
|
66
|
-
#p pl.mode
|
67
66
|
|
68
|
-
Plasma.
|
67
|
+
Plasma.each do |particle|
|
69
68
|
#
|
70
69
|
# +1 fps
|
71
70
|
#
|