-
Notifications
You must be signed in to change notification settings - Fork 9
/
PlayState.as
136 lines (119 loc) · 4.14 KB
/
PlayState.as
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package
{
import org.flixel.*;
import org.flixel.system.FlxTile;
public class PlayState extends FlxState
{
[Embed(source="data/map.png")] private var ImgMap:Class;
[Embed(source="data/tiles.png")] private var ImgTiles:Class;
[Embed(source="data/bg.png")] private var ImgBG:Class;
[Embed(source="data/gibs.png")] private var ImgGibs:Class;
[Embed(source="data/pusher.png")] private var ImgPusher:Class;
[Embed(source="data/elevator.png")] private var ImgElevator:Class;
[Embed(source="data/crate.png")] private var ImgCrate:Class;
protected var _level:FlxTilemap;
protected var _player:Player;
override public function create():void
{
//Background
FlxG.bgColor = 0xffacbcd7;
var decoration:FlxSprite = new FlxSprite(256,159,ImgBG);
decoration.moves = false;
decoration.solid = false;
add(decoration);
add(new FlxText(32,36,96,"collision").setFormat(null,16,0x778ea1,"center"));
add(new FlxText(32,60,96,"DEMO").setFormat(null,24,0x778ea1,"center"));
var path:FlxPath;
var sprite:FlxSprite;
var destination:FlxPoint;
//Create the elevator and put it on a up and down path
sprite = new FlxSprite(208,80,ImgElevator);
sprite.immovable = true;
destination = sprite.getMidpoint();
destination.y += 112;
path = new FlxPath([sprite.getMidpoint(),destination]);
sprite.followPath(path,40,FlxObject.PATH_YOYO);
add(sprite);
//Create the side-to-side pusher object and put it on a different path
sprite = new FlxSprite(96,208,ImgPusher);
sprite.immovable = true;
destination = sprite.getMidpoint();
destination.x += 56;
path = new FlxPath([sprite.getMidpoint(),destination]);
sprite.followPath(path,40,FlxObject.PATH_YOYO);
add(sprite);
//Then add the player, its own class with its own logic
_player = new Player(32,176);
add(_player);
//Then create the crates that are sprinkled around the level
var crates:Array = [new FlxPoint(64,208),
new FlxPoint(108,176),
new FlxPoint(140,176),
new FlxPoint(192,208),
new FlxPoint(272,48)];
for(var i:uint = 0; i < crates.length; i++)
{
sprite = new FlxSprite((crates[i] as FlxPoint).x,(crates[i] as FlxPoint).y,ImgCrate);
sprite.height = sprite.height-1;
sprite.acceleration.y = 400;
sprite.drag.x = 200;
add(sprite);
}
//This is the thing that spews nuts and bolts
var dispenser:FlxEmitter = new FlxEmitter(32,40);
dispenser.setSize(8,40);
dispenser.setXSpeed(100,240);
dispenser.setYSpeed(-50,50);
dispenser.gravity = 300;
dispenser.bounce = 0.3;
dispenser.makeParticles(ImgGibs,100,16,true,0.8);
dispenser.start(false,10,0.035);
add(dispenser);
//Basic level structure
_level = new FlxTilemap();
_level.loadMap(FlxTilemap.imageToCSV(ImgMap,false,2),ImgTiles,0,0,FlxTilemap.ALT);
_level.follow();
add(_level);
//Library label in upper left
var tx:FlxText;
tx = new FlxText(2,0,FlxG.width/4,FlxG.getLibraryName());
tx.scrollFactor.x = tx.scrollFactor.y = 0;
tx.color = 0x778ea1;
tx.shadow = 0x233e58;
add(tx);
//Instructions
tx = new FlxText(2,FlxG.height-12,FlxG.width,"Interact with ARROWS + SPACE, or press ENTER for next demo.");
tx.scrollFactor.x = tx.scrollFactor.y = 0;
tx.color = 0x778ea1;
tx.shadow = 0x233e58;
add(tx);
/*part of silly path-finding test
FlxG.mouse.show();
FlxG.visualDebug = true;//*/
}
override public function destroy():void
{
super.destroy();
_level = null;
_player = null;
}
override public function update():void
{
/*silly path-finding test
if(FlxG.mouse.justPressed())
{
var path:FlxPath = _level.findPath(_player.getMidpoint(),FlxG.mouse,true,true);
if(path != null)
{
if(_player.path != null)
_player.path.destroy();
_player.followPath(path,80,FlxObject.PATH_FORWARD|FlxObject.PATH_HORIZONTAL_ONLY);
}
}//*/
super.update();
FlxG.collide();
if(FlxG.keys.justReleased("ENTER"))
FlxG.switchState(new PlayState2());
}
}
}