import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.List;
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.Align;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Timer.Task;
public class SceneEditor extends Scene {
public static Actor selectedActor = null;
public static boolean reloadAssets = false;
static AddField addField;
Asset.loadBlocking(); // this is the first time this Scene is created by the Stage
Content.assetPanel.updateAsset();
com.badlogic.gdx.utils.Timer.schedule(new Task(){
Frame.scenePanel.showStudio();
Scene.scenesMap.removeKey("gdxstudio.SceneEditor");
Frame.scenePanel.update();
addField = new AddField();
Frame.scenePanel.showStudio();
Scene.scenesMap.removeKey("gdxstudio.SceneEditor");
Content.studioPanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
public static void doClick(Actor actor){
Frame.propertyPanel.clear();
Frame.effectPanel.clear();
Frame.eventPanel.clear();
Scene.getCurrentScene().outline(actor);
Frame.actorPanel.list.setSelectedIndex(Frame.actorPanel.indexOf(actor.getName()));
StatusBar.updateSelected(actor.getName());
Frame.dashPanel.update();
Frame.propertyPanel.update();
Frame.effectPanel.update();
Frame.eventPanel.update();
Frame.actorPanel.unlock();
if(selectedActor instanceof List || selectedActor instanceof SelectBox){
addField.setPosition(actor.getX(), actor.getY() - addField.getHeight());
Scene.getRoot().addActor(addField);
public void onClick(Actor actor) {
float startX, startY, lastX, lastY;
public void onTouchDown(Actor actor) {
if (Scene.mouseButton == 0) {
if (x > actor.getX() + actor.getWidth() - 10) edge |= Align.right;
if (y > actor.getY() + actor.getHeight() - 10) edge |= Align.top;
//if (x < actor.getX() + 20 && y < actor.getY() + 20) edge = Align.left; no rotation
public void onTouchUp() {
Content.studioPanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
public void onDragged() {
if(selectedActor != null){
selectedActor.setPosition(Scene.mouse.x, Scene.mouse.y);
Frame.propertyPanel.updateProperty("X", ""+selectedActor.getX(), 0);
Frame.propertyPanel.updateProperty("Y", ""+selectedActor.getY(), 0);
StatusBar.updateXY(Scene.mouse.x, Scene.mouse.y);
float width = selectedActor.getWidth(), height = selectedActor.getHeight();
float windowX = selectedActor.getX(), windowY = selectedActor.getY();
if ((edge & Align.right) != 0) {
if ((edge & Align.top) != 0) {
if ((edge & Align.top) != 0 && (edge & Align.right) != 0) {
float rot = getAngle(selectedActor.getX()+selectedActor.getOriginX(),
selectedActor.getY()+selectedActor.getOriginY(), x, y)
- selectedActor.getRotation();
selectedActor.rotate(rot);
selectedActor.setBounds(Math.round(windowX), Math.round(windowY), Math.round(width), Math.round(height));
Frame.propertyPanel.updateProperty("Width", ""+width, 0);
Frame.propertyPanel.updateProperty("Height", ""+height, 0);
public void onGesture(GestureType type) {
private boolean isHand = true;
private boolean isRight = false;
private boolean isTop = false;
public void act(float delta){
if(selectedActor != null){
//Stage.log("my"+Stage.mouse.y+"top"+selectedActor.getTop());
if (Scene.mouse.x > selectedActor.getRight() - 10 && Scene.mouse.x < selectedActor.getRight()) {
Content.studioPanel.setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
if(Scene.mouse.y > selectedActor.getTop() - 10 && Scene.mouse.y < selectedActor.getTop()){
Content.studioPanel.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
Content.studioPanel.setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
Content.studioPanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
public void onKeyTyped(char key) {};
public void onKeyUp(int keycode){};
public void onKeyDown(int keycode){};
public void onResume(){};
public void onDispose(){};
class AddField extends Table {
setBackground(Asset.skin.getDrawable("dialogDim"));
tf = new TextField("", Asset.skin);
addBtn = new TextButton("Add", Asset.skin);
removeBtn = new TextButton("Remove", Asset.skin);
addBtn.addListener(new ClickListener(){
public void clicked(InputEvent event, float x, float y){
super.clicked(event, x, y);
if(!tf.getText().isEmpty()){
if(SceneEditor.selectedActor instanceof List){
List list = (List) SceneEditor.selectedActor;
Array<String> arr = new Array<String>(list.getItems());
list.setItems(arr.toArray());
AddField.this.setPosition(list.getX(), list.getY()-AddField.this.getHeight());
if(SceneEditor.selectedActor instanceof SelectBox){
SelectBox list = (SelectBox) SceneEditor.selectedActor;
Array<String> arr = new Array<String>(list.getItems());
list.setItems(arr.toArray());
AddField.this.setPosition(list.getX(), list.getY()-AddField.this.getHeight());
removeBtn.addListener(new ClickListener(){
public void clicked(InputEvent event, float x, float y){
super.clicked(event, x, y);
if(SceneEditor.selectedActor instanceof List){
List list = (List) SceneEditor.selectedActor;
if(list.getItems().length == 0)
Array<String> arr = new Array<String>(list.getItems());
list.setSelectedIndex(list.getItems().length-1);
arr.removeIndex(list.getSelectedIndex());
list.setItems(arr.toArray());
AddField.this.setPosition(list.getX(), list.getY()-AddField.this.getHeight());
if(SceneEditor.selectedActor instanceof SelectBox){
SelectBox list = (SelectBox) SceneEditor.selectedActor;
if(list.getItems().length == 0)
Array<String> arr = new Array<String>(list.getItems());
list.setSelection(list.getItems().length-1);
arr.removeIndex(list.getSelectionIndex());
list.setItems(arr.toArray());
AddField.this.setPosition(list.getX(), list.getY()-AddField.this.getHeight());