use of com.bladecoder.engine.model.AnchorActor in project bladecoder-adventure-engine by bladecoder.
the class DefaultSceneScreen method drawDebugText.
private void drawDebugText(SpriteBatch batch) {
World w = World.getInstance();
w.getSceneCamera().getInputUnProject(viewport, unprojectTmp);
Color color;
sbTmp.setLength(0);
if (EngineLogger.lastError != null) {
sbTmp.append(EngineLogger.lastError);
color = Color.RED;
} else {
// sbTmp.append("( ");
// sbTmp.append((int) unprojectTmp.x);
// sbTmp.append(", ");
// sbTmp.append((int) unprojectTmp.y);
// sbTmp.append(") FPS:");
// sbTmp.append(Gdx.graphics.getFramesPerSecond());
// sbTmp.append(" Density:");
// sbTmp.append(Gdx.graphics.getDensity());
// sbTmp.append(" UI Multiplier:");
// sbTmp.append(DPIUtils.getSizeMultiplier());
sbTmp.append(" ");
sbTmp.append(state.toString());
sbTmp.append(' ');
long millis = w.getTimeOfGame();
long second = (millis / 1000) % 60;
long minute = (millis / (1000 * 60)) % 60;
long hour = (millis / (1000 * 60 * 60));
String time = String.format("%02d:%02d:%02d", hour, minute, second);
sbTmp.append(time);
// if (w.getCurrentScene().getPlayer() != null) {
// sbTmp.append(" Depth Scl: ");
// sbTmp.append(w.getCurrentScene().getFakeDepthScale(unprojectTmp.y));
// }
color = Color.WHITE;
}
String strDebug = sbTmp.toString();
textLayout.setText(ui.getSkin().getFont("debug"), strDebug, color, viewport.getScreenWidth(), Align.left, true);
RectangleRenderer.draw(batch, 0, viewport.getScreenHeight() - textLayout.height - 10, textLayout.width, textLayout.height + 10, Color.BLACK);
ui.getSkin().getFont("debug").draw(batch, textLayout, 0, viewport.getScreenHeight() - 5);
// Draw actor states when debug
if (EngineLogger.getDebugLevel() == EngineLogger.DEBUG1) {
for (BaseActor a : w.getCurrentScene().getActors().values()) {
if (a instanceof AnchorActor)
continue;
Rectangle r = a.getBBox().getBoundingRectangle();
sbTmp.setLength(0);
sbTmp.append(a.getId());
if (a instanceof InteractiveActor && ((InteractiveActor) a).getState() != null)
sbTmp.append(".").append(((InteractiveActor) a).getState());
unprojectTmp.set(r.getX(), r.getY(), 0);
w.getSceneCamera().scene2screen(viewport, unprojectTmp);
ui.getSkin().getFont("debug").draw(batch, sbTmp.toString(), unprojectTmp.x, unprojectTmp.y);
}
}
}
use of com.bladecoder.engine.model.AnchorActor in project bladecoder-adventure-engine by bladecoder.
the class EditActorDialog method modelToInputs.
@Override
protected void modelToInputs() {
id.setText(e.getId());
visible.setText(Boolean.toString(e.isVisible()));
pos.setText(Param.toStringParam(new Vector2(e.getX(), e.getY())));
if (e instanceof InteractiveActor) {
InteractiveActor ia = (InteractiveActor) e;
layer.setText(ia.getLayer());
interaction.setText(Boolean.toString(ia.getInteraction()));
refPoint.setText(Param.toStringParam(ia.getRefPoint()));
desc.setText(Ctx.project.translate(ia.getDesc()));
state.setText(ia.getState());
zIndex.setText(Float.toString(ia.getZIndex()));
if (e instanceof SpriteActor) {
SpriteActor sa = (SpriteActor) e;
ActorRenderer r = sa.getRenderer();
if (r instanceof AtlasRenderer) {
renderer.setText(Project.ATLAS_RENDERER_STRING);
} else if (r instanceof ImageRenderer) {
renderer.setText(Project.IMAGE_RENDERER_STRING);
} else if (r instanceof Sprite3DRenderer) {
renderer.setText(Project.S3D_RENDERER_STRING);
Sprite3DRenderer s3d = (Sprite3DRenderer) r;
fov.setText(Float.toString(s3d.getCameraFOV()));
cameraName.setText(s3d.getCameraName());
spriteSize.setText(Param.toStringParam(s3d.getSpriteSize()));
} else if (r instanceof ParticleRenderer) {
renderer.setText(Project.PARTICLE_RENDERER_STRING);
ParticleRenderer pr = (ParticleRenderer) r;
particleName.setText(pr.getParticleName());
particleAtlas.setText(pr.getAtlasName());
} else if (r instanceof TextRenderer) {
renderer.setText(Project.TEXT_RENDERER_STRING);
TextRenderer tr = (TextRenderer) r;
text.setText(Ctx.project.translate(tr.getText()));
size.setText(Integer.toString(tr.getFontSize()));
font.setText(tr.getFontName());
borderWidth.setText(Integer.toString(tr.getBorderWidth()));
textAlign.setText(AlignUtils.getAlign(tr.getAlign()));
borderColor.setText(tr.getBorderColor().toString());
borderStraight.setText(Boolean.toString(tr.isBorderStraight()));
shadowOffsetX.setText(Integer.toString(tr.getShadowOffsetX()));
shadowOffsetY.setText(Integer.toString(tr.getShadowOffsetY()));
shadowColor.setText(tr.getShadowColor().toString());
} else if (r instanceof SpineRenderer) {
renderer.setText(Project.SPINE_RENDERER_STRING);
spineSkin.setText(((SpineRenderer) r).getSkin());
}
fakeDepth.setText(Boolean.toString(sa.getFakeDepth()));
scale.setText(Float.toString(sa.getScale()));
rot.setText(Float.toString(sa.getRot()));
tint.setText(sa.getTint() == null ? null : sa.getTint().toString());
bboxFromRenderer.setText(Boolean.toString(sa.isBboxFromRenderer()));
orgAlign.setText(AlignUtils.getAlign(sa.getRenderer().getOrgAlign()));
if (e instanceof CharacterActor) {
CharacterActor ca = (CharacterActor) e;
walkingSpeed.setText(Float.toString(ca.getWalkingSpeed()));
textColor.setText(ca.getTextColor() == null ? null : ca.getTextColor().toString());
textStyle.setText(ca.getTextStyle());
typePanel.setText(CHARACTER_TYPE_STR);
} else {
typePanel.setText(SPRITE_TYPE_STR);
}
} else {
typePanel.setText(BACKGROUND_TYPE_STR);
}
} else if (e instanceof AnchorActor) {
typePanel.setText(ANCHOR_TYPE_STR);
} else if (e instanceof ObstacleActor) {
typePanel.setText(OBSTACLE_TYPE_STR);
}
}
use of com.bladecoder.engine.model.AnchorActor in project bladecoder-adventure-engine by bladecoder.
the class EditActorDialog method inputsToModel.
@Override
protected void inputsToModel(boolean create) {
String type = typePanel.getText();
boolean typeChanged = false;
BaseActor oldElement = e;
String oldId = null;
boolean isPlayer = false;
if (!create) {
typeChanged = (type.equals(CHARACTER_TYPE_STR) && !(e instanceof CharacterActor)) || (type.equals(SPRITE_TYPE_STR) && (!(e instanceof SpriteActor) || e instanceof CharacterActor)) || (type.equals(BACKGROUND_TYPE_STR) && (!(e instanceof InteractiveActor) || e instanceof SpriteActor)) || (type.equals(OBSTACLE_TYPE_STR) && !(e instanceof ObstacleActor)) || (type.equals(ANCHOR_TYPE_STR) && !(e instanceof AnchorActor));
isPlayer = parent.getPlayer() == e;
// remove to allow id, zindex and layer change
parent.removeActor(e);
oldId = e.getId();
}
if (create || typeChanged) {
if (type.equals(BACKGROUND_TYPE_STR)) {
e = new InteractiveActor();
} else if (type.equals(SPRITE_TYPE_STR)) {
e = new SpriteActor();
} else if (type.equals(CHARACTER_TYPE_STR)) {
e = new CharacterActor();
} else if (type.equals(OBSTACLE_TYPE_STR)) {
e = new ObstacleActor();
} else if (type.equals(ANCHOR_TYPE_STR)) {
e = new AnchorActor();
}
if (!(e instanceof SpriteActor) && !(e instanceof AnchorActor)) {
Polygon bbox = e.getBBox();
bbox.setVertices(new float[8]);
float[] verts = bbox.getVertices();
verts[0] = -DEFAULT_DIM / 2;
verts[1] = 0f;
verts[2] = -DEFAULT_DIM / 2;
verts[3] = DEFAULT_DIM;
verts[4] = DEFAULT_DIM / 2;
verts[5] = DEFAULT_DIM;
verts[6] = DEFAULT_DIM / 2;
verts[7] = 0f;
bbox.dirty();
}
}
if (typeChanged) {
if (oldElement instanceof InteractiveActor && e instanceof InteractiveActor) {
HashMap<String, Verb> verbs = ((InteractiveActor) e).getVerbManager().getVerbs();
HashMap<String, Verb> oldVerbs = ((InteractiveActor) oldElement).getVerbManager().getVerbs();
for (String k : oldVerbs.keySet()) {
Verb v = oldVerbs.get(k);
verbs.put(k, v);
}
}
if (oldElement instanceof SpriteActor && e instanceof SpriteActor) {
((SpriteActor) e).setRenderer(((SpriteActor) oldElement).getRenderer());
}
}
e.setId(ElementUtils.getCheckedId(id.getText(), parent.getActors().keySet().toArray(new String[0])));
e.setVisible(Boolean.parseBoolean(visible.getText()));
Vector2 p = Param.parseVector2(pos.getText());
e.setPosition(p.x, p.y);
if (e instanceof InteractiveActor) {
InteractiveActor ia = (InteractiveActor) e;
ia.setLayer(layer.getText());
ia.setInteraction(Boolean.parseBoolean(interaction.getText()));
Vector2 rp = Param.parseVector2(refPoint.getText());
ia.setRefPoint(rp.x, rp.y);
String key = ia.getDesc();
if (key == null || key.isEmpty() || key.charAt(0) != I18N.PREFIX || !e.getId().equals(oldId))
key = Ctx.project.getI18N().genKey(parent.getId(), e.getId(), "desc");
Ctx.project.getI18N().setTranslation(key, desc.getText());
if (desc.getText() != null)
ia.setDesc(key);
else
ia.setDesc(null);
ia.setState(state.getText());
ia.setZIndex(Float.parseFloat(zIndex.getText()));
if (e instanceof SpriteActor) {
SpriteActor sa = (SpriteActor) e;
String rendererType = renderer.getText();
if (Project.ATLAS_RENDERER_STRING.equals(rendererType)) {
if (sa.getRenderer() == null || !(sa.getRenderer() instanceof AtlasRenderer))
sa.setRenderer(new AtlasRenderer());
} else if (Project.IMAGE_RENDERER_STRING.equals(rendererType)) {
if (sa.getRenderer() == null || !(sa.getRenderer() instanceof ImageRenderer))
sa.setRenderer(new ImageRenderer());
} else if (Project.S3D_RENDERER_STRING.equals(rendererType)) {
Sprite3DRenderer r;
if (sa.getRenderer() == null || !(sa.getRenderer() instanceof Sprite3DRenderer)) {
r = new Sprite3DRenderer();
sa.setRenderer(r);
} else {
r = (Sprite3DRenderer) sa.getRenderer();
}
r.setCameraFOV(Float.parseFloat(fov.getText()));
r.setCameraName(cameraName.getText());
r.setSpriteSize(Param.parseVector2(spriteSize.getText()));
} else if (Project.PARTICLE_RENDERER_STRING.equals(rendererType)) {
ParticleRenderer r;
if (sa.getRenderer() == null || !(sa.getRenderer() instanceof ParticleRenderer)) {
r = new ParticleRenderer();
sa.setRenderer(r);
} else {
r = (ParticleRenderer) sa.getRenderer();
}
r.setParticleName(particleName.getText());
r.setAtlasName(particleAtlas.getText());
} else if (Project.TEXT_RENDERER_STRING.equals(rendererType)) {
TextRenderer r;
if (sa.getRenderer() == null || !(sa.getRenderer() instanceof TextRenderer)) {
r = new TextRenderer();
sa.setRenderer(r);
} else {
r = (TextRenderer) sa.getRenderer();
}
key = text.getText();
if (key == null || key.isEmpty() || key.charAt(0) != I18N.PREFIX || !e.getId().equals(oldId))
key = Ctx.project.getI18N().genKey(parent.getId(), e.getId(), "text");
Ctx.project.getI18N().setTranslation(key, text.getText());
if (text.getText() != null)
r.setText(key, text.getText());
else
r.setText(null, null);
r.setFontSize(Integer.parseInt(size.getText()));
r.setFontName(font.getText());
r.setAlign(AlignUtils.getAlign(textAlign.getText()));
r.setBorderWidth(Integer.parseInt(borderWidth.getText()));
r.setBorderColor(Param.parseColor(borderColor.getText()));
r.setBorderStraight(Boolean.parseBoolean(borderStraight.getText()));
r.setShadowOffsetX(Integer.parseInt(shadowOffsetX.getText()));
r.setShadowOffsetY(Integer.parseInt(shadowOffsetY.getText()));
r.setShadowColor(Param.parseColor(shadowColor.getText()));
// dispose to force reload the text attributes
sa.dispose();
} else if (Project.SPINE_RENDERER_STRING.equals(rendererType)) {
SpineRenderer r;
if (sa.getRenderer() == null || !(sa.getRenderer() instanceof SpineRenderer)) {
r = new SpineRenderer();
sa.setRenderer(r);
} else {
r = (SpineRenderer) sa.getRenderer();
}
r.setSkin(spineSkin.getText());
}
boolean bbfr = Boolean.parseBoolean(bboxFromRenderer.getText());
if (bbfr != sa.isBboxFromRenderer())
sa.setBboxFromRenderer(bbfr);
sa.setFakeDepth(Boolean.parseBoolean(fakeDepth.getText()));
sa.setScale(Float.parseFloat(scale.getText()));
sa.setRot(Float.parseFloat(rot.getText()));
sa.getRenderer().setOrgAlign(AlignUtils.getAlign(orgAlign.getText()));
sa.setTint(Param.parseColor(tint.getText()));
if (e instanceof CharacterActor) {
CharacterActor ca = (CharacterActor) e;
ca.setWalkingSpeed(Float.parseFloat(walkingSpeed.getText()));
ca.setTextColor(Param.parseColor(textColor.getText()));
ca.setTextStyle(textStyle.getText());
}
}
}
parent.addActor(e);
if (isPlayer && !typeChanged)
parent.setPlayer((CharacterActor) e);
if (e instanceof InteractiveActor) {
SceneLayer l = parent.getLayer(((InteractiveActor) e).getLayer());
l.orderByZIndex();
}
if (e instanceof SpriteActor)
((SpriteActor) e).retrieveAssets();
// TODO UNDO OP
// UndoOp undoOp = new UndoAddElement(doc, e);
// Ctx.project.getUndoStack().add(undoOp);
Ctx.project.setModified();
}
use of com.bladecoder.engine.model.AnchorActor in project bladecoder-adventure-engine by bladecoder.
the class CanvasDrawer method drawBBoxActors.
public void drawBBoxActors(Scene scn) {
drawer.setProjectionMatrix(camera.combined);
drawer.setTransformMatrix(new Matrix4());
drawer.begin(ShapeType.Line);
for (BaseActor a : scn.getActors().values()) {
Polygon p = a.getBBox();
if (p == null) {
EditorLogger.error("ERROR DRAWING BBOX FOR: " + a.getId());
}
if (a instanceof ObstacleActor) {
drawer.setColor(Scene.OBSTACLE_COLOR);
drawer.polygon(p.getTransformedVertices());
} else if (a instanceof InteractiveActor) {
InteractiveActor iActor = (InteractiveActor) a;
if (!scn.getLayer(iActor.getLayer()).isVisible())
continue;
drawer.setColor(Scene.ACTOR_BBOX_COLOR);
if (p.getTransformedVertices().length > 2)
drawer.polygon(p.getTransformedVertices());
} else if (a instanceof AnchorActor) {
drawer.setColor(Scene.ANCHOR_COLOR);
drawer.line(p.getX() - Scene.ANCHOR_RADIUS, p.getY(), p.getX() + Scene.ANCHOR_RADIUS, p.getY());
drawer.line(p.getX(), p.getY() - Scene.ANCHOR_RADIUS, p.getX(), p.getY() + Scene.ANCHOR_RADIUS);
}
// drawer.rect(r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
drawer.end();
}
use of com.bladecoder.engine.model.AnchorActor in project bladecoder-adventure-engine by bladecoder.
the class CanvasDrawer method drawSelectedActor.
public void drawSelectedActor(BaseActor selectedActor) {
// Gdx.gl20.glLineWidth(3);
Gdx.gl20.glEnable(GL20.GL_BLEND);
// Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
drawer.setProjectionMatrix(camera.combined);
if (selectedActor instanceof AnchorActor) {
drawer.begin(ShapeRenderer.ShapeType.Line);
drawer.setColor(MOUSESELECTION_STROKE_COLOR);
drawer.rect(selectedActor.getX() - Scene.ANCHOR_RADIUS, selectedActor.getY() - Scene.ANCHOR_RADIUS, Scene.ANCHOR_RADIUS * 2, Scene.ANCHOR_RADIUS * 2);
drawer.end();
} else {
Polygon p = selectedActor.getBBox();
Rectangle rect = p.getBoundingRectangle();
drawer.begin(ShapeRenderer.ShapeType.Filled);
drawer.setColor(MOUSESELECTION_FILL_COLOR);
drawer.rect(rect.x, rect.y, rect.width, rect.height);
drawer.end();
drawer.begin(ShapeRenderer.ShapeType.Line);
drawer.setColor(MOUSESELECTION_STROKE_COLOR);
drawer.rect(rect.x, rect.y, rect.width, rect.height);
// DRAW SELECTION BOUNDS
if ((!(selectedActor instanceof SpriteActor) || !((SpriteActor) selectedActor).isBboxFromRenderer()) && !(selectedActor instanceof AnchorActor)) {
float[] verts = selectedActor.getBBox().getTransformedVertices();
for (int i = 0; i < verts.length; i += 2) drawer.rect(verts[i] - CORNER_DIST / 2, verts[i + 1] - CORNER_DIST / 2, CORNER_DIST, CORNER_DIST);
}
// DRAW REFPOINT
if (selectedActor instanceof InteractiveActor) {
Vector2 refPoint = ((InteractiveActor) selectedActor).getRefPoint();
float orgX = selectedActor.getX() + refPoint.x;
float orgY = selectedActor.getY() + refPoint.y;
drawer.line(orgX - Scene.ANCHOR_RADIUS, orgY, orgX + Scene.ANCHOR_RADIUS, orgY);
drawer.line(orgX, orgY - Scene.ANCHOR_RADIUS, orgX, orgY + Scene.ANCHOR_RADIUS);
}
drawer.end();
}
}
Aggregations