112 lines
4.4 KiB
Java
112 lines
4.4 KiB
Java
/**
|
|
* GladiatorBrawler is a 2D swordfighting game.
|
|
* Copyright (C) 2015 Jeasonfire/Allexit
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package com.saltosion.gladiator.level;
|
|
|
|
import com.badlogic.ashley.core.ComponentMapper;
|
|
import com.badlogic.ashley.core.Entity;
|
|
import com.badlogic.gdx.graphics.g2d.Sprite;
|
|
import com.badlogic.gdx.math.Vector2;
|
|
import com.saltosion.gladiator.components.CPhysics;
|
|
import com.saltosion.gladiator.components.CRenderedObject;
|
|
import com.saltosion.gladiator.systems.RenderingSystem;
|
|
import com.saltosion.gladiator.util.AppUtil;
|
|
import com.saltosion.gladiator.util.Global;
|
|
import com.saltosion.gladiator.util.Name;
|
|
import com.saltosion.gladiator.util.SpriteLoader;
|
|
import com.saltosion.gladiator.util.SpriteSequence;
|
|
|
|
public class LevelFactory {
|
|
|
|
private static final ComponentMapper<CPhysics> pm = ComponentMapper.getFor(CPhysics.class);
|
|
|
|
public void createLevelBase() {
|
|
createAudience();
|
|
createWall();
|
|
CPhysics groundPO = pm.get(createGround());
|
|
createBorders(groundPO);
|
|
}
|
|
|
|
public Entity createAudience() {
|
|
Entity audience = new Entity();
|
|
Sprite audienceSprite0 = SpriteLoader.loadSprite(Name.AUDIENCEIMG, 0, 0, 768, 576);
|
|
Sprite audienceSprite1 = SpriteLoader.loadSprite(Name.AUDIENCEIMG, 1, 0, 768, 576);
|
|
CRenderedObject audienceRO = new CRenderedObject();
|
|
SpriteSequence audienceAnim = new SpriteSequence(1).addSprite(audienceSprite0).addSprite(audienceSprite1);
|
|
audienceRO.addSequence("Default-Animation", audienceAnim);
|
|
audienceRO.playAnimation("Default-Animation");
|
|
audience.add(audienceRO);
|
|
CPhysics audiencePO = new CPhysics().setMovable(false).setGravityApplied(false)
|
|
.setProcessCollisions(false).setGhost(true).setPosition(0, 10).setZParallax(10)
|
|
.setSize(audienceSprite0.getRegionWidth() * Global.SPRITE_SCALE,
|
|
audienceSprite0.getRegionHeight() * Global.SPRITE_SCALE);
|
|
audience.add(audiencePO);
|
|
AppUtil.engine.addEntity(audience);
|
|
|
|
return audience;
|
|
}
|
|
|
|
public Entity createWall() {
|
|
Entity wall = new Entity();
|
|
Sprite wallSprite = SpriteLoader.loadSprite(Name.WALLIMG);
|
|
CRenderedObject wallRO = new CRenderedObject(wallSprite);
|
|
wall.add(wallRO);
|
|
CPhysics wallPO = new CPhysics().setMovable(false).setGravityApplied(false)
|
|
.setProcessCollisions(false).setGhost(true).setPosition(0, 2).setZParallax(2)
|
|
.setSize(wallSprite.getRegionWidth() * Global.SPRITE_SCALE,
|
|
wallSprite.getRegionHeight() * Global.SPRITE_SCALE);
|
|
wall.add(wallPO);
|
|
AppUtil.engine.addEntity(wall);
|
|
|
|
return wall;
|
|
}
|
|
|
|
public Entity createGround() {
|
|
Entity ground = new Entity();
|
|
Sprite groundSprite = SpriteLoader.loadSprite(Name.GROUNDIMG);
|
|
CRenderedObject groundRO = new CRenderedObject(groundSprite);
|
|
ground.add(groundRO);
|
|
CPhysics groundPO = new CPhysics().setMovable(false).setGravityApplied(false).setProcessCollisions(false)
|
|
.setSize(groundSprite.getRegionWidth() * Global.SPRITE_SCALE,
|
|
groundSprite.getRegionHeight() * Global.SPRITE_SCALE);
|
|
groundPO.getPosition().set(new Vector2(0, -4));
|
|
ground.add(groundPO);
|
|
AppUtil.engine.addEntity(ground);
|
|
|
|
return ground;
|
|
}
|
|
|
|
public void createBorders(CPhysics ground) {
|
|
float xClamp = ground.getSize().x / 2f;
|
|
AppUtil.engine.getSystem(RenderingSystem.class).setXMin(-xClamp).setXMax(xClamp);
|
|
|
|
Entity borderLeft = new Entity();
|
|
CPhysics borderLeftPhysics = new CPhysics().setMovable(false).setGravityApplied(false)
|
|
.setProcessCollisions(false).setSize(1f, 20);
|
|
borderLeftPhysics.setPosition(-xClamp - borderLeftPhysics.getSize().x / 2, 0);
|
|
borderLeft.add(borderLeftPhysics);
|
|
AppUtil.engine.addEntity(borderLeft);
|
|
Entity borderRight = new Entity();
|
|
CPhysics borderRightPhysics = new CPhysics().setMovable(false).setGravityApplied(false)
|
|
.setProcessCollisions(false).setSize(1f, 20);
|
|
borderRightPhysics.setPosition(xClamp + borderRightPhysics.getSize().x / 2, 0);
|
|
borderRight.add(borderRightPhysics);
|
|
AppUtil.engine.addEntity(borderRight);
|
|
}
|
|
|
|
}
|