├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── build.gradle ├── data ├── assets │ ├── spritesheet.png │ ├── tilemode.png │ └── tiles_spritesheet.png ├── eclipse │ ├── GDXWorldEditor.launch │ ├── Hiero.launch │ └── ParticleEditor.launch ├── fonts │ ├── default.fnt │ └── default.png ├── gdxworld.properties └── ui │ ├── uiskin.atlas │ ├── uiskin.json │ └── uiskin.png ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── src ├── main └── java │ └── com │ └── blastedstudios │ └── gdxworld │ ├── GDXWorldEditor.java │ ├── math │ ├── EarClippingTriangulator.java │ ├── PolygonUtils.java │ └── decomposers │ │ ├── BayazitDecomposer.java │ │ ├── Clipper.java │ │ └── ewjordan │ │ ├── EwjordanDecomposer.java │ │ ├── Polygon.java │ │ └── Triangle.java │ ├── physics │ ├── CollideCallback.java │ └── PhysicsHelper.java │ ├── plugin │ ├── mode │ │ ├── animation │ │ │ ├── AnimationEditor.java │ │ │ ├── AnimationManifestationStruct.java │ │ │ ├── AnimationManifestationWindow.java │ │ │ ├── AnimationMode.java │ │ │ ├── AnimationStructRow.java │ │ │ ├── AnimationsEditor.java │ │ │ ├── AnimationsWindow.java │ │ │ └── live │ │ │ │ ├── AnimationLiveOptionTable.java │ │ │ │ ├── AnimationLiveQuestExecutor.java │ │ │ │ ├── SelectboxGDXAnimationHandlerStruct.java │ │ │ │ └── SelectboxGDXAnimationStruct.java │ │ ├── background │ │ │ ├── BackgroundChooserWindow.java │ │ │ ├── BackgroundMode.java │ │ │ └── BackgroundWindow.java │ │ ├── chain │ │ │ ├── ChainMode.java │ │ │ ├── ChainWindow.java │ │ │ └── RectangleTable.java │ │ ├── circle │ │ │ ├── CircleMode.java │ │ │ ├── CircleTable.java │ │ │ └── CircleWindow.java │ │ ├── group │ │ │ ├── GroupEditor.java │ │ │ ├── GroupMode.java │ │ │ └── GroupWindow.java │ │ ├── joint │ │ │ ├── BaseJointTable.java │ │ │ ├── BaseJointWindow.java │ │ │ ├── IJointWindow.java │ │ │ ├── JointMode.java │ │ │ ├── JointWindow.java │ │ │ └── window │ │ │ │ ├── distance │ │ │ │ ├── DistancePlugin.java │ │ │ │ ├── DistanceTable.java │ │ │ │ └── DistanceWindow.java │ │ │ │ ├── gear │ │ │ │ ├── GearPlugin.java │ │ │ │ ├── GearTable.java │ │ │ │ └── GearWindow.java │ │ │ │ ├── prismatic │ │ │ │ ├── PrismaticPlugin.java │ │ │ │ ├── PrismaticTable.java │ │ │ │ └── PrismaticWindow.java │ │ │ │ ├── revolute │ │ │ │ ├── RevolutePlugin.java │ │ │ │ ├── RevoluteTable.java │ │ │ │ └── RevoluteWindow.java │ │ │ │ ├── rope │ │ │ │ ├── RopePlugin.java │ │ │ │ ├── RopeTable.java │ │ │ │ └── RopeWindow.java │ │ │ │ ├── weld │ │ │ │ ├── WeldPlugin.java │ │ │ │ ├── WeldTable.java │ │ │ │ └── WeldWindow.java │ │ │ │ └── wheel │ │ │ │ ├── WheelJointTable.java │ │ │ │ ├── WheelPlugin.java │ │ │ │ └── WheelWindow.java │ │ ├── light │ │ │ ├── ColorTable.java │ │ │ ├── LightMode.java │ │ │ ├── LightWindow.java │ │ │ └── typetable │ │ │ │ ├── AbstractLightTable.java │ │ │ │ ├── ConeLightTable.java │ │ │ │ ├── DirectionalLightTable.java │ │ │ │ └── PointLightTable.java │ │ ├── live │ │ │ ├── ILiveOptionProvider.java │ │ │ ├── LiveMode.java │ │ │ ├── LiveOptionSelectboxStruct.java │ │ │ └── LiveWindow.java │ │ ├── metadata │ │ │ ├── MetadataEditor.java │ │ │ ├── MetadataMode.java │ │ │ └── MetadataWindow.java │ │ ├── npc │ │ │ ├── NPCMode.java │ │ │ ├── NPCPropertyTable.java │ │ │ ├── NPCTable.java │ │ │ └── NPCWindow.java │ │ ├── particle │ │ │ ├── ParticleMode.java │ │ │ ├── ParticleTable.java │ │ │ └── ParticleWindow.java │ │ ├── path │ │ │ ├── PathMode.java │ │ │ └── PathWindow.java │ │ ├── polygon │ │ │ ├── PolygonMode.java │ │ │ ├── PolygonWindow.java │ │ │ └── ShapeTable.java │ │ ├── quest │ │ │ ├── IQuestComponent.java │ │ │ ├── ManifestationTable.java │ │ │ ├── QuestEditor.java │ │ │ ├── QuestMode.java │ │ │ ├── QuestTable.java │ │ │ ├── QuestWindow.java │ │ │ ├── TriggerTable.java │ │ │ └── TriggersWindow.java │ │ ├── sound │ │ │ ├── SoundEditorWindow.java │ │ │ ├── SoundMode.java │ │ │ ├── SoundTable.java │ │ │ └── SoundWindow.java │ │ └── tile │ │ │ ├── PaletteTile.java │ │ │ ├── PaletteWindow.java │ │ │ ├── TileMode.java │ │ │ └── TileWindow.java │ ├── quest │ │ ├── manifestation │ │ │ ├── beingspawn │ │ │ │ ├── BeingSpawnManifestation.java │ │ │ │ ├── BeingSpawnManifestationPlugin.java │ │ │ │ ├── BeingSpawnManifestationTable.java │ │ │ │ └── IBeingSpawnHandler.java │ │ │ ├── bodyremove │ │ │ │ ├── BodyRemoveManifestation.java │ │ │ │ ├── BodyRemoveManifestationPlugin.java │ │ │ │ └── BodyRemoveManifestationTable.java │ │ │ ├── dialog │ │ │ │ ├── DialogManifestation.java │ │ │ │ ├── DialogManifestationPlugin.java │ │ │ │ ├── DialogManifestationTable.java │ │ │ │ └── IDialogHandler.java │ │ │ ├── endlevel │ │ │ │ ├── EndLevelManifestation.java │ │ │ │ ├── EndLevelManifestationPlugin.java │ │ │ │ ├── EndLevelManifestationTable.java │ │ │ │ └── IEndLevelHandler.java │ │ │ ├── groupcreate │ │ │ │ ├── GroupCreateManifestation.java │ │ │ │ ├── GroupCreateManifestationPlugin.java │ │ │ │ └── GroupCreateManifestationTable.java │ │ │ ├── inputenable │ │ │ │ ├── IInputEnableHandler.java │ │ │ │ ├── InputEnableManifestation.java │ │ │ │ ├── InputEnableManifestationPlugin.java │ │ │ │ └── InputEnableManifestationTable.java │ │ │ ├── jointremove │ │ │ │ ├── JointRemoveManifestation.java │ │ │ │ ├── JointRemoveManifestationPlugin.java │ │ │ │ └── JointRemoveManifestationTable.java │ │ │ ├── particle │ │ │ │ ├── IParticleHandler.java │ │ │ │ ├── ParticleManifestation.java │ │ │ │ ├── ParticleManifestationPlugin.java │ │ │ │ ├── ParticleManifestationTable.java │ │ │ │ └── ParticleManifestationTypeEnum.java │ │ │ ├── pause │ │ │ │ ├── IPauseHandler.java │ │ │ │ ├── PauseManifestation.java │ │ │ │ ├── PauseManifestationPlugin.java │ │ │ │ └── PauseManifestationTable.java │ │ │ ├── physics │ │ │ │ ├── IPhysicsManifestationHandler.java │ │ │ │ ├── PhysicsManifestation.java │ │ │ │ ├── PhysicsManifestationPlugin.java │ │ │ │ └── PhysicsManifestationTable.java │ │ │ ├── platform │ │ │ │ ├── PlatformManifestation.java │ │ │ │ ├── PlatformManifestationPlugin.java │ │ │ │ └── PlatformManifestationTable.java │ │ │ ├── prismaticjoint │ │ │ │ ├── PrismaticJointManifestation.java │ │ │ │ ├── PrismaticJointManifestationPlugin.java │ │ │ │ └── PrismaticJointManifestationTable.java │ │ │ ├── revolutejoint │ │ │ │ ├── RevoluteJointManifestation.java │ │ │ │ ├── RevoluteJointManifestationPlugin.java │ │ │ │ └── RevoluteJointManifestationTable.java │ │ │ ├── sound │ │ │ │ ├── ISoundHandler.java │ │ │ │ ├── SoundManifestation.java │ │ │ │ ├── SoundManifestationEnum.java │ │ │ │ ├── SoundManifestationPlugin.java │ │ │ │ └── SoundManifestationTable.java │ │ │ └── wheeljoint │ │ │ │ ├── WheelJointManifestation.java │ │ │ │ ├── WheelJointManifestationPlugin.java │ │ │ │ └── WheelJointManifestationTable.java │ │ └── trigger │ │ │ ├── aabb │ │ │ ├── AABBTrigger.java │ │ │ ├── AABBTriggerPlugin.java │ │ │ └── AABBTriggerTable.java │ │ │ ├── activate │ │ │ ├── ActivateTrigger.java │ │ │ ├── ActivateTriggerPlugin.java │ │ │ └── ActivateTriggerTable.java │ │ │ ├── input │ │ │ ├── InputTrigger.java │ │ │ ├── InputTriggerPlugin.java │ │ │ └── InputTriggerTable.java │ │ │ ├── kill │ │ │ ├── KillTrigger.java │ │ │ ├── KillTriggerPlugin.java │ │ │ └── KillTriggerTable.java │ │ │ ├── objectdistance │ │ │ ├── IObjectDistanceTriggerHandler.java │ │ │ ├── ObjectDistanceTrigger.java │ │ │ ├── ObjectDistanceTriggerPlugin.java │ │ │ └── ObjectDistanceTriggerTable.java │ │ │ ├── person │ │ │ ├── PersonTrigger.java │ │ │ ├── PersonTriggerPlugin.java │ │ │ └── PersonTriggerTable.java │ │ │ └── time │ │ │ ├── TimeTrigger.java │ │ │ ├── TimeTriggerPlugin.java │ │ │ └── TimeTriggerTable.java │ └── serializer │ │ ├── json │ │ └── JSONSerializer.java │ │ ├── serializable │ │ └── JavaSerializable.java │ │ ├── xml │ │ └── XMLSerializer.java │ │ └── xstream │ │ ├── AbstractXStreamSerializer.java │ │ └── LevelConverter.java │ ├── ui │ ├── AbstractScreen.java │ ├── AbstractWindow.java │ ├── GDXRenderer.java │ ├── MainScreen.java │ ├── MouseCameraScroller.java │ ├── TempWorldScreen.java │ ├── drawable │ │ ├── BackgroundDrawable.java │ │ ├── Drawable.java │ │ ├── DrawableSorter.java │ │ ├── ShapeDrawable.java │ │ └── TiledMeshRendererDrawable.java │ ├── leveleditor │ │ ├── AbstractMode.java │ │ ├── FilterTable.java │ │ ├── LevelEditorScreen.java │ │ ├── LevelWindow.java │ │ └── VertexTable.java │ └── worldeditor │ │ ├── LevelInformationWindow.java │ │ ├── PropertiesWindow.java │ │ ├── WorldEditorScreen.java │ │ └── WorldWindow.java │ ├── util │ ├── AxisCalculatorWindow.java │ ├── BlurUtil.java │ ├── ExtensionFileFilter.java │ ├── FileUtil.java │ ├── GDXGame.java │ ├── GDXGameFade.java │ ├── IMode.java │ ├── ISerializer.java │ ├── LoadPriorityComparator.java │ ├── Log.java │ ├── MaskTextureStruct.java │ ├── PluginUtil.java │ ├── Properties.java │ ├── StringUtil.java │ ├── TiledMeshRenderer.java │ ├── panner │ │ ├── PannerManager.java │ │ └── ScreenLevelPanner.java │ └── ui │ │ ├── Accessor.java │ │ ├── FileChooser.java │ │ ├── FileChooserWrapper.java │ │ ├── Scene2DUtils.java │ │ └── TreeFileChooser.java │ └── world │ ├── GDXBackground.java │ ├── GDXLevel.java │ ├── GDXNPC.java │ ├── GDXParticle.java │ ├── GDXPath.java │ ├── GDXSound.java │ ├── GDXTile.java │ ├── GDXWorld.java │ ├── animation │ ├── AnimationStruct.java │ ├── AnimationStructTimeSorter.java │ ├── GDXAnimation.java │ ├── GDXAnimationHandler.java │ └── GDXAnimations.java │ ├── group │ ├── GDXGroup.java │ └── GDXGroupExportStruct.java │ ├── joint │ ├── DistanceJoint.java │ ├── FrictionJoint.java │ ├── GDXJoint.java │ ├── GearJoint.java │ ├── MouseJoint.java │ ├── PrismaticJoint.java │ ├── PulleyJoint.java │ ├── RevoluteJoint.java │ ├── RopeJoint.java │ ├── WeldJoint.java │ └── WheelJoint.java │ ├── light │ ├── ConeLight.java │ ├── DirectionalLight.java │ ├── GDXLight.java │ └── PointLight.java │ ├── metadata │ ├── CameraShot.java │ └── GDXMetadata.java │ ├── quest │ ├── GDXQuest.java │ ├── GDXQuestManager.java │ ├── ICloneable.java │ ├── QuestStatus.java │ ├── manifestation │ │ ├── AbstractQuestManifestation.java │ │ └── IQuestManifestationExecutor.java │ └── trigger │ │ ├── AbstractQuestTrigger.java │ │ └── IQuestTriggerInformationProvider.java │ └── shape │ ├── GDXCircle.java │ ├── GDXPolygon.java │ └── GDXShape.java └── test └── java └── com └── blastedstudios └── gdxworld ├── math └── PolygonUtilsTest.java ├── ui ├── CameraStub.java └── GDXRendererTest.java └── world └── quest └── GDXQuestManagerTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | .settings/ 3 | bin/ 4 | /build/ 5 | /.gradle/ 6 | /.classpath 7 | /.idea 8 | /.project -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | 3 | before_script: 4 | - chmod +x gradlew -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | /* 2 | * ---------------------------------------------------------------------------- 3 | * "THE BEER-WARE LICENSE" (Revision 42): 4 | * wrote this file. As long as you retain this notice you 5 | * can do whatever you want with this stuff. If we meet some day, and you think 6 | * this stuff is worth it, you can buy me a beer in return Jon Robison 7 | * ---------------------------------------------------------------------------- 8 | */ -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "java" 2 | apply plugin: 'application' 3 | apply plugin: 'maven' 4 | apply plugin: 'signing' 5 | 6 | group = 'com.blastedstudios' 7 | mainClassName = "com.blastedstudios.gdxworld.GDXWorldEditor" 8 | version = '1.0.4' 9 | description = "2D world editor for libGDX. Has an overhead map/level layout designer, which may drill into a level and intelligently place physics bodies, enemies and pathing, and other objects." 10 | defaultTasks 'build', 'install' 11 | 12 | ext { 13 | appName = "gdx-world" 14 | gdxVersion = '1.9.9' 15 | url = "https://github.com/narfman0/GDXWorld" 16 | } 17 | 18 | jar { 19 | manifest { 20 | attributes 'Main-Class': '$mainClassName' 21 | } 22 | } 23 | 24 | task sourcesJar(type: Jar, dependsOn: classes) { 25 | classifier = 'sources' 26 | from sourceSets.main.allSource 27 | } 28 | 29 | task javadocsJar(type: Jar, dependsOn: javadoc) { 30 | classifier = 'javadoc' 31 | from javadoc.destinationDir 32 | } 33 | 34 | artifacts { 35 | archives jar, sourcesJar, javadocsJar 36 | } 37 | 38 | repositories { 39 | mavenLocal() 40 | mavenCentral() 41 | maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } 42 | maven { url "https://oss.sonatype.org/content/repositories/releases/" } 43 | maven { url 'https://jitpack.io' } 44 | } 45 | 46 | dependencies { 47 | compile "com.badlogicgames.gdx:gdx:$gdxVersion" 48 | compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" 49 | compile "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion" 50 | compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" 51 | compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop" 52 | compile "com.badlogicgames.gdx:gdx-tools:$gdxVersion" 53 | compile 'com.github.narfman0:jspf:v1.0.2' 54 | compile group: 'com.badlogicgames.box2dlights', name: 'box2dlights', version: '1.4' 55 | compile group: 'org.codehaus.jettison', name: 'jettison', version: '1.2' 56 | compile group: 'com.thoughtworks.xstream', name: 'xstream', version: '1.4.7' 57 | compile group: 'xpp3', name: 'xpp3', version: '1.1.4c' 58 | compile group: 'xmlpull', name: 'xmlpull', version: '1.1.3.1' 59 | testCompile 'junit:junit:4.12' 60 | testCompile 'org.mockito:mockito-all:1.9.5' 61 | } -------------------------------------------------------------------------------- /data/assets/spritesheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/narfman0/GDXWorld/a5e0ca6d9237ccbcf2e710ba8f4aaa8c1b0c2c59/data/assets/spritesheet.png -------------------------------------------------------------------------------- /data/assets/tilemode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/narfman0/GDXWorld/a5e0ca6d9237ccbcf2e710ba8f4aaa8c1b0c2c59/data/assets/tilemode.png -------------------------------------------------------------------------------- /data/assets/tiles_spritesheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/narfman0/GDXWorld/a5e0ca6d9237ccbcf2e710ba8f4aaa8c1b0c2c59/data/assets/tiles_spritesheet.png -------------------------------------------------------------------------------- /data/eclipse/GDXWorldEditor.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /data/eclipse/Hiero.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /data/eclipse/ParticleEditor.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /data/fonts/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/narfman0/GDXWorld/a5e0ca6d9237ccbcf2e710ba8f4aaa8c1b0c2c59/data/fonts/default.png -------------------------------------------------------------------------------- /data/gdxworld.properties: -------------------------------------------------------------------------------- 1 | background.depth.default = 1 2 | background.scale.default = 1 -------------------------------------------------------------------------------- /data/ui/uiskin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/narfman0/GDXWorld/a5e0ca6d9237ccbcf2e710ba8f4aaa8c1b0c2c59/data/ui/uiskin.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/narfman0/GDXWorld/a5e0ca6d9237ccbcf2e710ba8f4aaa8c1b0c2c59/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/math/decomposers/ewjordan/Triangle.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.math.decomposers.ewjordan; 2 | 3 | /** 4 | * 5 | * @author EwJordan (http://www.ewjordan.com/earClip/) 6 | */ 7 | public class Triangle { 8 | public float[] x; 9 | public float[] y; 10 | 11 | public Triangle(float x1, float y1, float x2, float y2, float x3, float y3) { 12 | x = new float[3]; 13 | y = new float[3]; 14 | float dx1 = x2 - x1; 15 | float dx2 = x3 - x1; 16 | float dy1 = y2 - y1; 17 | float dy2 = y3 - y1; 18 | float cross = dx1 * dy2 - dx2 * dy1; 19 | boolean ccw = (cross > 0); 20 | if (ccw) { 21 | x[0] = x1; 22 | x[1] = x2; 23 | x[2] = x3; 24 | y[0] = y1; 25 | y[1] = y2; 26 | y[2] = y3; 27 | } else { 28 | x[0] = x1; 29 | x[1] = x3; 30 | x[2] = x2; 31 | y[0] = y1; 32 | y[1] = y3; 33 | y[2] = y2; 34 | } 35 | } 36 | 37 | public boolean isInside(float _x, float _y) { 38 | float vx2 = _x - x[0]; 39 | float vy2 = _y - y[0]; 40 | float vx1 = x[1] - x[0]; 41 | float vy1 = y[1] - y[0]; 42 | float vx0 = x[2] - x[0]; 43 | float vy0 = y[2] - y[0]; 44 | 45 | float dot00 = vx0 * vx0 + vy0 * vy0; 46 | float dot01 = vx0 * vx1 + vy0 * vy1; 47 | float dot02 = vx0 * vx2 + vy0 * vy2; 48 | float dot11 = vx1 * vx1 + vy1 * vy1; 49 | float dot12 = vx1 * vx2 + vy1 * vy2; 50 | float invDenom = 1f / (dot00 * dot11 - dot01 * dot01); 51 | float u = (dot11 * dot02 - dot01 * dot12) * invDenom; 52 | float v = (dot00 * dot12 - dot01 * dot02) * invDenom; 53 | 54 | return ((u > 0) && (v > 0) && (u + v < 1)); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/physics/CollideCallback.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.physics; 2 | 3 | import com.badlogic.gdx.physics.box2d.Body; 4 | import com.badlogic.gdx.physics.box2d.Fixture; 5 | import com.badlogic.gdx.physics.box2d.QueryCallback; 6 | 7 | public class CollideCallback implements QueryCallback { 8 | private Body body; 9 | 10 | @Override public boolean reportFixture(Fixture fixture) { 11 | body = fixture.getBody(); 12 | return false; 13 | } 14 | 15 | public Body getBody() { 16 | return body; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/animation/AnimationManifestationStruct.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.animation; 2 | 3 | import java.util.List; 4 | 5 | import com.badlogic.gdx.utils.Array; 6 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 7 | 8 | public class AnimationManifestationStruct { 9 | public final AbstractQuestManifestation manifestation; 10 | 11 | public AnimationManifestationStruct(AbstractQuestManifestation manifestation){ 12 | this.manifestation = manifestation; 13 | } 14 | 15 | @Override public String toString(){ 16 | return manifestation.getClass().getSimpleName(); 17 | } 18 | 19 | public static Array create(List handlers){ 20 | AnimationManifestationStruct[] structs = new AnimationManifestationStruct[handlers.size()]; 21 | for(int i = 0; i(structs); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/animation/AnimationMode.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.animation; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.graphics.OrthographicCamera; 6 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 7 | import com.badlogic.gdx.graphics.glutils.ShapeRenderer; 8 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 9 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 10 | import com.blastedstudios.gdxworld.plugin.mode.animation.live.AnimationLiveOptionTable; 11 | import com.blastedstudios.gdxworld.plugin.mode.live.ILiveOptionProvider; 12 | import com.blastedstudios.gdxworld.ui.AbstractWindow; 13 | import com.blastedstudios.gdxworld.ui.GDXRenderer; 14 | import com.blastedstudios.gdxworld.ui.leveleditor.AbstractMode; 15 | import com.blastedstudios.gdxworld.util.IMode; 16 | 17 | @PluginImplementation 18 | public class AnimationMode extends AbstractMode implements IMode, ILiveOptionProvider { 19 | private AnimationLiveOptionTable table; 20 | private AbstractWindow window; 21 | 22 | @Override public void start() { 23 | super.start(); 24 | window = new AnimationsWindow(screen.getSkin(), screen.getLevel().getAnimations(), this, screen); 25 | screen.getStage().addActor(window); 26 | } 27 | 28 | @Override public int getLoadPriority() { 29 | return 150; 30 | } 31 | 32 | @Override public boolean contains(float x, float y) { 33 | return window.contains(x, y); 34 | } 35 | 36 | @Override public void clean() { 37 | if(window != null) 38 | window.remove(); 39 | window = null; 40 | table = null;//if we go out of live mode we should get a new table in case there are new animations 41 | } 42 | 43 | @Override public Table getTable(Skin skin, AbstractWindow window) { 44 | if(table == null) 45 | table = new AnimationLiveOptionTable(skin, this, window); 46 | return table; 47 | } 48 | 49 | @Override public void render(float delta, SpriteBatch spriteBatch, OrthographicCamera camera, GDXRenderer gdxRenderer, ShapeRenderer renderer){ 50 | if(table != null) 51 | table.render(delta); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/animation/live/AnimationLiveQuestExecutor.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.animation.live; 2 | 3 | import com.badlogic.gdx.physics.box2d.Body; 4 | import com.badlogic.gdx.physics.box2d.Joint; 5 | import com.badlogic.gdx.physics.box2d.World; 6 | import com.blastedstudios.gdxworld.ui.leveleditor.LevelEditorScreen; 7 | import com.blastedstudios.gdxworld.util.IMode; 8 | import com.blastedstudios.gdxworld.world.quest.manifestation.IQuestManifestationExecutor; 9 | 10 | public class AnimationLiveQuestExecutor implements IQuestManifestationExecutor{ 11 | private final LevelEditorScreen screen; 12 | 13 | public AnimationLiveQuestExecutor(LevelEditorScreen screen){ 14 | this.screen = screen; 15 | } 16 | 17 | @Override public Body getPhysicsObject(String name) { 18 | for(IMode mode : screen.getModes()){ 19 | Body body = mode.getPhysicsBody(name); 20 | if(body != null) 21 | return body; 22 | } 23 | return null; 24 | } 25 | 26 | @Override public Joint getPhysicsJoint(String name) { 27 | for(IMode mode : screen.getModes()){ 28 | Joint joint = mode.getPhysicsJoint(name); 29 | if(joint != null) 30 | return joint; 31 | } 32 | return null; 33 | } 34 | 35 | @Override public World getWorld() { 36 | return screen.getWorld(); 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/animation/live/SelectboxGDXAnimationHandlerStruct.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.animation.live; 2 | 3 | import java.util.List; 4 | 5 | import com.badlogic.gdx.utils.Array; 6 | import com.blastedstudios.gdxworld.world.animation.GDXAnimationHandler; 7 | 8 | public class SelectboxGDXAnimationHandlerStruct { 9 | public final GDXAnimationHandler handler; 10 | 11 | public SelectboxGDXAnimationHandlerStruct(GDXAnimationHandler handler){ 12 | this.handler = handler; 13 | } 14 | 15 | @Override public String toString(){ 16 | return "Handler for " + handler.getAnimations().getName(); 17 | } 18 | 19 | public static Array create(List handlers){ 20 | SelectboxGDXAnimationHandlerStruct[] structs = new SelectboxGDXAnimationHandlerStruct[handlers.size()]; 21 | for(int i = 0; i(structs); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/animation/live/SelectboxGDXAnimationStruct.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.animation.live; 2 | 3 | import java.util.List; 4 | 5 | import com.badlogic.gdx.utils.Array; 6 | import com.blastedstudios.gdxworld.world.animation.GDXAnimation; 7 | 8 | public class SelectboxGDXAnimationStruct { 9 | public final GDXAnimation animation; 10 | 11 | public SelectboxGDXAnimationStruct(GDXAnimation animation){ 12 | this.animation = animation; 13 | } 14 | 15 | @Override public String toString(){ 16 | return animation.getName(); 17 | } 18 | 19 | public static Array create(List animations){ 20 | SelectboxGDXAnimationStruct[] structs = new SelectboxGDXAnimationStruct[animations.size()]; 21 | for(int i = 0; i(structs); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/background/BackgroundChooserWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.background; 2 | 3 | import com.badlogic.gdx.Gdx; 4 | import com.badlogic.gdx.scenes.scene2d.InputEvent; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Button; 6 | import com.badlogic.gdx.scenes.scene2d.ui.List; 7 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 8 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 9 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton; 10 | import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; 11 | import com.blastedstudios.gdxworld.ui.AbstractWindow; 12 | import com.blastedstudios.gdxworld.world.GDXBackground; 13 | 14 | public class BackgroundChooserWindow extends AbstractWindow{ 15 | public BackgroundChooserWindow(final Skin skin, final BackgroundMode mode, 16 | final java.util.List backgrounds) { 17 | super("Background Chooser", skin); 18 | final List backgroundList = new List(skin); 19 | backgroundList.setItems(backgrounds.toArray(new GDXBackground[backgrounds.size()])); 20 | 21 | final Button selectButton = new TextButton("Select", skin); 22 | final Button cancelButton = new TextButton("Cancel", skin); 23 | selectButton.addListener(new ClickListener() { 24 | @Override public void clicked(InputEvent event, float x, float y) { 25 | mode.clean(); 26 | mode.touchBegin(backgrounds.get(backgroundList.getSelectedIndex())); 27 | } 28 | }); 29 | cancelButton.addListener(new ClickListener() { 30 | @Override public void clicked(InputEvent event, float x, float y) { 31 | mode.clean(); 32 | } 33 | }); 34 | 35 | add(backgroundList); 36 | row(); 37 | Table controlTable = new Table(); 38 | controlTable.add(selectButton); 39 | controlTable.add(cancelButton); 40 | add(controlTable).colspan(2); 41 | pack(); 42 | setMovable(false); 43 | setX(Gdx.graphics.getWidth()); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/chain/ChainMode.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.chain; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.graphics.OrthographicCamera; 6 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 7 | import com.badlogic.gdx.graphics.glutils.ShapeRenderer; 8 | import com.blastedstudios.gdxworld.ui.GDXRenderer; 9 | import com.blastedstudios.gdxworld.ui.leveleditor.AbstractMode; 10 | 11 | @PluginImplementation 12 | public class ChainMode extends AbstractMode { 13 | private ChainWindow window; 14 | 15 | public void start() { 16 | screen.getStage().addActor(window = new ChainWindow(screen.getSkin(), screen.getLevel())); 17 | } 18 | 19 | @Override public void clean() { 20 | if(window != null) 21 | window.remove(); 22 | window = null; 23 | } 24 | 25 | public boolean touchDown(int x, int y, int x1, int y1){ 26 | super.touchDown(x, y, x1, y1); 27 | if(!window.contains(x, y)) 28 | window.touched(coordinates.x, coordinates.y); 29 | return false; 30 | } 31 | 32 | public boolean touchDragged(int x, int y, int ptr){ 33 | super.touchDragged(x, y, ptr); 34 | if(!window.contains(x, y)) 35 | window.touched(coordinates.x, coordinates.y); 36 | return false; 37 | } 38 | 39 | public boolean touchUp(int x, int y, int arg2, int arg3){ 40 | super.touchUp(x, y, arg2, arg3); 41 | if(!window.contains(x, y)) 42 | window.touched(coordinates.x, coordinates.y); 43 | return false; 44 | } 45 | 46 | @Override public void render(float delta, SpriteBatch spriteBatch, OrthographicCamera camera, GDXRenderer gdxRenderer, ShapeRenderer renderer){ 47 | if(window != null) 48 | window.render(delta, camera); 49 | } 50 | 51 | @Override public int getLoadPriority() { 52 | return 70; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/chain/RectangleTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.chain; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 8 | import com.blastedstudios.gdxworld.plugin.mode.polygon.ShapeTable; 9 | import com.blastedstudios.gdxworld.util.Properties; 10 | import com.blastedstudios.gdxworld.world.shape.GDXPolygon; 11 | 12 | public class RectangleTable extends Table { 13 | private final TextField heightField, widthField; 14 | private final ShapeTable shapeTable; 15 | 16 | public RectangleTable(Skin skin, GDXPolygon polygon){ 17 | widthField = new TextField(getDefaultWidth()+"", skin); 18 | widthField.setMessageText(""); 19 | heightField = new TextField(getDefaultHeight()+"", skin); 20 | heightField.setMessageText(""); 21 | shapeTable = new ShapeTable(skin, polygon); 22 | 23 | add(new Label("Width: ", skin)); 24 | add(widthField); 25 | row(); 26 | add(new Label("Height: ", skin)); 27 | add(heightField); 28 | row(); 29 | add(shapeTable).colspan(2); 30 | } 31 | 32 | public void apply(GDXPolygon polygon){ 33 | float x = parseWidth()/2f, y = parseHeight()/2f; 34 | polygon.getVertices().add(new Vector2(-x, y)); 35 | polygon.getVertices().add(new Vector2(x, y)); 36 | polygon.getVertices().add(new Vector2(x, -y)); 37 | polygon.getVertices().add(new Vector2(-x, -y)); 38 | shapeTable.apply(polygon); 39 | } 40 | 41 | public float parseWidth(){ 42 | try{ 43 | return Float.parseFloat(widthField.getText()); 44 | }catch(Exception e){ 45 | return getDefaultWidth(); 46 | } 47 | } 48 | 49 | public float parseHeight(){ 50 | try{ 51 | return Float.parseFloat(heightField.getText()); 52 | }catch(Exception e){ 53 | return getDefaultHeight(); 54 | } 55 | } 56 | 57 | private static float getDefaultWidth(){ 58 | return Properties.getFloat("level.chain.rectangle.width",.3f); 59 | } 60 | 61 | private static float getDefaultHeight(){ 62 | return Properties.getFloat("level.chain.rectangle.height",.1f); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/circle/CircleTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.circle; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.plugin.mode.polygon.ShapeTable; 8 | import com.blastedstudios.gdxworld.world.shape.GDXCircle; 9 | 10 | /** 11 | * Contain the minimum information to represent a circle 12 | */ 13 | public class CircleTable extends Table { 14 | private final TextField radiusField; 15 | private final ShapeTable shapeTable; 16 | 17 | public CircleTable(Skin skin, GDXCircle circle){ 18 | radiusField = new TextField(circle.getRadius()+"", skin); 19 | radiusField.setMessageText(""); 20 | shapeTable = new ShapeTable(skin, circle); 21 | 22 | add(new Label("Radius: ", skin)); 23 | add(radiusField); 24 | row(); 25 | add(shapeTable).colspan(2); 26 | } 27 | 28 | public float getRadius(){ 29 | try{ 30 | return Float.parseFloat(radiusField.getText()); 31 | }catch(Exception e){ 32 | return 1f; 33 | } 34 | } 35 | 36 | public GDXCircle apply(GDXCircle circle){ 37 | circle.setRadius(getRadius()); 38 | shapeTable.apply(circle); 39 | return circle; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/IJointWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | 5 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.blastedstudios.gdxworld.world.joint.GDXJoint; 8 | 9 | public interface IJointWindow extends Plugin{ 10 | public JointType getJointType(); 11 | public T createJoint(T joint); 12 | public BaseJointWindow createJointWindow(Skin skin, JointMode mode, T joint); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/distance/DistancePlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.distance; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 8 | import com.blastedstudios.gdxworld.plugin.mode.joint.IJointWindow; 9 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 10 | import com.blastedstudios.gdxworld.world.joint.DistanceJoint; 11 | 12 | @PluginImplementation 13 | public class DistancePlugin implements IJointWindow{ 14 | @Override public JointType getJointType() { 15 | return JointType.DistanceJoint; 16 | } 17 | 18 | @Override public DistanceJoint createJoint(DistanceJoint joint) { 19 | return joint == null ? new DistanceJoint() : joint; 20 | } 21 | 22 | @Override public BaseJointWindow createJointWindow(Skin skin, JointMode mode, DistanceJoint joint) { 23 | return new DistanceWindow(skin, mode, joint); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/distance/DistanceWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.distance; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 8 | import com.blastedstudios.gdxworld.world.GDXLevel; 9 | import com.blastedstudios.gdxworld.world.joint.DistanceJoint; 10 | 11 | class DistanceWindow extends BaseJointWindow { 12 | private final DistanceJoint joint; 13 | private final DistanceTable table; 14 | 15 | public DistanceWindow(Skin skin, JointMode mode, DistanceJoint joint) { 16 | super("Distance Editor", skin, JointType.WeldJoint, mode, joint); 17 | this.joint = joint; 18 | add(table = new DistanceTable(skin, joint)).colspan(2); 19 | row(); 20 | add(createControlTable()).colspan(2); 21 | pack(); 22 | } 23 | 24 | @Override public void apply(){ 25 | table.apply(joint); 26 | } 27 | 28 | @Override public boolean clicked(Vector2 pos, GDXLevel level) { 29 | return table.clicked(pos, level); 30 | } 31 | 32 | @Override public Vector2 getCenter() { 33 | return table.getCenter(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/gear/GearPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.gear; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 8 | import com.blastedstudios.gdxworld.plugin.mode.joint.IJointWindow; 9 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 10 | import com.blastedstudios.gdxworld.world.joint.GearJoint; 11 | 12 | @PluginImplementation 13 | public class GearPlugin implements IJointWindow{ 14 | @Override public JointType getJointType() { 15 | return JointType.GearJoint; 16 | } 17 | 18 | @Override public GearJoint createJoint(GearJoint joint) { 19 | return joint == null ? new GearJoint() : joint; 20 | } 21 | 22 | @Override public BaseJointWindow createJointWindow(Skin skin, JointMode mode, GearJoint joint) { 23 | return new GearWindow(skin, mode, joint); 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/gear/GearTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.gear; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointTable; 8 | import com.blastedstudios.gdxworld.ui.leveleditor.VertexTable; 9 | import com.blastedstudios.gdxworld.world.GDXLevel; 10 | import com.blastedstudios.gdxworld.world.joint.GearJoint; 11 | 12 | public class GearTable extends BaseJointTable { 13 | private final VertexTable centerTable; 14 | private final TextField ratioField, joint1Field, joint2Field; 15 | 16 | public GearTable(Skin skin, GearJoint joint){ 17 | super(skin, joint, JointType.GearJoint); 18 | centerTable = new VertexTable(joint.getCenter(), skin); 19 | ratioField = new TextField(joint.getRatio()+"", skin); 20 | ratioField.setMessageText(""); 21 | joint1Field = new TextField(joint.getJoint1(), skin); 22 | joint1Field.setMessageText(""); 23 | joint2Field = new TextField(joint.getJoint2(), skin); 24 | joint2Field.setMessageText(""); 25 | add("Center: "); 26 | add(centerTable); 27 | row(); 28 | add("Joint 1: "); 29 | add(joint1Field); 30 | row(); 31 | add("Joint 2: "); 32 | add(joint2Field); 33 | row(); 34 | add("Ratio: "); 35 | add(ratioField); 36 | } 37 | 38 | public void apply(GearJoint joint){ 39 | super.apply(joint); 40 | joint.setCenter(centerTable.getVertex()); 41 | joint.setRatio(Float.parseFloat(ratioField.getText())); 42 | joint.setJoint1(joint1Field.getText()); 43 | joint.setJoint2(joint2Field.getText()); 44 | } 45 | 46 | @Override public boolean clicked(Vector2 pos, GDXLevel level) { 47 | if(!super.clicked(pos, level)) 48 | centerTable.setVertex(pos.x, pos.y); 49 | return true; 50 | } 51 | 52 | @Override public Vector2 getCenter() { 53 | return centerTable.getVertex(); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/gear/GearWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.gear; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 8 | import com.blastedstudios.gdxworld.world.GDXLevel; 9 | import com.blastedstudios.gdxworld.world.joint.GearJoint; 10 | 11 | public class GearWindow extends BaseJointWindow { 12 | private final GearJoint joint; 13 | private final GearTable table; 14 | 15 | public GearWindow(Skin skin, JointMode mode, GearJoint joint){ 16 | super("Gear Editor", skin, JointType.GearJoint, mode, joint); 17 | this.joint = joint; 18 | add(table = new GearTable(skin, joint)).colspan(2); 19 | row(); 20 | add(createControlTable()).colspan(2); 21 | pack(); 22 | } 23 | 24 | @Override public void apply(){ 25 | table.apply(joint); 26 | } 27 | 28 | @Override public boolean clicked(Vector2 pos, GDXLevel level) { 29 | return table.clicked(pos, level); 30 | } 31 | 32 | @Override public Vector2 getCenter() { 33 | return table.getCenter(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/prismatic/PrismaticPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.prismatic; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 8 | import com.blastedstudios.gdxworld.plugin.mode.joint.IJointWindow; 9 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 10 | import com.blastedstudios.gdxworld.world.joint.PrismaticJoint; 11 | 12 | @PluginImplementation 13 | public class PrismaticPlugin implements IJointWindow{ 14 | @Override public JointType getJointType() { 15 | return JointType.PrismaticJoint; 16 | } 17 | 18 | @Override public PrismaticJoint createJoint(PrismaticJoint joint) { 19 | return joint == null ? new PrismaticJoint() : joint; 20 | } 21 | 22 | @Override public BaseJointWindow createJointWindow(Skin skin, JointMode mode, PrismaticJoint joint) { 23 | return new PrismaticWindow(skin, mode, joint); 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/revolute/RevolutePlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.revolute; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 8 | import com.blastedstudios.gdxworld.plugin.mode.joint.IJointWindow; 9 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 10 | import com.blastedstudios.gdxworld.world.joint.RevoluteJoint; 11 | 12 | @PluginImplementation 13 | public class RevolutePlugin implements IJointWindow{ 14 | @Override public JointType getJointType() { 15 | return JointType.RevoluteJoint; 16 | } 17 | 18 | @Override public RevoluteJoint createJoint(RevoluteJoint joint) { 19 | return joint == null ? new RevoluteJoint() : joint; 20 | } 21 | 22 | @Override public BaseJointWindow createJointWindow(Skin skin, JointMode mode, RevoluteJoint joint) { 23 | return new RevoluteWindow(skin, mode, joint); 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/revolute/RevoluteWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.revolute; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 8 | import com.blastedstudios.gdxworld.world.GDXLevel; 9 | import com.blastedstudios.gdxworld.world.joint.RevoluteJoint; 10 | 11 | class RevoluteWindow extends BaseJointWindow { 12 | private final RevoluteJoint joint; 13 | private final RevoluteTable table; 14 | 15 | public RevoluteWindow(Skin skin, JointMode mode, RevoluteJoint joint) { 16 | super("Revolute Editor", skin, JointType.RevoluteJoint, mode, joint); 17 | this.joint = joint; 18 | add(table = new RevoluteTable(skin, joint)).colspan(2); 19 | row(); 20 | add(createControlTable()).colspan(2); 21 | pack(); 22 | } 23 | 24 | @Override public void apply(){ 25 | table.apply(joint); 26 | } 27 | 28 | @Override public boolean clicked(Vector2 pos, GDXLevel level) { 29 | return table.clicked(pos, level); 30 | } 31 | 32 | @Override public Vector2 getCenter() { 33 | return table.getCenter(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/rope/RopePlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.rope; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 8 | import com.blastedstudios.gdxworld.plugin.mode.joint.IJointWindow; 9 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 10 | import com.blastedstudios.gdxworld.world.joint.RopeJoint; 11 | 12 | @PluginImplementation 13 | public class RopePlugin implements IJointWindow{ 14 | @Override public JointType getJointType() { 15 | return JointType.RopeJoint; 16 | } 17 | 18 | @Override public RopeJoint createJoint(RopeJoint joint) { 19 | return joint == null ? new RopeJoint() : joint; 20 | } 21 | 22 | @Override public BaseJointWindow createJointWindow(Skin skin, JointMode mode, RopeJoint joint) { 23 | return new RopeWindow(skin, mode, joint); 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/rope/RopeTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.rope; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointTable; 8 | import com.blastedstudios.gdxworld.ui.leveleditor.VertexTable; 9 | import com.blastedstudios.gdxworld.world.GDXLevel; 10 | import com.blastedstudios.gdxworld.world.joint.RopeJoint; 11 | 12 | public class RopeTable extends BaseJointTable { 13 | private final VertexTable centerTable; 14 | private final TextField maxLengthField; 15 | 16 | public RopeTable(Skin skin, RopeJoint joint){ 17 | super(skin, joint, JointType.RopeJoint); 18 | centerTable = new VertexTable(joint.getCenter(), skin); 19 | maxLengthField = new TextField(joint.getMaxLength()+"", skin); 20 | maxLengthField.setMessageText(""); 21 | add("Center: "); 22 | add(centerTable); 23 | row(); 24 | add("Max Length: "); 25 | add(maxLengthField); 26 | } 27 | 28 | public void apply(RopeJoint joint){ 29 | super.apply(joint); 30 | joint.setCenter(centerTable.getVertex()); 31 | joint.setMaxLength(Float.parseFloat(maxLengthField.getText())); 32 | } 33 | 34 | @Override public boolean clicked(Vector2 pos, GDXLevel level) { 35 | if(!super.clicked(pos, level)) 36 | centerTable.setVertex(pos.x, pos.y); 37 | return true; 38 | } 39 | 40 | @Override public Vector2 getCenter() { 41 | return centerTable.getVertex(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/rope/RopeWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.rope; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 8 | import com.blastedstudios.gdxworld.world.GDXLevel; 9 | import com.blastedstudios.gdxworld.world.joint.RopeJoint; 10 | 11 | class RopeWindow extends BaseJointWindow { 12 | private final RopeJoint joint; 13 | private final RopeTable table; 14 | 15 | public RopeWindow(Skin skin, JointMode mode, RopeJoint joint) { 16 | super("Rope Editor", skin, JointType.RopeJoint, mode, joint); 17 | this.joint = joint; 18 | add(table = new RopeTable(skin, joint)).colspan(2); 19 | row(); 20 | add(createControlTable()).colspan(2); 21 | pack(); 22 | } 23 | 24 | @Override public void apply(){ 25 | table.apply(joint); 26 | } 27 | 28 | @Override public boolean clicked(Vector2 pos, GDXLevel level) { 29 | return table.clicked(pos, level); 30 | } 31 | 32 | @Override public Vector2 getCenter() { 33 | return table.getCenter(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/weld/WeldPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.weld; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 8 | import com.blastedstudios.gdxworld.plugin.mode.joint.IJointWindow; 9 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 10 | import com.blastedstudios.gdxworld.world.joint.WeldJoint; 11 | 12 | @PluginImplementation 13 | public class WeldPlugin implements IJointWindow{ 14 | @Override public JointType getJointType() { 15 | return JointType.WeldJoint; 16 | } 17 | 18 | @Override public WeldJoint createJoint(WeldJoint joint) { 19 | return joint == null ? new WeldJoint() : joint; 20 | } 21 | 22 | @Override public BaseJointWindow createJointWindow(Skin skin, JointMode mode, WeldJoint joint) { 23 | return new WeldWindow(skin, mode, joint); 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/weld/WeldTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.weld; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointTable; 8 | import com.blastedstudios.gdxworld.ui.leveleditor.VertexTable; 9 | import com.blastedstudios.gdxworld.world.GDXLevel; 10 | import com.blastedstudios.gdxworld.world.joint.WeldJoint; 11 | 12 | public class WeldTable extends BaseJointTable { 13 | private final VertexTable anchorTable; 14 | private final TextField referenceAngleField; 15 | 16 | public WeldTable(Skin skin, WeldJoint joint){ 17 | super(skin, joint, JointType.WeldJoint); 18 | anchorTable = new VertexTable(joint.getAnchor(), skin); 19 | referenceAngleField = new TextField(joint.getReferenceAngle()+"", skin); 20 | referenceAngleField.setMessageText(""); 21 | add("Anchor: "); 22 | add(anchorTable); 23 | row(); 24 | add("Reference Angle: "); 25 | add(referenceAngleField); 26 | } 27 | 28 | public void apply(WeldJoint joint){ 29 | super.apply(joint); 30 | joint.setAnchor(anchorTable.getVertex()); 31 | joint.setReferenceAngle(Float.parseFloat(referenceAngleField.getText())); 32 | } 33 | 34 | @Override public boolean clicked(Vector2 pos, GDXLevel level) { 35 | if(!super.clicked(pos, level)) 36 | anchorTable.setVertex(pos.x, pos.y); 37 | return true; 38 | } 39 | 40 | @Override public Vector2 getCenter() { 41 | return anchorTable.getVertex(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/weld/WeldWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.weld; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 8 | import com.blastedstudios.gdxworld.world.GDXLevel; 9 | import com.blastedstudios.gdxworld.world.joint.WeldJoint; 10 | 11 | class WeldWindow extends BaseJointWindow { 12 | private final WeldJoint joint; 13 | private final WeldTable table; 14 | 15 | public WeldWindow(Skin skin, JointMode mode, WeldJoint joint) { 16 | super("Weld Editor", skin, JointType.WeldJoint, mode, joint); 17 | this.joint = joint; 18 | add(table = new WeldTable(skin, joint)).colspan(2); 19 | row(); 20 | add(createControlTable()).colspan(2); 21 | pack(); 22 | } 23 | 24 | @Override public void apply(){ 25 | table.apply(joint); 26 | } 27 | 28 | @Override public boolean clicked(Vector2 pos, GDXLevel level) { 29 | return table.clicked(pos, level); 30 | } 31 | 32 | @Override public Vector2 getCenter() { 33 | return table.getCenter(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/wheel/WheelPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.wheel; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 8 | import com.blastedstudios.gdxworld.plugin.mode.joint.IJointWindow; 9 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 10 | import com.blastedstudios.gdxworld.world.joint.WheelJoint; 11 | 12 | @PluginImplementation 13 | public class WheelPlugin implements IJointWindow{ 14 | @Override public JointType getJointType() { 15 | return JointType.WheelJoint; 16 | } 17 | 18 | @Override public WheelJoint createJoint(WheelJoint joint) { 19 | return joint == null ? new WheelJoint() : joint; 20 | } 21 | 22 | @Override public BaseJointWindow createJointWindow(Skin skin, JointMode mode, WheelJoint joint) { 23 | return new WheelWindow(skin, mode, joint); 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/joint/window/wheel/WheelWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.joint.window.wheel; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.physics.box2d.JointDef.JointType; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.blastedstudios.gdxworld.plugin.mode.joint.BaseJointWindow; 7 | import com.blastedstudios.gdxworld.plugin.mode.joint.JointMode; 8 | import com.blastedstudios.gdxworld.world.GDXLevel; 9 | import com.blastedstudios.gdxworld.world.joint.WheelJoint; 10 | 11 | public class WheelWindow extends BaseJointWindow{ 12 | private final WheelJoint joint; 13 | private final WheelJointTable table; 14 | 15 | public WheelWindow(Skin skin, JointMode mode, WheelJoint joint) { 16 | super("Wheel Editor", skin, JointType.WheelJoint, mode, joint); 17 | this.joint = joint; 18 | table = new WheelJointTable(skin, joint); 19 | add(table).colspan(2); 20 | row(); 21 | add(createControlTable()).colspan(2); 22 | pack(); 23 | } 24 | 25 | @Override public void apply(){ 26 | table.apply(joint); 27 | } 28 | 29 | @Override public boolean clicked(Vector2 pos, GDXLevel level) { 30 | return table.clicked(pos, level); 31 | } 32 | 33 | @Override public Vector2 getCenter() { 34 | return table.getCenter(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/light/ColorTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.light; 2 | 3 | import com.badlogic.gdx.graphics.Color; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.plugin.mode.light.typetable.AbstractLightTable; 8 | 9 | public class ColorTable extends Table { 10 | private final TextField rLabel, gLabel, bLabel, aLabel; 11 | 12 | public ColorTable(final Color color, final Skin skin){ 13 | rLabel = new TextField(color.r+"", skin); 14 | gLabel = new TextField(color.g+"", skin); 15 | bLabel = new TextField(color.b+"", skin); 16 | aLabel = new TextField(color.a+"", skin); 17 | rLabel.setMessageText(""); 18 | gLabel.setMessageText(""); 19 | bLabel.setMessageText(""); 20 | aLabel.setMessageText(""); 21 | add(rLabel).width(AbstractLightTable.WIDTH); 22 | add(gLabel).width(AbstractLightTable.WIDTH); 23 | add(bLabel).width(AbstractLightTable.WIDTH); 24 | add(aLabel).width(AbstractLightTable.WIDTH); 25 | } 26 | 27 | public Color parseColor(){ 28 | return new Color(Float.parseFloat(rLabel.getText()), Float.parseFloat(gLabel.getText()), 29 | Float.parseFloat(bLabel.getText()), Float.parseFloat(aLabel.getText())); 30 | } 31 | 32 | public void applyColor(Color color){ 33 | rLabel.setText(color.r+""); 34 | gLabel.setText(color.g+""); 35 | bLabel.setText(color.b+""); 36 | aLabel.setText(color.a+""); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/light/typetable/AbstractLightTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.light.typetable; 2 | 3 | import com.badlogic.gdx.graphics.Color; 4 | import com.badlogic.gdx.scenes.scene2d.InputEvent; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Button; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 7 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 8 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 9 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton; 10 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 11 | import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; 12 | import com.blastedstudios.gdxworld.plugin.mode.light.ColorTable; 13 | import com.blastedstudios.gdxworld.plugin.mode.light.LightWindow; 14 | import com.blastedstudios.gdxworld.world.light.GDXLight; 15 | 16 | public abstract class AbstractLightTable extends Table { 17 | public static int WIDTH = 50; 18 | private final Skin skin; 19 | protected final ColorTable colorTable; 20 | protected final TextField raysField; 21 | protected final Button selectButton; 22 | 23 | public AbstractLightTable(Skin skin, final LightWindow lightWindow, 24 | Color color, int rays){ 25 | this.skin = skin; 26 | colorTable = new ColorTable(color, skin); 27 | raysField = new TextField(rays+"", skin); 28 | raysField.setMessageText(""); 29 | final AbstractLightTable selected = this; 30 | selectButton = new TextButton("Select", skin); 31 | selectButton.addListener(new ClickListener() { 32 | @Override public void clicked(InputEvent event, float x, float y) { 33 | lightWindow.setSelected(selected); 34 | } 35 | }); 36 | } 37 | 38 | protected void init(){ 39 | add(selectButton); 40 | add(new Label("Color: ", skin)); 41 | add(colorTable); 42 | add(new Label("Rays: ", skin)); 43 | add(raysField).width(WIDTH); 44 | } 45 | 46 | public abstract GDXLight create(); 47 | 48 | protected GDXLight create(GDXLight light){ 49 | light.setColor(GDXLight.convert(colorTable.parseColor())); 50 | light.setRays(Integer.parseInt(raysField.getText())); 51 | return light; 52 | } 53 | 54 | public abstract void setCoordinates(float x, float y); 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/light/typetable/DirectionalLightTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.light.typetable; 2 | 3 | import com.badlogic.gdx.graphics.Color; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.plugin.mode.light.LightWindow; 8 | import com.blastedstudios.gdxworld.world.light.DirectionalLight; 9 | import com.blastedstudios.gdxworld.world.light.GDXLight; 10 | 11 | public class DirectionalLightTable extends AbstractLightTable { 12 | private TextField directionField; 13 | 14 | public DirectionalLightTable(final Skin skin, LightWindow lightWindow, Color color, int rays, float direction){ 15 | super(skin, lightWindow, color, rays); 16 | add(new Label("Type: Directional", skin)); 17 | init(); 18 | add(new Label("Direction: ", skin)); 19 | add(directionField = new TextField(direction+"", skin)).width(AbstractLightTable.WIDTH); 20 | directionField.setMessageText(""); 21 | } 22 | 23 | @Override public GDXLight create() { 24 | DirectionalLight light = new DirectionalLight(); 25 | light.setDirection(Float.parseFloat(directionField.getText())); 26 | return super.create(light); 27 | } 28 | 29 | @Override public void setCoordinates(float x, float y) {} 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/light/typetable/PointLightTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.light.typetable; 2 | 3 | import com.badlogic.gdx.graphics.Color; 4 | import com.badlogic.gdx.math.Vector2; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 8 | import com.blastedstudios.gdxworld.plugin.mode.light.LightWindow; 9 | import com.blastedstudios.gdxworld.ui.leveleditor.VertexTable; 10 | import com.blastedstudios.gdxworld.world.light.GDXLight; 11 | import com.blastedstudios.gdxworld.world.light.PointLight; 12 | 13 | public class PointLightTable extends AbstractLightTable { 14 | private TextField distanceField; 15 | private VertexTable coordinatesTable; 16 | 17 | public PointLightTable(final Skin skin, LightWindow lightWindow, 18 | Color color, int rays, float distance, Vector2 coordinates){ 19 | super(skin, lightWindow, color, rays); 20 | distanceField = new TextField(distance+"", skin); 21 | coordinatesTable = new VertexTable(coordinates, skin, null, AbstractLightTable.WIDTH); 22 | add(new Label("Type: Point", skin)); 23 | init(); 24 | add(new Label("Distance: ", skin)); 25 | add(distanceField).width(AbstractLightTable.WIDTH); 26 | distanceField.setMessageText(""); 27 | add(new Label("Coordinates: ", skin)); 28 | add(coordinatesTable); 29 | } 30 | 31 | @Override public GDXLight create() { 32 | PointLight light = new PointLight(); 33 | light.setCoordinates(coordinatesTable.getVertex()); 34 | light.setDistance(Float.parseFloat(distanceField.getText())); 35 | return super.create(light); 36 | } 37 | 38 | @Override public void setCoordinates(float x, float y) { 39 | coordinatesTable.setVertex(x, y); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/live/ILiveOptionProvider.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.live; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | import net.xeoh.plugins.base.annotations.PluginImplementation; 5 | 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 8 | import com.blastedstudios.gdxworld.ui.AbstractWindow; 9 | 10 | @PluginImplementation 11 | public interface ILiveOptionProvider extends Plugin{ 12 | Table getTable(Skin skin, AbstractWindow window); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/live/LiveOptionSelectboxStruct.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.live; 2 | 3 | import java.util.List; 4 | 5 | import com.badlogic.gdx.utils.Array; 6 | 7 | class LiveOptionSelectboxStruct { 8 | public final ILiveOptionProvider object; 9 | 10 | public LiveOptionSelectboxStruct(ILiveOptionProvider mode){ 11 | this.object = mode; 12 | } 13 | 14 | @Override public String toString(){ 15 | return object.getClass().getSimpleName(); 16 | } 17 | 18 | public static Array create(List handlers){ 19 | LiveOptionSelectboxStruct[] structs = new LiveOptionSelectboxStruct[handlers.size()]; 20 | for(int i = 0; i(structs); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/live/LiveWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.live; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collection; 5 | import java.util.HashMap; 6 | 7 | import com.badlogic.gdx.scenes.scene2d.Actor; 8 | import com.badlogic.gdx.scenes.scene2d.ui.SelectBox; 9 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 10 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 11 | import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; 12 | import com.blastedstudios.gdxworld.ui.AbstractWindow; 13 | import com.blastedstudios.gdxworld.util.PluginUtil; 14 | 15 | class LiveWindow extends AbstractWindow { 16 | private final HashMap tableMap = new HashMap<>(); 17 | private final Table table; 18 | 19 | public LiveWindow(final Skin skin) { 20 | super("Live Options", skin); 21 | table = new Table(skin); 22 | Collection providers = PluginUtil.getPlugins(ILiveOptionProvider.class); 23 | for(ILiveOptionProvider provider : providers) 24 | tableMap.put(provider, provider.getTable(skin, this)); 25 | 26 | final SelectBox liveOptionsSelectbox = new SelectBox<>(skin); 27 | liveOptionsSelectbox.setItems(LiveOptionSelectboxStruct.create(new ArrayList<>(providers))); 28 | liveOptionsSelectbox.addListener(new ChangeListener() { 29 | @Override public void changed(ChangeEvent event, Actor actor) { 30 | update(skin, tableMap.get(liveOptionsSelectbox.getSelected().object)); 31 | } 32 | }); 33 | add(liveOptionsSelectbox); 34 | row(); 35 | add(table); 36 | setMovable(false); 37 | if(!providers.isEmpty()) 38 | update(skin, tableMap.get(liveOptionsSelectbox.getSelected().object)); 39 | } 40 | 41 | private void update(Skin skin, Table optionTable){ 42 | table.clear(); 43 | table.add(optionTable); 44 | pack(); 45 | setPosition(0f, 0f); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/metadata/MetadataMode.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.metadata; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.blastedstudios.gdxworld.ui.leveleditor.AbstractMode; 6 | import com.blastedstudios.gdxworld.util.IMode; 7 | 8 | @PluginImplementation 9 | public class MetadataMode extends AbstractMode implements IMode { 10 | private MetadataWindow window; 11 | 12 | @Override public boolean contains(float x, float y) { 13 | return window.contains(x, y); 14 | } 15 | 16 | @Override public void clean() { 17 | if(window != null) 18 | window.remove(); 19 | window = null; 20 | } 21 | 22 | @Override public void start() { 23 | super.start(); 24 | window = new MetadataWindow(screen.getSkin(), screen.getLevel().getMetadata(), this, screen); 25 | screen.getStage().addActor(window); 26 | } 27 | 28 | @Override public boolean touchDown(int x, int y, int x1, int y1){ 29 | super.touchDown(x, y, x1, y1); 30 | window.touched(coordinates.x, coordinates.y); 31 | return false; 32 | } 33 | 34 | @Override public boolean touchDragged(int x, int y, int ptr){ 35 | super.touchDragged(x, y, ptr); 36 | window.touched(coordinates.x, coordinates.y); 37 | return false; 38 | } 39 | 40 | @Override public boolean touchUp(int x, int y, int arg2, int arg3){ 41 | super.touchUp(x, y, arg2, arg3); 42 | window.touched(coordinates.x, coordinates.y); 43 | return false; 44 | } 45 | 46 | @Override public int getLoadPriority() { 47 | return 130; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/npc/NPCPropertyTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.npc; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map.Entry; 5 | 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 8 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 9 | import com.blastedstudios.gdxworld.world.GDXNPC; 10 | 11 | public class NPCPropertyTable extends Table { 12 | private final HashMap properties = new HashMap<>(); 13 | private final GDXNPC npc; 14 | 15 | public NPCPropertyTable(final Skin skin, final GDXNPC npc){ 16 | super(skin); 17 | this.npc = npc; 18 | for(Entry entry : npc.getProperties().entrySet()){ 19 | add(entry.getKey() + ": "); 20 | final TextField propertyField = new TextField("", skin); 21 | propertyField.setMessageText("<" + entry.getKey() + ">"); 22 | if(entry.getValue() != null) 23 | propertyField.setText(entry.getValue()); 24 | properties.put(entry.getKey(), propertyField); 25 | add(propertyField); 26 | row(); 27 | } 28 | } 29 | 30 | public void apply(){ 31 | for(String key : npc.getProperties().keySet()) 32 | npc.getProperties().put(key, properties.get(key).getText()); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/npc/NPCTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.npc; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.ui.leveleditor.VertexTable; 8 | import com.blastedstudios.gdxworld.world.GDXNPC; 9 | 10 | public class NPCTable extends Table { 11 | private final NPCPropertyTable propertyTable; 12 | private final VertexTable coordinates; 13 | private final TextField nameField; 14 | private final GDXNPC npc; 15 | 16 | public NPCTable(final Skin skin, final GDXNPC npc){ 17 | super(skin); 18 | this.npc = npc; 19 | propertyTable = new NPCPropertyTable(skin, npc); 20 | coordinates = new VertexTable(npc.getCoordinates().cpy(), skin); 21 | coordinates.setVertex(npc.getCoordinates().x, npc.getCoordinates().y); 22 | nameField = new TextField("", skin); 23 | nameField.setMessageText(""); 24 | nameField.setText(npc.getName()); 25 | 26 | add("Name: "); 27 | add(nameField); 28 | row(); 29 | add(propertyTable).colspan(2); 30 | row(); 31 | add("Coordinates: "); 32 | add(coordinates).colspan(2); 33 | } 34 | 35 | public void apply(){ 36 | npc.setName(nameField.getText()); 37 | npc.setCoordinates(coordinates.getVertex()); 38 | propertyTable.apply(); 39 | } 40 | 41 | public void setCoordinates(Vector2 coordinates) { 42 | this.coordinates.setVertex(coordinates.x, coordinates.y); 43 | } 44 | 45 | public Vector2 getCoordinates(){ 46 | return coordinates.getVertex(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/npc/NPCWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.npc; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.scenes.scene2d.InputEvent; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Button; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton; 8 | import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; 9 | import com.blastedstudios.gdxworld.ui.AbstractWindow; 10 | import com.blastedstudios.gdxworld.world.GDXNPC; 11 | 12 | class NPCWindow extends AbstractWindow { 13 | private final NPCTable table; 14 | 15 | public NPCWindow(final Skin skin, final NPCMode mode, final GDXNPC npc) { 16 | super("NPC Editor", skin); 17 | table = new NPCTable(skin, npc); 18 | final Button acceptButton = new TextButton("Accept", skin); 19 | final Button cancelButton = new TextButton("Cancel", skin); 20 | final Button deleteButton = new TextButton("Delete", skin); 21 | acceptButton.addListener(new ClickListener() { 22 | @Override public void clicked(InputEvent event, float x, float y) { 23 | table.apply(); 24 | mode.addNPC(npc); 25 | mode.clean(); 26 | } 27 | }); 28 | cancelButton.addListener(new ClickListener() { 29 | @Override public void clicked(InputEvent event, float x, float y) { 30 | mode.clean(); 31 | } 32 | }); 33 | deleteButton.addListener(new ClickListener() { 34 | @Override public void clicked(InputEvent event, float x, float y) { 35 | mode.removeNPC(npc); 36 | mode.clean(); 37 | } 38 | }); 39 | add(table).colspan(3); 40 | row(); 41 | add(acceptButton); 42 | add(cancelButton); 43 | add(deleteButton); 44 | setMovable(false); 45 | pack(); 46 | } 47 | 48 | public void setCoordinates(Vector2 coordinates) { 49 | table.setCoordinates(coordinates); 50 | } 51 | 52 | public Vector2 getCoordinates(){ 53 | return table.getCoordinates(); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/polygon/ShapeTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.polygon; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 5 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 6 | import com.blastedstudios.gdxworld.ui.leveleditor.FilterTable; 7 | import com.blastedstudios.gdxworld.world.shape.GDXShape; 8 | 9 | public class ShapeTable extends Table { 10 | private final TextField densityField, frictionField, restitutionField, resourceField, tagField; 11 | private final FilterTable filterTable; 12 | 13 | public ShapeTable(Skin skin, GDXShape shape){ 14 | super(skin); 15 | resourceField = new TextField(shape.getResource(), skin); 16 | resourceField.setMessageText(""); 17 | densityField = new TextField(shape.getDensity()+"", skin); 18 | densityField.setMessageText(""); 19 | frictionField = new TextField(shape.getFriction()+"", skin); 20 | frictionField.setMessageText(""); 21 | restitutionField = new TextField(shape.getRestitution()+"", skin); 22 | restitutionField.setMessageText(""); 23 | tagField = new TextField(shape.getTag(), skin); 24 | tagField.setMessageText(""); 25 | filterTable = new FilterTable(skin, shape.getFilter()); 26 | 27 | add("Resource: "); 28 | add(resourceField); 29 | row(); 30 | add("Tag: "); 31 | add(tagField); 32 | row(); 33 | add("Friction: "); 34 | add(frictionField); 35 | row(); 36 | add("Density: "); 37 | add(densityField); 38 | row(); 39 | add("Restitution: "); 40 | add(restitutionField); 41 | row(); 42 | add("Filter "); 43 | add(filterTable); 44 | } 45 | 46 | public GDXShape apply(GDXShape shape){ 47 | shape.setDensity(Float.parseFloat(densityField.getText())); 48 | shape.setFriction(Float.parseFloat(frictionField.getText())); 49 | shape.setResource(resourceField.getText()); 50 | shape.setRestitution(Float.parseFloat(restitutionField.getText())); 51 | shape.setFilter(filterTable.createFilterFromUI()); 52 | shape.setTag(tagField.getText()); 53 | return shape; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/quest/IQuestComponent.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.quest; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 8 | 9 | public interface IQuestComponent extends Plugin{ 10 | public String getBoxText(); 11 | public ICloneable getDefault(); 12 | public Table createTable(Skin skin, Object object); 13 | 14 | public interface IQuestComponentManifestation extends IQuestComponent{} 15 | public interface IQuestComponentTrigger extends IQuestComponent{} 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/quest/ManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.quest; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 6 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 7 | 8 | public abstract class ManifestationTable extends Table{ 9 | public ManifestationTable(final Skin skin){ 10 | super(skin); 11 | } 12 | 13 | public abstract AbstractQuestManifestation apply(); 14 | public void touched(Vector2 coordinates){} 15 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/quest/QuestMode.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.quest; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.blastedstudios.gdxworld.ui.leveleditor.AbstractMode; 6 | import com.blastedstudios.gdxworld.util.Log; 7 | import com.blastedstudios.gdxworld.world.GDXLevel; 8 | import com.blastedstudios.gdxworld.world.quest.GDXQuest; 9 | 10 | @PluginImplementation 11 | public class QuestMode extends AbstractMode { 12 | private QuestWindow questWindow; 13 | 14 | @Override public boolean contains(float x, float y) { 15 | return questWindow.contains(x, y); 16 | } 17 | 18 | @Override public void clean() { 19 | if(questWindow != null) 20 | questWindow.remove(); 21 | questWindow = null; 22 | } 23 | 24 | public void addQuest(GDXQuest quest) { 25 | Log.log("QuestMouseMode.addQuest", quest.toString()); 26 | if(!screen.getLevel().getQuests().contains(quest)) 27 | screen.getLevel().getQuests().add(quest); 28 | } 29 | 30 | @Override public void loadLevel(GDXLevel level) { 31 | super.loadLevel(level); 32 | for(GDXQuest npc : level.getQuests()) 33 | addQuest(npc); 34 | } 35 | 36 | @Override public void start() { 37 | super.start(); 38 | questWindow = new QuestWindow(screen.getSkin(), screen.getLevel().getQuests(), this, screen); 39 | screen.getStage().addActor(questWindow); 40 | } 41 | 42 | @Override public boolean touchDown(int x, int y, int x1, int y1){ 43 | super.touchDown(x, y, x1, y1); 44 | questWindow.touched(coordinates); 45 | return false; 46 | } 47 | 48 | @Override public boolean touchDragged(int x, int y, int ptr){ 49 | super.touchDragged(x, y, ptr); 50 | questWindow.touched(coordinates); 51 | return false; 52 | } 53 | 54 | @Override public boolean touchUp(int x, int y, int arg2, int arg3){ 55 | super.touchUp(x, y, arg2, arg3); 56 | questWindow.touched(coordinates); 57 | return false; 58 | } 59 | 60 | @Override public int getLoadPriority() { 61 | return 80; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/quest/TriggerTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.quest; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 8 | 9 | public abstract class TriggerTable extends Table{ 10 | private final TextField nameField; 11 | 12 | public TriggerTable(final Skin skin, AbstractQuestTrigger trigger){ 13 | super(skin); 14 | nameField = new TextField(trigger.getName(), skin); 15 | add("Type: " + trigger.getClass().getSimpleName()).colspan(2); 16 | row(); 17 | add("Name: "); 18 | add(nameField); 19 | row(); 20 | } 21 | 22 | public void apply(AbstractQuestTrigger trigger){ 23 | trigger.setName(nameField.getText()); 24 | } 25 | 26 | public abstract AbstractQuestTrigger apply(); 27 | public void touched(Vector2 coordinates){} 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/sound/SoundEditorWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.sound; 2 | 3 | import com.badlogic.gdx.Gdx; 4 | import com.badlogic.gdx.scenes.scene2d.InputEvent; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton; 7 | import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; 8 | import com.blastedstudios.gdxworld.ui.AbstractWindow; 9 | import com.blastedstudios.gdxworld.world.GDXSound; 10 | 11 | public class SoundEditorWindow extends AbstractWindow { 12 | private final SoundTable soundTable; 13 | private final TextButton applyButton; 14 | 15 | public SoundEditorWindow(Skin skin, final GDXSound sound) { 16 | super("Sound Editor", skin); 17 | soundTable = new SoundTable(skin, sound.getName(), sound.getFilename(), sound.getVolume(), 18 | sound.getPan(), sound.getPitch()); 19 | applyButton = new TextButton("Apply", skin); 20 | applyButton.addListener(new ClickListener() { 21 | @Override public void clicked(InputEvent event, float x, float y) { 22 | soundTable.update(sound); 23 | } 24 | }); 25 | add(soundTable); 26 | row(); 27 | add(applyButton); 28 | pack(); 29 | setMovable(false); 30 | setX(Gdx.graphics.getWidth()); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/sound/SoundMode.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.sound; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.blastedstudios.gdxworld.ui.leveleditor.AbstractMode; 6 | import com.blastedstudios.gdxworld.util.Log; 7 | import com.blastedstudios.gdxworld.world.GDXLevel; 8 | import com.blastedstudios.gdxworld.world.GDXSound; 9 | 10 | @PluginImplementation 11 | public class SoundMode extends AbstractMode { 12 | private SoundWindow soundWindow; 13 | 14 | @Override public void start() { 15 | super.start(); 16 | soundWindow = new SoundWindow(screen.getSkin(), screen.getLevel().getSounds(), this, screen); 17 | screen.getStage().addActor(soundWindow); 18 | } 19 | 20 | @Override public boolean contains(float x, float y) { 21 | return soundWindow.contains(x, y); 22 | } 23 | 24 | @Override public void clean() { 25 | if(soundWindow != null) 26 | soundWindow.remove(); 27 | soundWindow = null; 28 | } 29 | 30 | public void addSound(GDXSound sound) { 31 | Log.log("SoundMode.addSound", sound.toString()); 32 | if(!screen.getLevel().getSounds().contains(sound)) 33 | screen.getLevel().getSounds().add(sound); 34 | } 35 | 36 | @Override public void loadLevel(GDXLevel level) { 37 | super.loadLevel(level); 38 | for(GDXSound npc : level.getSounds()) 39 | addSound(npc); 40 | } 41 | 42 | @Override public int getLoadPriority() { 43 | return 60; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/sound/SoundTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.sound; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.world.GDXSound; 8 | 9 | public class SoundTable extends Table { 10 | public final TextField nameField, filenameField, volumeField, panField, pitchField; 11 | 12 | public SoundTable(final Skin skin, String name, String filename, float volume, 13 | float pan, float pitch){ 14 | nameField = new TextField(name, skin); 15 | nameField.setMessageText(""); 16 | filenameField = new TextField(filename, skin); 17 | filenameField.setMessageText(""); 18 | volumeField = new TextField(volume+"", skin); 19 | volumeField.setMessageText(""); 20 | panField = new TextField(pan+"", skin); 21 | panField.setMessageText(""); 22 | pitchField = new TextField(pitch+"", skin); 23 | pitchField.setMessageText(""); 24 | 25 | add(new Label("Name: ", skin)); 26 | add(nameField); 27 | add(new Label("Filename: ", skin)); 28 | add(filenameField); 29 | row(); 30 | add(new Label("Volume: ", skin)); 31 | add(volumeField); 32 | add(new Label("Pan: ", skin)); 33 | add(panField); 34 | add(new Label("Pitch: ", skin)); 35 | add(pitchField); 36 | } 37 | 38 | public void update(GDXSound sound) { 39 | sound.setName(nameField.getText()); 40 | sound.setFilename(filenameField.getText()); 41 | sound.setPan(Float.parseFloat(panField.getText())); 42 | sound.setPitch(Float.parseFloat(pitchField.getText())); 43 | sound.setVolume(Float.parseFloat(volumeField.getText())); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/tile/PaletteTile.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.tile; 2 | 3 | import com.badlogic.gdx.graphics.g2d.Batch; 4 | import com.badlogic.gdx.graphics.g2d.Sprite; 5 | import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; 6 | import com.badlogic.gdx.scenes.scene2d.utils.SpriteDrawable; 7 | 8 | public class PaletteTile extends ImageButton { 9 | private String resource; 10 | private int resX, resY, tilesize; 11 | 12 | public PaletteTile(final Sprite sprite, final String resource, final int resX, final int resY, final int tilesize) { 13 | super(new SpriteDrawable(sprite)); 14 | this.resource = resource; 15 | this.resX = resX; 16 | this.resY = resY; 17 | this.tilesize = tilesize; 18 | } 19 | 20 | @Override 21 | public float getPrefWidth() { 22 | return tilesize; 23 | }; 24 | 25 | @Override 26 | public float getPrefHeight() { 27 | return tilesize; 28 | }; 29 | 30 | @Override 31 | public void draw(final Batch batch, final float parentAlpha) { 32 | this.setPosition(getX(), getY()); 33 | super.draw(batch, parentAlpha); 34 | } 35 | 36 | public String getResource() { 37 | return resource; 38 | } 39 | 40 | public void setResource(String resource) { 41 | this.resource = resource; 42 | } 43 | 44 | public int getResY() { 45 | return resY; 46 | } 47 | 48 | public void setResY(int resY) { 49 | this.resY = resY; 50 | } 51 | 52 | public int getResX() { 53 | return resX; 54 | } 55 | 56 | public void setResX(int resX) { 57 | this.resX = resX; 58 | } 59 | 60 | public int getTileSize() { 61 | return tilesize; 62 | } 63 | 64 | public void setTileSize(int tilesize) { 65 | this.tilesize = tilesize; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/mode/tile/TileWindow.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.mode.tile; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 4 | import com.blastedstudios.gdxworld.ui.AbstractWindow; 5 | import com.blastedstudios.gdxworld.world.shape.GDXPolygon; 6 | 7 | public class TileWindow extends AbstractWindow { 8 | // private PaletteTile tile; 9 | 10 | public TileWindow(final Skin skin, final TileMode tileMode, final GDXPolygon tilePolygon) { 11 | super("Tile Editor", skin); 12 | // this.tile = tile; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/beingspawn/BeingSpawnManifestation.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.beingspawn; 2 | 3 | import com.blastedstudios.gdxworld.util.PluginUtil; 4 | import com.blastedstudios.gdxworld.world.GDXNPC; 5 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 6 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 7 | 8 | public class BeingSpawnManifestation extends AbstractQuestManifestation { 9 | private static final long serialVersionUID = 1L; 10 | public static final BeingSpawnManifestation DEFAULT = new BeingSpawnManifestation(); 11 | private GDXNPC npc = new GDXNPC(); 12 | 13 | public BeingSpawnManifestation(){} 14 | 15 | public BeingSpawnManifestation(GDXNPC npc){ 16 | this.npc = npc; 17 | } 18 | 19 | @Override public CompletionEnum execute(float dt) { 20 | for(IBeingSpawnHandler handler : PluginUtil.getPlugins(IBeingSpawnHandler.class)) 21 | if(handler.beingSpawn(npc) == CompletionEnum.COMPLETED) 22 | return CompletionEnum.COMPLETED; 23 | return CompletionEnum.COMPLETED; 24 | } 25 | 26 | @Override public AbstractQuestManifestation clone() { 27 | return new BeingSpawnManifestation((GDXNPC) npc.clone()); 28 | } 29 | 30 | @Override public String toString() { 31 | return "[BeingSpawnManifestation npc: " + npc.toString() + "]"; 32 | } 33 | 34 | public GDXNPC getNpc() { 35 | return npc; 36 | } 37 | 38 | public void setNpc(GDXNPC npc) { 39 | this.npc = npc; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/beingspawn/BeingSpawnManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.beingspawn; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class BeingSpawnManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Being Spawn"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return BeingSpawnManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new BeingSpawnManifestationTable(skin, (BeingSpawnManifestation) object); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/beingspawn/BeingSpawnManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.beingspawn; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.blastedstudios.gdxworld.plugin.mode.npc.NPCTable; 6 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 7 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 8 | 9 | public class BeingSpawnManifestationTable extends ManifestationTable{ 10 | private final BeingSpawnManifestation manifestation; 11 | private final NPCTable table; 12 | 13 | public BeingSpawnManifestationTable(Skin skin, BeingSpawnManifestation manifestation){ 14 | super(skin); 15 | table = new NPCTable(skin, manifestation.getNpc()); 16 | this.manifestation = manifestation; 17 | add(table); 18 | } 19 | 20 | @Override public AbstractQuestManifestation apply() { 21 | table.apply(); 22 | return manifestation; 23 | } 24 | 25 | @Override public void touched(Vector2 coordinates) { 26 | table.setCoordinates(coordinates); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/beingspawn/IBeingSpawnHandler.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.beingspawn; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | import net.xeoh.plugins.base.annotations.PluginImplementation; 5 | 6 | import com.blastedstudios.gdxworld.world.GDXNPC; 7 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 8 | 9 | @PluginImplementation 10 | public interface IBeingSpawnHandler extends Plugin{ 11 | CompletionEnum beingSpawn(GDXNPC npc); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/bodyremove/BodyRemoveManifestation.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.bodyremove; 2 | 3 | import com.badlogic.gdx.physics.box2d.Body; 4 | import com.blastedstudios.gdxworld.util.Log; 5 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 6 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 7 | 8 | public class BodyRemoveManifestation extends AbstractQuestManifestation{ 9 | private static final long serialVersionUID = 1L; 10 | public static final BodyRemoveManifestation DEFAULT = new BodyRemoveManifestation(); 11 | private String name = ""; 12 | 13 | public BodyRemoveManifestation(){} 14 | 15 | public BodyRemoveManifestation(String name){ 16 | this.name = name; 17 | } 18 | 19 | @Override public CompletionEnum execute(float dt) { 20 | Body object = executor.getPhysicsObject(name); 21 | if(object != null) 22 | executor.getWorld().destroyBody(object); 23 | else 24 | Log.error("BodyRemoveManifestation.execute", "Box2d body null with name: " + name); 25 | return CompletionEnum.COMPLETED; 26 | } 27 | 28 | @Override public AbstractQuestManifestation clone() { 29 | return new BodyRemoveManifestation(name); 30 | } 31 | 32 | @Override public String toString() { 33 | return "[BodyRemoveManifestation name:" + name + "]"; 34 | } 35 | 36 | public String getName() { 37 | return name; 38 | } 39 | 40 | public void setName(String name) { 41 | this.name = name; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/bodyremove/BodyRemoveManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.bodyremove; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class BodyRemoveManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Body Remove"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return BodyRemoveManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new BodyRemoveManifestationTable(skin, (BodyRemoveManifestation) object); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/bodyremove/BodyRemoveManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.bodyremove; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 6 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 7 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 8 | 9 | public class BodyRemoveManifestationTable extends ManifestationTable{ 10 | private final TextField nameText; 11 | 12 | public BodyRemoveManifestationTable(Skin skin, BodyRemoveManifestation manifestation) { 13 | super(skin); 14 | nameText = new TextField(manifestation.getName(), skin); 15 | nameText.setMessageText(""); 16 | add(new Label("Body Name", skin)); 17 | add(nameText); 18 | row(); 19 | } 20 | 21 | @Override public AbstractQuestManifestation apply() { 22 | return new BodyRemoveManifestation(nameText.getText()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/dialog/DialogManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.dialog; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class DialogManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Dialog"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return DialogManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new DialogManifestationTable(skin, (DialogManifestation) object); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/dialog/DialogManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.dialog; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.TextArea; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 8 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 9 | 10 | public class DialogManifestationTable extends ManifestationTable { 11 | private final TextArea dialogText; 12 | private final TextField originText, typeText; 13 | private final DialogManifestation manifestation; 14 | 15 | public DialogManifestationTable(Skin skin, DialogManifestation manifestation) { 16 | super(skin); 17 | this.manifestation = manifestation; 18 | dialogText = new TextArea(manifestation.getDialog(), skin); 19 | dialogText.setMessageText(""); 20 | originText = new TextField(manifestation.getOrigin(), skin); 21 | originText.setMessageText(""); 22 | typeText = new TextField(manifestation.getType(), skin); 23 | typeText.setMessageText(""); 24 | add(new Label("Dialog: ", skin)); 25 | add(dialogText).colspan(3).minSize(350f, 100f); 26 | row(); 27 | add(new Label("Origin: ", skin)); 28 | add(originText); 29 | add(new Label("Type: ", skin)); 30 | add(typeText); 31 | } 32 | 33 | @Override public AbstractQuestManifestation apply() { 34 | manifestation.setOrigin(originText.getText()); 35 | manifestation.setDialog(dialogText.getText()); 36 | manifestation.setType(typeText.getText()); 37 | return manifestation; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/dialog/IDialogHandler.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.dialog; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | import net.xeoh.plugins.base.annotations.PluginImplementation; 5 | 6 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 7 | 8 | @PluginImplementation 9 | public interface IDialogHandler extends Plugin{ 10 | CompletionEnum addDialog(String dialog, String origin, String type); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/endlevel/EndLevelManifestation.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.endlevel; 2 | 3 | import com.blastedstudios.gdxworld.util.PluginUtil; 4 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 5 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 6 | 7 | public class EndLevelManifestation extends AbstractQuestManifestation { 8 | private static final long serialVersionUID = 1L; 9 | public static EndLevelManifestation DEFAULT = new EndLevelManifestation(true, ""); 10 | private boolean success; 11 | private String nextLevel = ""; 12 | 13 | public EndLevelManifestation(){} 14 | 15 | public EndLevelManifestation(boolean success, String nextLevel){ 16 | this.success = success; 17 | this.nextLevel = nextLevel; 18 | } 19 | 20 | @Override public CompletionEnum execute(float dt) { 21 | for(IEndLevelHandler handler : PluginUtil.getPlugins(IEndLevelHandler.class)) 22 | if(handler.endLevel(success, nextLevel) == CompletionEnum.COMPLETED) 23 | return CompletionEnum.COMPLETED; 24 | return CompletionEnum.EXECUTING; 25 | } 26 | 27 | public boolean isSuccess() { 28 | return success; 29 | } 30 | 31 | public void setSuccess(boolean success) { 32 | this.success = success; 33 | } 34 | 35 | @Override public AbstractQuestManifestation clone() { 36 | return new EndLevelManifestation(success, nextLevel); 37 | } 38 | 39 | @Override public String toString() { 40 | return "[EndLevelManifestation: success:" + success+"]"; 41 | } 42 | 43 | public String getNextLevel() { 44 | return nextLevel == null ? nextLevel = "" : nextLevel; 45 | } 46 | 47 | public void setNextLevel(String nextLevel) { 48 | this.nextLevel = nextLevel; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/endlevel/EndLevelManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.endlevel; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class EndLevelManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "End Level"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return EndLevelManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new EndLevelManifestationTable(skin, (EndLevelManifestation) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/endlevel/EndLevelManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.endlevel; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 6 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 7 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 8 | 9 | public class EndLevelManifestationTable extends ManifestationTable { 10 | private final CheckBox successBox; 11 | private final TextField nextLevelTextField; 12 | 13 | public EndLevelManifestationTable(Skin skin, EndLevelManifestation manifestation) { 14 | super(skin); 15 | successBox = new CheckBox("Success", skin); 16 | successBox.setChecked(manifestation.isSuccess()); 17 | nextLevelTextField = new TextField(manifestation.getNextLevel(), skin); 18 | nextLevelTextField.setMessageText(""); 19 | add(successBox); 20 | row(); 21 | add("Next Level "); 22 | add(nextLevelTextField); 23 | } 24 | 25 | @Override public AbstractQuestManifestation apply() { 26 | return new EndLevelManifestation(successBox.isChecked(), nextLevelTextField.getText()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/endlevel/IEndLevelHandler.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.endlevel; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | import net.xeoh.plugins.base.annotations.PluginImplementation; 5 | 6 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 7 | 8 | @PluginImplementation 9 | public interface IEndLevelHandler extends Plugin{ 10 | CompletionEnum endLevel(boolean success, String nextLevel); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/groupcreate/GroupCreateManifestation.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.groupcreate; 2 | 3 | import com.badlogic.gdx.Gdx; 4 | import com.badlogic.gdx.files.FileHandle; 5 | import com.badlogic.gdx.math.Vector2; 6 | import com.blastedstudios.gdxworld.util.FileUtil; 7 | import com.blastedstudios.gdxworld.util.Log; 8 | import com.blastedstudios.gdxworld.world.group.GDXGroupExportStruct; 9 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 10 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 11 | 12 | public class GroupCreateManifestation extends AbstractQuestManifestation{ 13 | private static final long serialVersionUID = 1L; 14 | public static final GroupCreateManifestation DEFAULT = new GroupCreateManifestation(); 15 | private String path = ""; 16 | private Vector2 position = new Vector2(); 17 | 18 | public GroupCreateManifestation(){} 19 | 20 | public GroupCreateManifestation(String path, Vector2 position){ 21 | this.path = path; 22 | this.position = position; 23 | } 24 | 25 | @Override public CompletionEnum execute(float dt) { 26 | FileHandle handle = Gdx.files.internal(path); 27 | GDXGroupExportStruct struct; 28 | try { 29 | struct = (GDXGroupExportStruct) FileUtil.getSerializer(handle).load(handle); 30 | struct.instantiate(getExecutor().getWorld(), position); 31 | } catch (Exception e) { 32 | Log.error("GroupCreateManifestation.execute", "Failed to load group with path: " + 33 | path + " msg: " + e.getMessage()); 34 | } 35 | return CompletionEnum.COMPLETED; 36 | } 37 | 38 | @Override public AbstractQuestManifestation clone() { 39 | return new GroupCreateManifestation(path, position); 40 | } 41 | 42 | @Override public String toString() { 43 | return "[GroupCreateManifestation path:" + path + "]"; 44 | } 45 | 46 | public String getPath() { 47 | return path; 48 | } 49 | 50 | public void setPath(String path) { 51 | this.path = path; 52 | } 53 | 54 | public Vector2 getPosition() { 55 | return position; 56 | } 57 | 58 | public void setPosition(Vector2 position) { 59 | this.position = position; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/groupcreate/GroupCreateManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.groupcreate; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class GroupCreateManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Group Create"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return GroupCreateManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new GroupCreateManifestationTable(skin, (GroupCreateManifestation) object); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/groupcreate/GroupCreateManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.groupcreate; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 6 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 7 | import com.blastedstudios.gdxworld.ui.leveleditor.VertexTable; 8 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 9 | 10 | public class GroupCreateManifestationTable extends ManifestationTable{ 11 | private final TextField pathText; 12 | private final VertexTable positionTable; 13 | 14 | public GroupCreateManifestationTable(Skin skin, GroupCreateManifestation manifestation) { 15 | super(skin); 16 | pathText = new TextField(manifestation.getPath(), skin); 17 | pathText.setMessageText(""); 18 | positionTable = new VertexTable(manifestation.getPosition(), skin); 19 | add("Path: "); 20 | add(pathText); 21 | row(); 22 | add("Position: "); 23 | add(positionTable); 24 | } 25 | 26 | @Override public AbstractQuestManifestation apply() { 27 | return new GroupCreateManifestation(pathText.getText(), positionTable.getVertex()); 28 | } 29 | 30 | @Override 31 | public void touched(Vector2 coordinates){ 32 | positionTable.setVertex(coordinates.x, coordinates.y); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/inputenable/IInputEnableHandler.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.inputenable; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | import net.xeoh.plugins.base.annotations.PluginImplementation; 5 | 6 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 7 | 8 | @PluginImplementation 9 | public interface IInputEnableHandler extends Plugin{ 10 | CompletionEnum inputEnable(boolean inputEnable); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/inputenable/InputEnableManifestation.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.inputenable; 2 | 3 | import com.blastedstudios.gdxworld.util.PluginUtil; 4 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 5 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 6 | 7 | public class InputEnableManifestation extends AbstractQuestManifestation { 8 | private static final long serialVersionUID = 1L; 9 | public static final InputEnableManifestation DEFAULT = new InputEnableManifestation(); 10 | private boolean inputEnable; 11 | 12 | public InputEnableManifestation(){} 13 | public InputEnableManifestation(boolean inputEnable){ 14 | this.inputEnable = inputEnable; 15 | } 16 | 17 | @Override public CompletionEnum execute(float dt) { 18 | for(IInputEnableHandler handler : PluginUtil.getPlugins(IInputEnableHandler.class)) 19 | if(handler.inputEnable(inputEnable) == CompletionEnum.COMPLETED) 20 | return CompletionEnum.COMPLETED; 21 | return CompletionEnum.EXECUTING; 22 | } 23 | 24 | @Override public AbstractQuestManifestation clone() { 25 | return new InputEnableManifestation(inputEnable); 26 | } 27 | 28 | @Override public String toString() { 29 | return "[InputEnableManifestation inputEnable:" + inputEnable + "]"; 30 | } 31 | 32 | public boolean isInputEnable() { 33 | return inputEnable; 34 | } 35 | 36 | public void setInputEnable(boolean inputEnable) { 37 | this.inputEnable = inputEnable; 38 | } 39 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/inputenable/InputEnableManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.inputenable; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class InputEnableManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Input Enable"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return InputEnableManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new InputEnableManifestationTable(skin, (InputEnableManifestation) object); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/inputenable/InputEnableManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.inputenable; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 6 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 7 | 8 | public class InputEnableManifestationTable extends ManifestationTable{ 9 | private final InputEnableManifestation manifestation; 10 | private final CheckBox inputEnable; 11 | 12 | public InputEnableManifestationTable(Skin skin, InputEnableManifestation manifestation){ 13 | super(skin); 14 | this.manifestation = manifestation; 15 | inputEnable = new CheckBox("InputEnable", skin); 16 | inputEnable.setChecked(manifestation.isInputEnable()); 17 | add(inputEnable); 18 | } 19 | 20 | @Override public AbstractQuestManifestation apply() { 21 | manifestation.setInputEnable(inputEnable.isChecked()); 22 | return manifestation; 23 | } 24 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/jointremove/JointRemoveManifestation.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.jointremove; 2 | 3 | import com.badlogic.gdx.physics.box2d.Joint; 4 | import com.blastedstudios.gdxworld.util.Log; 5 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 6 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 7 | 8 | public class JointRemoveManifestation extends AbstractQuestManifestation{ 9 | private static final long serialVersionUID = 1L; 10 | public static final JointRemoveManifestation DEFAULT = new JointRemoveManifestation(); 11 | private String jointName = ""; 12 | 13 | public JointRemoveManifestation(){} 14 | 15 | public JointRemoveManifestation(String jointName){ 16 | this.jointName = jointName; 17 | } 18 | 19 | @Override public CompletionEnum execute(float dt) { 20 | Joint joint = executor.getPhysicsJoint(jointName); 21 | if(joint != null) 22 | executor.getWorld().destroyJoint(joint); 23 | else 24 | Log.error("JointRemoveManifestation.execute", "Box2d joint null with jointName: " + jointName); 25 | return CompletionEnum.COMPLETED; 26 | } 27 | 28 | @Override public AbstractQuestManifestation clone() { 29 | return new JointRemoveManifestation(jointName); 30 | } 31 | 32 | @Override public String toString() { 33 | return "[JointRemoveManifestation jointName:" + jointName + "]"; 34 | } 35 | 36 | public String getJointName() { 37 | return jointName; 38 | } 39 | 40 | public void setJointName(String jointName) { 41 | this.jointName = jointName; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/jointremove/JointRemoveManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.jointremove; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class JointRemoveManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Joint Remove"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return JointRemoveManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new JointRemoveManifestationTable(skin, (JointRemoveManifestation) object); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/jointremove/JointRemoveManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.jointremove; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 6 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 7 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 8 | 9 | public class JointRemoveManifestationTable extends ManifestationTable{ 10 | private final TextField jointNameText; 11 | 12 | public JointRemoveManifestationTable(Skin skin, JointRemoveManifestation manifestation) { 13 | super(skin); 14 | jointNameText = new TextField(manifestation.getJointName(), skin); 15 | jointNameText.setMessageText(""); 16 | add(new Label("Joint Name", skin)); 17 | add(jointNameText); 18 | row(); 19 | } 20 | 21 | @Override public AbstractQuestManifestation apply() { 22 | return new JointRemoveManifestation(jointNameText.getText()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/particle/IParticleHandler.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.particle; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | import net.xeoh.plugins.base.annotations.PluginImplementation; 5 | 6 | import com.badlogic.gdx.math.Vector2; 7 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 8 | 9 | @PluginImplementation 10 | public interface IParticleHandler extends Plugin{ 11 | CompletionEnum particle(String name, String effectFile, String imagesDir, 12 | int duration, Vector2 position, 13 | ParticleManifestationTypeEnum modificationType, String emitterName, 14 | String attachedBody); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/particle/ParticleManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.particle; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class ParticleManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Particle"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return ParticleManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new ParticleManifestationTable(skin, (ParticleManifestation) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/particle/ParticleManifestationTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.particle; 2 | 3 | public enum ParticleManifestationTypeEnum { 4 | CREATE, MODIFY, REMOVE 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/pause/IPauseHandler.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.pause; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | import net.xeoh.plugins.base.annotations.PluginImplementation; 5 | 6 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 7 | 8 | @PluginImplementation 9 | public interface IPauseHandler extends Plugin{ 10 | CompletionEnum pause(boolean pause); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/pause/PauseManifestation.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.pause; 2 | 3 | import com.blastedstudios.gdxworld.util.PluginUtil; 4 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 5 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 6 | 7 | public class PauseManifestation extends AbstractQuestManifestation { 8 | private static final long serialVersionUID = 1L; 9 | public static final PauseManifestation DEFAULT = new PauseManifestation(); 10 | private boolean pause; 11 | 12 | public PauseManifestation(){} 13 | public PauseManifestation(boolean pause){ 14 | this.pause = pause; 15 | } 16 | 17 | @Override public CompletionEnum execute(float dt) { 18 | for(IPauseHandler handler : PluginUtil.getPlugins(IPauseHandler.class)) 19 | if(handler.pause(pause) == CompletionEnum.COMPLETED) 20 | return CompletionEnum.COMPLETED; 21 | return CompletionEnum.EXECUTING; 22 | } 23 | 24 | @Override public AbstractQuestManifestation clone() { 25 | return new PauseManifestation(pause); 26 | } 27 | 28 | @Override public String toString() { 29 | return "[PauseManifestation pause:" + pause + "]"; 30 | } 31 | 32 | public boolean isPause() { 33 | return pause; 34 | } 35 | 36 | public void setPause(boolean pause) { 37 | this.pause = pause; 38 | } 39 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/pause/PauseManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.pause; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class PauseManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Pause"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return PauseManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new PauseManifestationTable(skin, (PauseManifestation) object); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/pause/PauseManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.pause; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 6 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 7 | 8 | public class PauseManifestationTable extends ManifestationTable{ 9 | private final PauseManifestation manifestation; 10 | private final CheckBox pause; 11 | 12 | public PauseManifestationTable(Skin skin, PauseManifestation manifestation){ 13 | super(skin); 14 | this.manifestation = manifestation; 15 | pause = new CheckBox("Pause", skin); 16 | pause.setChecked(manifestation.isPause()); 17 | add(pause); 18 | } 19 | 20 | @Override public AbstractQuestManifestation apply() { 21 | manifestation.setPause(pause.isChecked()); 22 | return manifestation; 23 | } 24 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/physics/IPhysicsManifestationHandler.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.physics; 2 | 3 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 4 | 5 | import net.xeoh.plugins.base.Plugin; 6 | import net.xeoh.plugins.base.annotations.PluginImplementation; 7 | 8 | @PluginImplementation 9 | public interface IPhysicsManifestationHandler extends Plugin{ 10 | CompletionEnum execute(PhysicsManifestation manifestation); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/physics/PhysicsManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.physics; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class PhysicsManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Physics"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return PhysicsManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new PhysicsManifestationTable(skin, (PhysicsManifestation) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/platform/PlatformManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.platform; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class PlatformManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Platform"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return PlatformManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new PlatformManifestationTable(skin, (PlatformManifestation) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/prismaticjoint/PrismaticJointManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.prismaticjoint; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class PrismaticJointManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Prismatic Joint"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return PrismaticJointManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new PrismaticJointManifestationTable(skin, (PrismaticJointManifestation) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/prismaticjoint/PrismaticJointManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.prismaticjoint; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 8 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 9 | 10 | public class PrismaticJointManifestationTable extends ManifestationTable { 11 | private final TextField maxMotorForceText, motorSpeedText, nameText; 12 | private final CheckBox enableMotorBox; 13 | 14 | public PrismaticJointManifestationTable(Skin skin, PrismaticJointManifestation manifestation) { 15 | super(skin); 16 | nameText = new TextField(manifestation.getName(), skin); 17 | nameText.setMessageText(""); 18 | maxMotorForceText = new TextField(manifestation.getMaxMotorForce()+"", skin); 19 | maxMotorForceText.setMessageText(""); 20 | motorSpeedText = new TextField(manifestation.getMotorSpeed()+"", skin); 21 | motorSpeedText.setMessageText(""); 22 | enableMotorBox = new CheckBox("Enable Motor", skin); 23 | enableMotorBox.setChecked(manifestation.isEnableMotor()); 24 | add(new Label("Name", skin)); 25 | add(nameText); 26 | row(); 27 | add(enableMotorBox); 28 | row(); 29 | add(new Label("Max Motor Torque: ", skin)); 30 | add(maxMotorForceText); 31 | row(); 32 | add(new Label("Motor Speed: ", skin)); 33 | add(motorSpeedText); 34 | row(); 35 | } 36 | 37 | @Override public AbstractQuestManifestation apply() { 38 | return new PrismaticJointManifestation(nameText.getText(), enableMotorBox.isChecked(), 39 | Float.parseFloat(maxMotorForceText.getText()), Float.parseFloat(motorSpeedText.getText())); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/revolutejoint/RevoluteJointManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.revolutejoint; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class RevoluteJointManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Revolute Joint"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return RevoluteJointManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new RevoluteJointManifestationTable(skin, (RevoluteJointManifestation) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/revolutejoint/RevoluteJointManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.revolutejoint; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Label; 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 8 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 9 | 10 | public class RevoluteJointManifestationTable extends ManifestationTable { 11 | private final TextField maxMotorTorqueText, motorSpeedText, nameText; 12 | private final CheckBox enableMotorBox; 13 | 14 | public RevoluteJointManifestationTable(Skin skin, RevoluteJointManifestation manifestation) { 15 | super(skin); 16 | nameText = new TextField(manifestation.getName(), skin); 17 | nameText.setMessageText(""); 18 | maxMotorTorqueText = new TextField(manifestation.getMaxMotorTorque()+"", skin); 19 | maxMotorTorqueText.setMessageText(""); 20 | motorSpeedText = new TextField(manifestation.getMotorSpeed()+"", skin); 21 | motorSpeedText.setMessageText(""); 22 | enableMotorBox = new CheckBox("Enable Motor", skin); 23 | enableMotorBox.setChecked(manifestation.isEnableMotor()); 24 | add(new Label("Name", skin)); 25 | add(nameText); 26 | row(); 27 | add(enableMotorBox); 28 | row(); 29 | add(new Label("Max Motor Torque: ", skin)); 30 | add(maxMotorTorqueText); 31 | row(); 32 | add(new Label("Motor Speed: ", skin)); 33 | add(motorSpeedText); 34 | row(); 35 | } 36 | 37 | @Override public AbstractQuestManifestation apply() { 38 | return new RevoluteJointManifestation(nameText.getText(), enableMotorBox.isChecked(), 39 | Float.parseFloat(maxMotorTorqueText.getText()), Float.parseFloat(motorSpeedText.getText())); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/sound/ISoundHandler.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.sound; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | import net.xeoh.plugins.base.annotations.PluginImplementation; 5 | 6 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 7 | 8 | @PluginImplementation 9 | public interface ISoundHandler extends Plugin{ 10 | CompletionEnum sound(float dt, SoundManifestationEnum manifestationType, 11 | String name, String filename, float volume, float pan, float pitch); 12 | CompletionEnum tick(float dt); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/sound/SoundManifestationEnum.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.sound; 2 | 3 | public enum SoundManifestationEnum { 4 | LOOP, PAUSE, PITCHPAN, PLAY, RESUME, STOP, THEMATIC, VOLUME 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/sound/SoundManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.sound; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class SoundManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Sound"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return SoundManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new SoundManifestationTable(skin, (SoundManifestation) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/sound/SoundManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.sound; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.List; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 6 | import com.blastedstudios.gdxworld.plugin.mode.sound.SoundTable; 7 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 8 | 9 | public class SoundManifestationTable extends ManifestationTable{ 10 | private final List modificationTypeList; 11 | private final SoundTable soundTable; 12 | 13 | public SoundManifestationTable(Skin skin, SoundManifestation sound) { 14 | super(skin); 15 | soundTable = new SoundTable(skin, sound.getName(), sound.getFilename(), sound.getVolume(), 16 | sound.getPan(), sound.getPitch()); 17 | modificationTypeList = new List(skin); 18 | modificationTypeList.setItems(SoundManifestationEnum.values()); 19 | modificationTypeList.setSelectedIndex(sound.getManifestationType().ordinal()); 20 | add(soundTable); 21 | row(); 22 | add(modificationTypeList); 23 | } 24 | 25 | @Override public AbstractQuestManifestation apply() { 26 | return new SoundManifestation(modificationTypeList.getSelected(), 27 | soundTable.nameField.getText(), soundTable.filenameField.getText(), 28 | Float.parseFloat(soundTable.volumeField.getText()), Float.parseFloat(soundTable.panField.getText()), 29 | Float.parseFloat(soundTable.pitchField.getText())); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/wheeljoint/WheelJointManifestation.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.wheeljoint; 2 | 3 | import com.blastedstudios.gdxworld.world.joint.WheelJoint; 4 | import com.blastedstudios.gdxworld.world.quest.QuestStatus.CompletionEnum; 5 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 6 | 7 | public class WheelJointManifestation extends AbstractQuestManifestation { 8 | private static final long serialVersionUID = 1L; 9 | public static final WheelJointManifestation DEFAULT = new WheelJointManifestation(); 10 | private WheelJoint joint = new WheelJoint(); 11 | 12 | public WheelJointManifestation(){} 13 | 14 | public WheelJointManifestation(WheelJoint joint){ 15 | this.setJoint(joint); 16 | } 17 | 18 | @Override public CompletionEnum execute(float dt) { 19 | //TODO make currently existing joints change properties 20 | joint.attach(executor.getWorld()); 21 | return CompletionEnum.COMPLETED; 22 | } 23 | 24 | @Override public AbstractQuestManifestation clone() { 25 | return new WheelJointManifestation(getJoint()); 26 | } 27 | 28 | @Override public String toString() { 29 | return "[WheelJointManifestation joint:" + getJoint() + "]"; 30 | } 31 | 32 | public WheelJoint getJoint() { 33 | return joint; 34 | } 35 | 36 | public void setJoint(WheelJoint joint) { 37 | this.joint = joint; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/wheeljoint/WheelJointManifestationPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.wheeljoint; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentManifestation; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class WheelJointManifestationPlugin implements IQuestComponentManifestation{ 12 | @Override public String getBoxText() { 13 | return "Wheel Joint"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return WheelJointManifestation.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new WheelJointManifestationTable(skin, (WheelJointManifestation) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/manifestation/wheeljoint/WheelJointManifestationTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.manifestation.wheeljoint; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 4 | import com.blastedstudios.gdxworld.plugin.mode.joint.window.wheel.WheelJointTable; 5 | import com.blastedstudios.gdxworld.plugin.mode.quest.ManifestationTable; 6 | import com.blastedstudios.gdxworld.world.joint.WheelJoint; 7 | import com.blastedstudios.gdxworld.world.quest.manifestation.AbstractQuestManifestation; 8 | 9 | public class WheelJointManifestationTable extends ManifestationTable { 10 | private final WheelJointTable table; 11 | 12 | public WheelJointManifestationTable(Skin skin, WheelJointManifestation manifestation) { 13 | super(skin); 14 | add(table = new WheelJointTable(skin, manifestation.getJoint())); 15 | } 16 | 17 | @Override public AbstractQuestManifestation apply() { 18 | WheelJoint joint = new WheelJoint(); 19 | table.apply(joint); 20 | return new WheelJointManifestation(joint); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/aabb/AABBTrigger.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.aabb; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.blastedstudios.gdxworld.util.Log; 5 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 6 | 7 | /** 8 | * Trigger for when player enters a certain rectangle, identified by the 9 | * lower left and the upper right coordinates of the rectangle 10 | */ 11 | public class AABBTrigger extends AbstractQuestTrigger { 12 | private static final long serialVersionUID = 1L; 13 | public static final AABBTrigger DEFAULT = new AABBTrigger(0,0,1,1); 14 | private Vector2 lowerLeft = new Vector2(), upperRight = new Vector2(); 15 | 16 | public AABBTrigger(){} 17 | 18 | public AABBTrigger(float llx, float lly, float urx, float ury){ 19 | this(new Vector2(llx,lly),new Vector2(urx, ury)); 20 | } 21 | 22 | public AABBTrigger(Vector2 lowerLeft, Vector2 upperRight){ 23 | this.lowerLeft = lowerLeft; 24 | this.upperRight = upperRight; 25 | } 26 | 27 | public Vector2 getLowerLeft() { 28 | return lowerLeft; 29 | } 30 | 31 | public void setLowerLeft(Vector2 lowerLeft) { 32 | this.lowerLeft = lowerLeft; 33 | } 34 | 35 | public Vector2 getUpperRight() { 36 | return upperRight; 37 | } 38 | 39 | public void setUpperRight(Vector2 upperRight) { 40 | this.upperRight = upperRight; 41 | } 42 | 43 | @Override public boolean activate(float dt) { 44 | if(getProvider().getPlayerPosition() == null){ 45 | Log.log("AABBTrigger.activate", "Player position null"); 46 | return false; 47 | } 48 | return getProvider().getPlayerPosition().x < upperRight.x && getProvider().getPlayerPosition().y < upperRight.y && 49 | getProvider().getPlayerPosition().x > lowerLeft.x && getProvider().getPlayerPosition().y > lowerLeft.y; 50 | } 51 | 52 | @Override public AbstractQuestTrigger clone(){ 53 | return super.clone(new AABBTrigger(lowerLeft.cpy(), upperRight.cpy())); 54 | } 55 | 56 | @Override public String toString() { 57 | return "[AABBTrigger: lowerLeft:"+lowerLeft+" upperRight:"+upperRight+"]"; 58 | } 59 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/aabb/AABBTriggerPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.aabb; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentTrigger; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class AABBTriggerPlugin implements IQuestComponentTrigger{ 12 | @Override public String getBoxText() { 13 | return "AABB"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return AABBTrigger.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new AABBTriggerTable(skin, (AABBTrigger) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/aabb/AABBTriggerTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.aabb; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.blastedstudios.gdxworld.plugin.mode.quest.TriggerTable; 6 | import com.blastedstudios.gdxworld.ui.leveleditor.VertexTable; 7 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 8 | 9 | public class AABBTriggerTable extends TriggerTable{ 10 | private final VertexTable llTable,urTable; 11 | private final AABBTrigger trigger; 12 | 13 | public AABBTriggerTable(Skin skin, AABBTrigger trigger) { 14 | super(skin, trigger); 15 | this.trigger = trigger; 16 | llTable = new VertexTable(trigger.getLowerLeft(), skin, null); 17 | urTable = new VertexTable(trigger.getUpperRight(), skin, null); 18 | add("Lower left: "); 19 | add(llTable); 20 | row(); 21 | add("Upper right: "); 22 | add(urTable); 23 | } 24 | 25 | @Override public AbstractQuestTrigger apply() { 26 | super.apply(trigger); 27 | trigger.setLowerLeft(llTable.getVertex()); 28 | trigger.setUpperRight(urTable.getVertex()); 29 | return trigger; 30 | } 31 | 32 | @Override public void touched(Vector2 coordinates) { 33 | if(llTable.isCursorActive()) 34 | llTable.setVertex(coordinates.x, coordinates.y); 35 | if(urTable.isCursorActive()) 36 | urTable.setVertex(coordinates.x, coordinates.y); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/activate/ActivateTrigger.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.activate; 2 | 3 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 4 | 5 | /** 6 | * Trigger that activates immediately. Could be used for simple things like 7 | * defining player start location or other trivial things 8 | */ 9 | public class ActivateTrigger extends AbstractQuestTrigger { 10 | private static final long serialVersionUID = 1L; 11 | public static final ActivateTrigger DEFAULT = new ActivateTrigger(); 12 | 13 | @Override public boolean activate(float dt) { 14 | return true; 15 | } 16 | 17 | @Override public AbstractQuestTrigger clone() { 18 | return super.clone(new ActivateTrigger()); 19 | } 20 | 21 | @Override public String toString() { 22 | return "[ActivateTrigger]"; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/activate/ActivateTriggerPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.activate; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentTrigger; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class ActivateTriggerPlugin implements IQuestComponentTrigger{ 12 | @Override public String getBoxText() { 13 | return "Activate"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return ActivateTrigger.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new ActivateTriggerTable(skin, (ActivateTrigger) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/activate/ActivateTriggerTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.activate; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 4 | import com.blastedstudios.gdxworld.plugin.mode.quest.TriggerTable; 5 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 6 | 7 | public class ActivateTriggerTable extends TriggerTable { 8 | private final ActivateTrigger trigger; 9 | 10 | public ActivateTriggerTable(Skin skin, ActivateTrigger trigger) { 11 | super(skin, trigger); 12 | this.trigger = trigger; 13 | } 14 | 15 | @Override public AbstractQuestTrigger apply() { 16 | super.apply(trigger); 17 | return trigger; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/input/InputTrigger.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.input; 2 | 3 | import com.badlogic.gdx.Gdx; 4 | import com.badlogic.gdx.Input.Keys; 5 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 6 | 7 | /** 8 | * Trigger for when a player presses a particular key 9 | */ 10 | public class InputTrigger extends AbstractQuestTrigger { 11 | private static final long serialVersionUID = 1L; 12 | public static final InputTrigger DEFAULT = new InputTrigger(); 13 | private int input = Keys.W; 14 | 15 | public InputTrigger(){} 16 | 17 | public InputTrigger(int input){ 18 | this.input = input; 19 | } 20 | 21 | @Override public boolean activate(float dt) { 22 | return Gdx.input.isKeyPressed(input); 23 | } 24 | 25 | @Override public AbstractQuestTrigger clone() { 26 | return super.clone(new InputTrigger(input)); 27 | } 28 | 29 | @Override public String toString() { 30 | return "[InputTrigger input:" + input + "]"; 31 | } 32 | 33 | public int getInput() { 34 | return input; 35 | } 36 | 37 | public void setInput(int input) { 38 | this.input = input; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/input/InputTriggerPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.input; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentTrigger; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class InputTriggerPlugin implements IQuestComponentTrigger{ 12 | @Override public String getBoxText() { 13 | return "Input"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return InputTrigger.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new InputTriggerTable(skin, (InputTrigger) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/input/InputTriggerTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.input; 2 | 3 | import java.lang.reflect.Field; 4 | 5 | import com.badlogic.gdx.Input.Keys; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 7 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 8 | import com.blastedstudios.gdxworld.plugin.mode.quest.TriggerTable; 9 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 10 | 11 | public class InputTriggerTable extends TriggerTable { 12 | private final InputTrigger trigger; 13 | private final TextField inputText; 14 | 15 | public InputTriggerTable(Skin skin, InputTrigger trigger) { 16 | super(skin, trigger); 17 | this.trigger = trigger; 18 | inputText = new TextField(fromKey(trigger.getInput()), skin); 19 | inputText.setMessageText(""); 20 | add("Input key: "); 21 | add(inputText); 22 | } 23 | 24 | @Override public AbstractQuestTrigger apply() { 25 | super.apply(trigger); 26 | trigger.setInput(toKey(inputText.getText())); 27 | return trigger; 28 | } 29 | 30 | private static int toKey(String key){ 31 | try{ 32 | return Integer.parseInt(key); 33 | }catch(Exception e){ 34 | try { 35 | return (Integer)Keys.class.getField(key).get(Keys.class); 36 | } catch (Exception e1) { 37 | e1.printStackTrace(); 38 | } 39 | } 40 | return 0; 41 | } 42 | 43 | private String fromKey(int key){ 44 | try{ 45 | for(Field field : Keys.class.getFields()) 46 | if(field.get(Keys.class).equals(((Integer)key))) 47 | return field.getName(); 48 | }catch(Exception e){} 49 | return key+""; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/kill/KillTrigger.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.kill; 2 | 3 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 4 | 5 | /** 6 | * Trigger monitoring when a particular named being is killed. Returns true 7 | * if being with name is dead. 8 | */ 9 | public class KillTrigger extends AbstractQuestTrigger { 10 | private static final long serialVersionUID = 1L; 11 | public static final KillTrigger DEFAULT = new KillTrigger("Name"); 12 | private String name = ""; 13 | 14 | public KillTrigger(){} 15 | 16 | public KillTrigger(String name){ 17 | this.name = name; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | public void setName(String name) { 25 | this.name = name; 26 | } 27 | 28 | @Override public boolean activate(float dt) { 29 | return getProvider().isDead(name); 30 | } 31 | 32 | @Override public AbstractQuestTrigger clone(){ 33 | return super.clone(new KillTrigger(name)); 34 | } 35 | 36 | @Override public String toString() { 37 | return "[KillTrigger:" + name + "]"; 38 | } 39 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/kill/KillTriggerPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.kill; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentTrigger; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class KillTriggerPlugin implements IQuestComponentTrigger{ 12 | @Override public String getBoxText() { 13 | return "Kill"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return KillTrigger.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new KillTriggerTable(skin, (KillTrigger) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/kill/KillTriggerTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.kill; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 4 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 5 | import com.blastedstudios.gdxworld.plugin.mode.quest.TriggerTable; 6 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 7 | 8 | public class KillTriggerTable extends TriggerTable{ 9 | private final KillTrigger trigger; 10 | private final TextField nameField; 11 | 12 | public KillTriggerTable(Skin skin, KillTrigger trigger) { 13 | super(skin, trigger); 14 | this.trigger = trigger; 15 | nameField = new TextField(trigger.getName(), skin); 16 | nameField.setMessageText(""); 17 | add("Name: "); 18 | add(nameField); 19 | } 20 | 21 | @Override public AbstractQuestTrigger apply() { 22 | super.apply(trigger); 23 | trigger.setName(nameField.getText()); 24 | return trigger; 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/objectdistance/IObjectDistanceTriggerHandler.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.objectdistance; 2 | 3 | import net.xeoh.plugins.base.Plugin; 4 | import net.xeoh.plugins.base.annotations.PluginImplementation; 5 | 6 | @PluginImplementation 7 | public interface IObjectDistanceTriggerHandler extends Plugin{ 8 | boolean activate(ObjectDistanceTrigger trigger); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/objectdistance/ObjectDistanceTriggerPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.objectdistance; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentTrigger; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class ObjectDistanceTriggerPlugin implements IQuestComponentTrigger{ 12 | @Override public String getBoxText() { 13 | return "Object Distance"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return ObjectDistanceTrigger.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new ObjectDistanceTriggerTable(skin, (ObjectDistanceTrigger) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/objectdistance/ObjectDistanceTriggerTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.objectdistance; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; 4 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 5 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 6 | import com.blastedstudios.gdxworld.plugin.mode.quest.TriggerTable; 7 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 8 | 9 | public class ObjectDistanceTriggerTable extends TriggerTable { 10 | private final ObjectDistanceTrigger trigger; 11 | private final TextField targetText, originText, distanceText; 12 | private final CheckBox actionRequiredBox; 13 | 14 | public ObjectDistanceTriggerTable(Skin skin, ObjectDistanceTrigger trigger) { 15 | super(skin, trigger); 16 | this.trigger = trigger; 17 | targetText = new TextField(trigger.getTarget(), skin); 18 | targetText.setMessageText(""); 19 | originText = new TextField(trigger.getOrigin(), skin); 20 | originText.setMessageText(""); 21 | distanceText = new TextField(trigger.getDistance()+"", skin); 22 | distanceText.setMessageText(""); 23 | actionRequiredBox = new CheckBox("Action Required", skin); 24 | actionRequiredBox.setChecked(trigger.isActionRequired()); 25 | add("Origin: "); 26 | add(originText); 27 | row(); 28 | add("Target: "); 29 | add(targetText); 30 | row(); 31 | add("Distance: "); 32 | add(distanceText); 33 | row(); 34 | add(actionRequiredBox); 35 | } 36 | 37 | @Override public AbstractQuestTrigger apply() { 38 | super.apply(trigger); 39 | trigger.setTarget(targetText.getText()); 40 | trigger.setDistance(Float.parseFloat(distanceText.getText())); 41 | trigger.setActionRequired(actionRequiredBox.isChecked()); 42 | trigger.setOrigin(originText.getText()); 43 | return trigger; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/person/PersonTrigger.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.person; 2 | 3 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 4 | 5 | /** 6 | * Tracks the distance between two beings. Triggers when distance is below a 7 | * certain threshold. 8 | */ 9 | public class PersonTrigger extends AbstractQuestTrigger { 10 | private static final long serialVersionUID = 1L; 11 | public static final PersonTrigger DEFAULT = new PersonTrigger("Origin", "Target", 1); 12 | private String origin = "", target = ""; 13 | private float distance; 14 | 15 | public PersonTrigger(){} 16 | 17 | public PersonTrigger(String origin, String target, float distance){ 18 | this.origin = origin; 19 | this.target = target; 20 | this.distance = distance; 21 | } 22 | 23 | public String getOrigin() { 24 | return origin; 25 | } 26 | 27 | public void setOrigin(String origin) { 28 | this.origin = origin; 29 | } 30 | 31 | public String getTarget() { 32 | return target; 33 | } 34 | 35 | public void setTarget(String target) { 36 | this.target = target; 37 | } 38 | 39 | public float getDistance() { 40 | return distance; 41 | } 42 | 43 | public void setDistance(float distance) { 44 | this.distance = distance; 45 | } 46 | 47 | @Override public boolean activate(float dt) { 48 | return getProvider().isNear(origin, target, distance); 49 | } 50 | 51 | @Override public AbstractQuestTrigger clone(){ 52 | return super.clone(new PersonTrigger(origin, target, distance)); 53 | } 54 | 55 | @Override public String toString() { 56 | return "[PersonTrigger: origin:" + origin + " target:" + target + " distance:" + distance + "]"; 57 | } 58 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/person/PersonTriggerPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.person; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentTrigger; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class PersonTriggerPlugin implements IQuestComponentTrigger{ 12 | @Override public String getBoxText() { 13 | return "Person"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return PersonTrigger.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new PersonTriggerTable(skin, (PersonTrigger) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/person/PersonTriggerTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.person; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 4 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 5 | import com.blastedstudios.gdxworld.plugin.mode.quest.TriggerTable; 6 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 7 | 8 | public class PersonTriggerTable extends TriggerTable { 9 | private final PersonTrigger trigger; 10 | private final TextField targetText, originText, distanceText; 11 | 12 | public PersonTriggerTable(Skin skin, PersonTrigger trigger) { 13 | super(skin, trigger); 14 | this.trigger = trigger; 15 | originText = new TextField(trigger.getOrigin(), skin); 16 | originText.setMessageText(""); 17 | targetText = new TextField(trigger.getTarget(), skin); 18 | targetText.setMessageText(""); 19 | distanceText = new TextField(trigger.getDistance()+"", skin); 20 | distanceText.setMessageText(""); 21 | add("Origin: "); 22 | add(originText); 23 | row(); 24 | add("Target: "); 25 | add(targetText); 26 | row(); 27 | add("Distance: "); 28 | add(distanceText); 29 | row(); 30 | } 31 | 32 | @Override public AbstractQuestTrigger apply() { 33 | super.apply(trigger); 34 | trigger.setOrigin(originText.getText()); 35 | trigger.setTarget(targetText.getText()); 36 | trigger.setDistance(Float.parseFloat(distanceText.getText())); 37 | return trigger; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/time/TimeTrigger.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.time; 2 | 3 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 4 | 5 | public class TimeTrigger extends AbstractQuestTrigger { 6 | private static final long serialVersionUID = 1L; 7 | public static final TimeTrigger DEFAULT = new TimeTrigger(0); 8 | private long time; 9 | private transient float duration = -1f; 10 | 11 | public TimeTrigger(){} 12 | public TimeTrigger(long time){ 13 | this.time = time; 14 | } 15 | 16 | @Override public boolean activate(float dt) { 17 | if(duration == -1f) 18 | reinitialize(); 19 | duration -= dt; 20 | return duration <= 0f; 21 | } 22 | 23 | @Override public AbstractQuestTrigger clone(){ 24 | return super.clone(new TimeTrigger(time)); 25 | } 26 | 27 | @Override public String toString() { 28 | return "[TimeTrigger time:" + time + "]"; 29 | } 30 | 31 | public long getTime() { 32 | return time; 33 | } 34 | 35 | public void setTime(long time) { 36 | this.time = time; 37 | } 38 | 39 | @Override public void reinitialize() { 40 | duration = ((float)time)/1000f; 41 | } 42 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/time/TimeTriggerPlugin.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.time; 2 | 3 | import net.xeoh.plugins.base.annotations.PluginImplementation; 4 | 5 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 6 | import com.badlogic.gdx.scenes.scene2d.ui.Table; 7 | import com.blastedstudios.gdxworld.plugin.mode.quest.IQuestComponent.IQuestComponentTrigger; 8 | import com.blastedstudios.gdxworld.world.quest.ICloneable; 9 | 10 | @PluginImplementation 11 | public class TimeTriggerPlugin implements IQuestComponentTrigger{ 12 | @Override public String getBoxText() { 13 | return "Time"; 14 | } 15 | 16 | @Override public ICloneable getDefault() { 17 | return TimeTrigger.DEFAULT; 18 | } 19 | 20 | @Override public Table createTable(Skin skin, Object object) { 21 | return new TimeTriggerTable(skin, (TimeTrigger) object); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/com/blastedstudios/gdxworld/plugin/quest/trigger/time/TimeTriggerTable.java: -------------------------------------------------------------------------------- 1 | package com.blastedstudios.gdxworld.plugin.quest.trigger.time; 2 | 3 | import com.badlogic.gdx.scenes.scene2d.ui.Skin; 4 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; 5 | import com.blastedstudios.gdxworld.plugin.mode.quest.TriggerTable; 6 | import com.blastedstudios.gdxworld.world.quest.trigger.AbstractQuestTrigger; 7 | 8 | public class TimeTriggerTable extends TriggerTable { 9 | private final TimeTrigger trigger; 10 | private final TextField timeText; 11 | 12 | public TimeTriggerTable(Skin skin, TimeTrigger trigger) { 13 | super(skin, trigger); 14 | this.trigger = trigger; 15 | timeText = new TextField(trigger.getTime()+"", skin); 16 | timeText.setMessageText("