appel wrote:
I can't remember the exact layout. I can paste the code for this later tonight, as I don't have it here at work.
As promised:
Code:
private void initTank(GameContainer container, StateBasedGame game) throws SlickException {
Entity tank = new Entity("tank","Mammoth Tank","tanks", "PLAYER");
tank.setPlayer(player);
tank.setComponent(new Transform(500,300));
PlayerMovementController playerMovementController = new PlayerMovementController();
tank.setComponent(playerMovementController);
Node tankNode = new Node();
tankNode.setLayer(1);
{
{ // Shadow
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform());
e.setComponent(new Sprite(new Image("mammoth/shadow.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Rear tracks bg
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform());
e.setComponent(new Sprite(new Image("mammoth/rearTracks.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Left front tracks bg
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,-40,40));
e.setComponent(new Sprite(new Image("mammoth/frontTrack.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Right front tracks bg
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,-40,-40));
e.setComponent(new Sprite(new Image("mammoth/frontTrack.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Left rear track
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,-76,-45));
e.setComponent(new Track(playerMovementController, Track.Side.LEFT, 64, 11, new Image("mammoth/tracks.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Right rear track
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,-76,34));
e.setComponent(new Track(playerMovementController, Track.Side.RIGHT, 64, 11, new Image("mammoth/tracks.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Left front track
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,18,-45));
e.setComponent(new Track(playerMovementController, Track.Side.LEFT, 44, 11, new Image("mammoth/tracks.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Right front track
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,18,35));
e.setComponent(new Track(playerMovementController, Track.Side.RIGHT, 44, 11, new Image("mammoth/tracks.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Left rear track drawer
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,-76,-45));
e.setComponent(new TrackDrawer());
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Right rear track drawer
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,-76,34));
e.setComponent(new TrackDrawer());
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Left front track drawer
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,18,-45));
e.setComponent(new TrackDrawer());
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Right front track drawer
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,18,35));
e.setComponent(new TrackDrawer());
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Base
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform());
e.setComponent(new Sprite(new Image("mammoth/base.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Left front track cover
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,-40,40));
e.setComponent(new Sprite(new Image("mammoth/leftFrontTrackCover.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Right front track cover
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform(0,0,-40,-40));
e.setComponent(new Sprite(new Image("mammoth/rightFrontTrackCover.png")));
e.initialize(container, game);
tankNode.add(e, true);
}
{ // Tower
Entity tower = new Entity();
tower.setPlayer(player);
tower.setComponent(new Transform());
tower.setComponent(new PlayerTowerController());
Node towerNode = new Node();
{
{ // Barrels
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform());
e.setComponent(new Sprite(new Image("mammoth/barrels.png")));
e.setComponent(new PlayerWeapons());
e.initialize(container, game);
towerNode.add(e,true);
}
{ // Turret
Entity e = new Entity();
e.setPlayer(player);
e.setComponent(new Transform());
e.setComponent(new Sprite(new Image("mammoth/tower.png")));
e.initialize(container, game);
towerNode.add(e,true);
}
}
tower.setComponent(towerNode);
tower.initialize(container, game);
tankNode.add(tower);
}
}
tank.setComponent(tankNode);
tank.initialize(container, game);
EntityManager.getInstance().addEntity(tank);
}
the "true" in the tankNode.add(..) is "inheritRotation".
Demo:
http://gamadu.com/games/tankz/webstart/tankz.jnlp
(yet to add physics so it collides with the crates)