diff --git a/src/net/torvald/serialise/WriteMeta.kt b/src/net/torvald/serialise/WriteMeta.kt index f5e00271f..eee3ecdf2 100644 --- a/src/net/torvald/serialise/WriteMeta.kt +++ b/src/net/torvald/serialise/WriteMeta.kt @@ -45,7 +45,7 @@ object WriteMeta { // define Strings to be hashed val props = arrayOf( - TilePropCSV.text + TilePropCSV() //, (item, mat, ...) ) diff --git a/src/net/torvald/spriteanimation/SpriteAnimation.kt b/src/net/torvald/spriteanimation/SpriteAnimation.kt index c4460d064..b160d0479 100644 --- a/src/net/torvald/spriteanimation/SpriteAnimation.kt +++ b/src/net/torvald/spriteanimation/SpriteAnimation.kt @@ -7,13 +7,13 @@ package net.torvald.spriteanimation import net.torvald.terrarum.StateInGame import net.torvald.terrarum.Terrarum import com.jme3.math.FastMath +import net.torvald.terrarum.gameactors.ActorWithBody import org.newdawn.slick.Graphics import org.newdawn.slick.Image import org.newdawn.slick.SlickException import org.newdawn.slick.SpriteSheet -class SpriteAnimation @Throws(SlickException::class) -constructor() { +class SpriteAnimation(val parentActor: ActorWithBody) { private var spriteImage: SpriteSheet? = null var height: Int = 0 @@ -30,7 +30,8 @@ constructor() { private var animationRunning = true private var flipHorizontal = false private var flipVertical = false - private var visible = false + private val visible: Boolean + get() = parentActor.isVisible private val offsetX = 0 private val offsetY = 0 @@ -81,14 +82,6 @@ constructor() { nFrames = frames } - fun setAsVisible() { - visible = true - } - - fun setAsInvisible() { - visible = false - } - fun update(delta: Int) { if (animationRunning) { //skip this if animation is stopped diff --git a/src/net/torvald/terrarum/StateInGame.kt b/src/net/torvald/terrarum/StateInGame.kt index 506645ab9..3972d4bf6 100644 --- a/src/net/torvald/terrarum/StateInGame.kt +++ b/src/net/torvald/terrarum/StateInGame.kt @@ -123,11 +123,17 @@ constructor() : BasicGameState() { // add new player and put it to actorContainer - playableActorDelegate = PlayableActorDelegate(PlayerBuilderSigrid.create()) + playableActorDelegate = PlayableActorDelegate(PlayerBuilderSigrid()) //player = PBCynthia.create() //player.setNoClip(true); addActor(player) + + // test actor + addActor(PlayerBuilderCynthia()) + + + // init console window consoleHandler = UIHandler(ConsoleWindow()) consoleHandler.setPosition(0, 0) @@ -488,7 +494,7 @@ constructor() : BasicGameState() { } // inactivate distant actors else if (actor is ActorWithBody && !actor.inUpdateRange()) { - if (actor !is Projectile) { // if it's a projectile, just kill it. + if (actor !is Projectile) { // if it's a projectile, don't inactivate it; just kill it. actorContainerInactive.add(actor) // naïve add; duplicates are checked when the actor is re-activated } actorContainer.removeAt(actorIndex) diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index 80d8a8d2a..02b660661 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -111,10 +111,10 @@ constructor(gamename: String) : StateBasedGame(gamename) { //addState(StateSplash()) //addState(StateMonitorCheck()) //addState(StateFontTester()) - addState(StateNoiseTexGen()) + //addState(StateNoiseTexGen()) - //ingame = StateInGame() - //addState(ingame) + ingame = StateInGame() + addState(ingame) } companion object { @@ -218,17 +218,17 @@ constructor(gamename: String) : StateBasedGame(gamename) { var hasController = false val CONTROLLER_DEADZONE = 0.1f - /** Available CPU cores */ - val CORES = Runtime.getRuntime().availableProcessors() + /** Available CPU threads */ + val THREADS = Runtime.getRuntime().availableProcessors() /** * If the game is multithreading. * True if: * - * CORES >= 2 and config "multithread" is true + * THREADS >= 2 and config "multithread" is true */ val MULTITHREAD: Boolean - get() = CORES >= 2 && getConfigBoolean("multithread") + get() = THREADS >= 2 && getConfigBoolean("multithread") private lateinit var configDir: String @@ -432,6 +432,8 @@ fun main(args: Array) { Terrarum.main(args) } +// I must say: What the fuck is wrong with you, Slick2D?! + fun blendMul() { GL11.glEnable(GL11.GL_BLEND) GL11.glColorMask(true, true, true, true) @@ -445,8 +447,8 @@ fun blendNormal() { // TODO seems working as intended (no more whitened-out semitransparent colour), but needs further investigation GL14.glBlendFuncSeparate( - GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, - GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA + GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, // blend func for RGB channels + GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA // blend func for alpha channels ) } diff --git a/src/net/torvald/terrarum/concurrent/ThreadPool.kt b/src/net/torvald/terrarum/concurrent/ThreadPool.kt index 84358509f..d298c0f95 100644 --- a/src/net/torvald/terrarum/concurrent/ThreadPool.kt +++ b/src/net/torvald/terrarum/concurrent/ThreadPool.kt @@ -7,7 +7,7 @@ import java.util.* * Created by minjaesong on 16-05-25. */ object ThreadPool { - val POOL_SIZE = Terrarum.CORES + 1 + val POOL_SIZE = Terrarum.THREADS + 1 private val pool: Array = Array(POOL_SIZE, { null }) diff --git a/src/net/torvald/terrarum/gameactors/Actor.kt b/src/net/torvald/terrarum/gameactors/Actor.kt index a034c5ffb..7ec2820bb 100644 --- a/src/net/torvald/terrarum/gameactors/Actor.kt +++ b/src/net/torvald/terrarum/gameactors/Actor.kt @@ -16,7 +16,7 @@ abstract class Actor : Comparable, Runnable { * Valid RefID is equal to or greater than 16777216. * @return Reference ID. (16777216-0x7FFF_FFFF) */ - abstract var referenceID: Int + open var referenceID: Int = generateUniqueReferenceID() abstract var actorValue: ActorValue abstract var flagDespawn: Boolean diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index 0598251d3..ae79a449b 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -23,7 +23,6 @@ import java.util.* */ open class ActorWithBody : Actor() { - override var referenceID: Int = generateUniqueReferenceID() override var actorValue: ActorValue = ActorValue() @Transient internal var sprite: SpriteAnimation? = null @@ -155,8 +154,8 @@ open class ActorWithBody : Actor() { @Volatile var grounded = false override @Volatile var flagDespawn = false - /** Default to 'false' */ - var isVisible = false + /** Default to 'true' */ + var isVisible = true /** Default to 'true' */ var isUpdate = true var isNoSubjectToGrav = false @@ -255,12 +254,12 @@ open class ActorWithBody : Actor() { } fun makeNewSprite(w: Int, h: Int) { - sprite = SpriteAnimation() + sprite = SpriteAnimation(this) sprite!!.setDimension(w, h) } fun makeNewSpriteGlow(w: Int, h: Int) { - spriteGlow = SpriteAnimation() + spriteGlow = SpriteAnimation(this) spriteGlow!!.setDimension(w, h) } @@ -943,6 +942,8 @@ open class ActorWithBody : Actor() { open fun drawBody(gc: GameContainer, g: Graphics) { if (isVisible && sprite != null) { + + when (drawMode) { BLEND_NORMAL -> blendNormal() BLEND_MULTIPLY -> blendMul() diff --git a/src/net/torvald/terrarum/gameactors/CreatureBuilder.kt b/src/net/torvald/terrarum/gameactors/CreatureBuilder.kt index 7c57d93b9..0905089c6 100644 --- a/src/net/torvald/terrarum/gameactors/CreatureBuilder.kt +++ b/src/net/torvald/terrarum/gameactors/CreatureBuilder.kt @@ -18,9 +18,9 @@ object CreatureBuilder { * @Param jsonFileName with extension */ @Throws(IOException::class, SlickException::class) - fun create(jsonFileName: String): ActorWithBody { + operator fun invoke(jsonFileName: String): ActorWithBody { val actor = ActorWithBody() - CreatureRawInjector.inject(actor.actorValue, jsonFileName) + InjectCreatureRaw(actor.actorValue, jsonFileName) return actor } diff --git a/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt index 2bb49af25..34b357e40 100644 --- a/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt @@ -18,7 +18,6 @@ class FixtureTikiTorch : FixtureBase(), Luminous { override val lightBoxList: ArrayList init { - isVisible = true density = 1200.0 setHitboxDimension(10, 24, 0, 0) @@ -26,12 +25,10 @@ class FixtureTikiTorch : FixtureBase(), Luminous { lightBoxList = ArrayList(1) lightBoxList.add(Hitbox(3.0, 0.0, 4.0, 3.0)) - sprite = SpriteAnimation() - sprite!!.setDimension(10, 27) + makeNewSprite(10, 27) sprite!!.setSpriteImage("assets/graphics/sprites/fixtures/tiki_torch.png") sprite!!.setDelay(200) sprite!!.setRowsAndFrames(1, 1) - sprite!!.setAsVisible() actorValue[AVKey.BASEMASS] = 1.0 } diff --git a/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt b/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt index 799204b64..4c7edb123 100644 --- a/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt +++ b/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt @@ -18,22 +18,15 @@ import java.io.Reader /** * Created by minjaesong on 16-01-31. */ -open class HumanoidNPC(aiFile: String, born: GameDate) : ActorHumanoid(born), AIControlled, CanBeAnItem { +open class HumanoidNPC(luaScript: String, born: GameDate) : ActorHumanoid(born), AIControlled, CanBeAnItem { - override val scriptPath: String = aiFile + override val scriptPath: String = "" companion object { protected val luag = Globals() init { luag.load(JseBaseLib()) - luag.load(TableLib()) - luag.load(StringLib()) - luag.load(TableLib()) - luag.load(CoroutineLib()) - luag.load(Bit32Lib()) - luag.load(PackageLib()) - luag.load(JseMathLib()) LoadState.install(luag) LuaC.install(luag) } @@ -77,8 +70,9 @@ open class HumanoidNPC(aiFile: String, born: GameDate) : ActorHumanoid(born), AI init { - val inputStream = javaClass.getResourceAsStream(scriptPath) - runCommand(InputStreamReader(inputStream), scriptPath) + //val inputStream = javaClass.getResourceAsStream(scriptPath) + //runCommand(InputStreamReader(inputStream), scriptPath) + runCommand(luaScript) } @@ -130,6 +124,14 @@ open class HumanoidNPC(aiFile: String, born: GameDate) : ActorHumanoid(born), AI } } + fun runCommand(script: String) { + if (!threadRun && !flagDespawn) { + currentExecutionThread = Thread(ThreadRunCommand(luag, script, "=")) + currentExecutionThread.start() + threadRun = true + } + } + class ThreadRunCommand : Runnable { val mode: Int diff --git a/src/net/torvald/terrarum/gameactors/CreatureRawInjector.kt b/src/net/torvald/terrarum/gameactors/InjectCreatureRaw.kt similarity index 96% rename from src/net/torvald/terrarum/gameactors/CreatureRawInjector.kt rename to src/net/torvald/terrarum/gameactors/InjectCreatureRaw.kt index ee323256d..c145adb7c 100644 --- a/src/net/torvald/terrarum/gameactors/CreatureRawInjector.kt +++ b/src/net/torvald/terrarum/gameactors/InjectCreatureRaw.kt @@ -12,7 +12,7 @@ import java.security.SecureRandom /** * Created by minjaesong on 16-03-25. */ -object CreatureRawInjector { +object InjectCreatureRaw { const val JSONPATH = "./assets/raw/creatures/" private const val MULTIPLIER_RAW_ELEM_SUFFIX = AVKey.MULT @@ -23,8 +23,7 @@ object CreatureRawInjector { * @param actorValueRef ActorValue object to be injected. * @param jsonFileName with extension */ - @Throws(IOException::class, SlickException::class) - fun inject(actorValueRef: ActorValue, jsonFileName: String) { + operator fun invoke(actorValueRef: ActorValue, jsonFileName: String) { val jsonObj = JsonFetcher(JSONPATH + jsonFileName) val elementsInt = arrayOf(AVKey.BASEHEIGHT, AVKey.TOOLSIZE, AVKey.ENCUMBRANCE) diff --git a/src/net/torvald/terrarum/gameactors/PhysTestBall.kt b/src/net/torvald/terrarum/gameactors/PhysTestBall.kt index e63ea6322..b4e877836 100644 --- a/src/net/torvald/terrarum/gameactors/PhysTestBall.kt +++ b/src/net/torvald/terrarum/gameactors/PhysTestBall.kt @@ -16,7 +16,6 @@ class PhysTestBall : ActorWithBody() { init { setHitboxDimension(16, 16, 0, 0) - isVisible = true mass = 10.0 density = 200.0 diff --git a/src/net/torvald/terrarum/gameactors/Player.kt b/src/net/torvald/terrarum/gameactors/Player.kt index cdefcabe2..d5af49107 100644 --- a/src/net/torvald/terrarum/gameactors/Player.kt +++ b/src/net/torvald/terrarum/gameactors/Player.kt @@ -40,7 +40,6 @@ class Player(born: GameDate) : ActorHumanoid(born) { * @throws SlickException */ init { - isVisible = true referenceID = PLAYER_REF_ID // forcibly set ID density = BASE_DENSITY collisionType = COLLISION_KINEMATIC diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilder.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilder.kt index b04fd98e9..ec101443f 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilder.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilder.kt @@ -11,9 +11,9 @@ object PlayerBuilder { private val JSONPATH = "./assets/raw/" private val jsonString = String() - fun create(): Actor { + operator fun invoke(): Actor { val p: Actor = Player(Terrarum.ingame.world.time.currentTimeAsGameDate) - CreatureRawInjector.inject(p.actorValue, "CreatureHuman.json") + InjectCreatureRaw(p.actorValue, "CreatureHuman.json") // attach sprite diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderCynthia.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderCynthia.kt index 1af2c77c4..f65834c01 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderCynthia.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderCynthia.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum.gameactors import net.torvald.spriteanimation.SpriteAnimation import net.torvald.terrarum.gameactors.ActorHumanoid +import net.torvald.terrarum.gameactors.ai.scripts.PokemonNPCAI import net.torvald.terrarum.mapdrawer.MapDrawer /** @@ -9,25 +10,25 @@ import net.torvald.terrarum.mapdrawer.MapDrawer */ object PlayerBuilderCynthia { - fun create(): Player { - val p: Player = Player(GameDate(100, 143)) // random value thrown - CreatureRawInjector.inject(p.actorValue, "CreatureHuman.json") + operator fun invoke(): ActorWithBody { + //val p: Player = Player(GameDate(100, 143)) // random value thrown + val p: HumanoidNPC = HumanoidNPC(PokemonNPCAI(), GameDate(100, 143)) // random value thrown + InjectCreatureRaw(p.actorValue, "CreatureHuman.json") p.actorValue[AVKey.__PLAYER_QUICKBARSEL] = 0 - p.actorValue["__selectedtile"] = 16 p.makeNewSprite(26, 42) p.sprite!!.setSpriteImage("assets/graphics/sprites/test_player_2.png") p.sprite!!.setDelay(200) p.sprite!!.setRowsAndFrames(1, 1) - p.sprite!!.setAsVisible() p.setHitboxDimension(15, p.actorValue.getAsInt(AVKey.BASEHEIGHT) ?: ActorHumanoid.BASE_HEIGHT, 9, 0) - p.setPosition((4096 * MapDrawer.TILE_SIZE).toDouble(), (300 * 16).toDouble()) + p.setPosition(4096.0 * MapDrawer.TILE_SIZE, 300.0 * MapDrawer.TILE_SIZE) return p } + } \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt index e0053eaff..a0fa2cf24 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt @@ -21,7 +21,7 @@ import java.io.IOException object PlayerBuilderSigrid { - fun create(): Player { + operator fun invoke(): Player { val p = Player(GameDate(-2147483648, 0)) // XD p.referenceID = 0x51621D // the only constant of this procedural universe @@ -30,13 +30,11 @@ object PlayerBuilderSigrid { p.sprite!!.setSpriteImage("assets/graphics/sprites/test_player.png") p.sprite!!.setDelay(200) p.sprite!!.setRowsAndFrames(1, 1) - p.sprite!!.setAsVisible() p.makeNewSpriteGlow(28, 51) p.spriteGlow!!.setSpriteImage("assets/graphics/sprites/test_player_glow.tga") p.spriteGlow!!.setDelay(200) p.spriteGlow!!.setRowsAndFrames(1, 1) - p.spriteGlow!!.setAsVisible() p.actorValue = ActorValue() p.actorValue[AVKey.SCALE] = 1.0 diff --git a/src/net/torvald/terrarum/gameactors/ai/scripts/PokemonNPCAI.kt b/src/net/torvald/terrarum/gameactors/ai/scripts/PokemonNPCAI.kt new file mode 100644 index 000000000..1966078bb --- /dev/null +++ b/src/net/torvald/terrarum/gameactors/ai/scripts/PokemonNPCAI.kt @@ -0,0 +1,10 @@ +package net.torvald.terrarum.gameactors.ai.scripts + +/** + * Created by SKYHi14 on 2016-12-23. + */ +object PokemonNPCAI { + operator fun invoke(): String = """ + +""" +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/tileproperties/TileCodex.kt b/src/net/torvald/terrarum/tileproperties/TileCodex.kt index b8ab757d3..09d879f97 100644 --- a/src/net/torvald/terrarum/tileproperties/TileCodex.kt +++ b/src/net/torvald/terrarum/tileproperties/TileCodex.kt @@ -29,7 +29,7 @@ object TileCodex { try { // todo verify CSV using pre-calculated SHA256 hash - val records = CSVFetcher.readFromString(TilePropCSV.text) + val records = CSVFetcher.readFromString(TilePropCSV()) println("[TileCodex] Building tile properties table") diff --git a/src/net/torvald/terrarum/tileproperties/TilePropCSV.kt b/src/net/torvald/terrarum/tileproperties/TilePropCSV.kt index c1e30f5ec..238eb559a 100644 --- a/src/net/torvald/terrarum/tileproperties/TilePropCSV.kt +++ b/src/net/torvald/terrarum/tileproperties/TilePropCSV.kt @@ -4,7 +4,7 @@ package net.torvald.terrarum.tileproperties * Created by minjaesong on 16-09-11. */ object TilePropCSV { - const val text = """ + operator fun invoke() = """ "id";"dmg";"name" ; "opacity";"strength";"dsty";"mate";"fluid";"solid";"wall"; "lumcolor";"drop";"ddmg";"fall";"dlfn";"friction" "0"; "0";"TILE_AIR" ; "8396808"; "0"; "1";"null"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"4" "1"; "0";"TILE_STONE" ; "33587232"; "25";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "0"; "0"; "0";"16" diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index e3e399917..3960dc7ba 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -151,7 +151,7 @@ class BasicDebugInfoWindow : UICanvas { g.color = GameFontBase.codeToCol["y"] g.drawString("${ccY}MEM ", (Terrarum.WIDTH - 15 * 8 - 2).toFloat(), 2f) //g.drawString("${ccY}FPS $ccG${Terrarum.appgc.fps}", (Terrarum.WIDTH - 6 * 8 - 2).toFloat(), 10f) - g.drawString("${ccY}CPUs ${if (Terrarum.MULTITHREAD) ccG else ccR}${Terrarum.CORES}", + g.drawString("${ccY}CPUs ${if (Terrarum.MULTITHREAD) ccG else ccR}${Terrarum.THREADS}", (Terrarum.WIDTH - 2 - 6*8).toFloat(), 10f) g.color = GameFontBase.codeToCol["g"] diff --git a/work_files/UML/actors.mdj b/work_files/UML/actors.mdj index 261b10e9f..3f8ad12db 100644 --- a/work_files/UML/actors.mdj +++ b/work_files/UML/actors.mdj @@ -910,7 +910,7 @@ "containerChangeable": false, "containerExtending": false, "left": 81, - "top": 655, + "top": 649, "width": 0, "height": 13, "autoResize": false, @@ -944,7 +944,7 @@ "containerChangeable": false, "containerExtending": false, "left": 66, - "top": 655, + "top": 649, "width": 0, "height": 13, "autoResize": false, @@ -978,7 +978,7 @@ "containerChangeable": false, "containerExtending": false, "left": 111, - "top": 656, + "top": 650, "width": 0, "height": 13, "autoResize": false, @@ -1010,7 +1010,7 @@ "$ref": "AAAAAAFYplWBi2f5GNY=" }, "lineStyle": 2, - "points": "128:662;96:662;96:480", + "points": "128:656;96:656;96:480", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -4591,7 +4591,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 744, + "left": 696, "top": 1136, "width": 0, "height": 13, @@ -4616,7 +4616,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 621, + "left": 597, "top": 1111, "width": 40.94873046875, "height": 13, @@ -4642,7 +4642,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 744, + "left": 696, "top": 1136, "width": 223, "height": 13, @@ -4668,7 +4668,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 744, + "left": 696, "top": 1136, "width": 0, "height": 13, @@ -4688,7 +4688,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 616, + "left": 592, "top": 1104, "width": 50.94873046875, "height": 25, @@ -4724,7 +4724,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 616, + "left": 592, "top": 1129, "width": 50.94873046875, "height": 10, @@ -4748,7 +4748,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 616, + "left": 592, "top": 1139, "width": 50.94873046875, "height": 10, @@ -4772,7 +4772,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 432, + "left": 408, "top": 528, "width": 10, "height": 10, @@ -4796,7 +4796,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 432, + "left": 408, "top": 528, "width": 10, "height": 10, @@ -4812,7 +4812,7 @@ "showShadow": true, "containerChangeable": true, "containerExtending": false, - "left": 616, + "left": 592, "top": 1104, "width": 50.94873046875, "height": 45, @@ -4881,7 +4881,7 @@ "containerExtending": false, "left": 357, "top": 821, - "width": 166.92431640625, + "width": 167, "height": 13, "autoResize": false, "underline": false, @@ -4907,7 +4907,7 @@ "containerExtending": false, "left": 357, "top": 836, - "width": 166.92431640625, + "width": 167, "height": 13, "autoResize": false, "underline": false, @@ -4979,7 +4979,7 @@ "containerExtending": false, "left": 352, "top": 816, - "width": 176.92431640625, + "width": 177, "height": 38, "autoResize": false, "stereotypeLabel": { @@ -5025,7 +5025,7 @@ "containerExtending": false, "left": 357, "top": 859, - "width": 166.92431640625, + "width": 167, "height": 13, "autoResize": false, "underline": false, @@ -5054,7 +5054,7 @@ "containerExtending": false, "left": 357, "top": 874, - "width": 166.92431640625, + "width": 167, "height": 13, "autoResize": false, "underline": false, @@ -5075,7 +5075,7 @@ "containerExtending": false, "left": 352, "top": 854, - "width": 176.92431640625, + "width": 177, "height": 38, "autoResize": false }, @@ -5099,7 +5099,7 @@ "containerExtending": false, "left": 352, "top": 892, - "width": 176.92431640625, + "width": 177, "height": 10, "autoResize": false }, @@ -5163,7 +5163,7 @@ "containerExtending": false, "left": 352, "top": 816, - "width": 176.92431640625, + "width": 177, "height": 86, "autoResize": false, "stereotypeDisplay": "label", @@ -9376,6 +9376,580 @@ "propertyLabel": { "$ref": "AAAAAAFZB/aY/8WcvSw=" } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFZJ0Tfp5SKqYM=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAFZJ0TfppSIKrU=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFZJ0Tfp5SLuHo=", + "_parent": { + "$ref": "AAAAAAFZJ0Tfp5SKqYM=" + }, + "model": { + "$ref": "AAAAAAFZJ0TfppSIKrU=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFZJ0TfqJSM630=", + "_parent": { + "$ref": "AAAAAAFZJ0Tfp5SLuHo=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -64, + "top": 0, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFZJ0TfqJSNGMw=", + "_parent": { + "$ref": "AAAAAAFZJ0Tfp5SLuHo=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 661, + "top": 1111, + "width": 91, + "height": 13, + "autoResize": false, + "underline": false, + "text": "HumanoidNPC", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFZJ0TfqJSOOvU=", + "_parent": { + "$ref": "AAAAAAFZJ0Tfp5SLuHo=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -64, + "top": 0, + "width": 73.67724609375, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from Model)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFZJ0TfqJSPUL8=", + "_parent": { + "$ref": "AAAAAAFZJ0Tfp5SLuHo=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -64, + "top": 0, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 656, + "top": 1104, + "width": 101, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFZJ0TfqJSM630=" + }, + "nameLabel": { + "$ref": "AAAAAAFZJ0TfqJSNGMw=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFZJ0TfqJSOOvU=" + }, + "propertyLabel": { + "$ref": "AAAAAAFZJ0TfqJSPUL8=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFZJ0TfqJSQoc8=", + "_parent": { + "$ref": "AAAAAAFZJ0Tfp5SKqYM=" + }, + "model": { + "$ref": "AAAAAAFZJ0TfppSIKrU=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 656, + "top": 1129, + "width": 101, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFZJ0TfqJSRzvI=", + "_parent": { + "$ref": "AAAAAAFZJ0Tfp5SKqYM=" + }, + "model": { + "$ref": "AAAAAAFZJ0TfppSIKrU=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 656, + "top": 1139, + "width": 101, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFZJ0TfqJSStM8=", + "_parent": { + "$ref": "AAAAAAFZJ0Tfp5SKqYM=" + }, + "model": { + "$ref": "AAAAAAFZJ0TfppSIKrU=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -32, + "top": 0, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFZJ0TfqJSTJSI=", + "_parent": { + "$ref": "AAAAAAFZJ0Tfp5SKqYM=" + }, + "model": { + "$ref": "AAAAAAFZJ0TfppSIKrU=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -32, + "top": 0, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 656, + "top": 1104, + "width": 101, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFZJ0Tfp5SLuHo=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFZJ0TfqJSQoc8=" + }, + "operationCompartment": { + "$ref": "AAAAAAFZJ0TfqJSRzvI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFZJ0TfqJSStM8=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFZJ0TfqJSTJSI=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAFZJ0UJUJTYebA=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAFZJ0UJT5TW9Ys=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFZJ0UJUJTZJhg=", + "_parent": { + "$ref": "AAAAAAFZJ0UJUJTYebA=" + }, + "model": { + "$ref": "AAAAAAFZJ0UJT5TW9Ys=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 667, + "top": 1071, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFZJ0UJUJTYebA=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFZJ0UJUJTaOQY=", + "_parent": { + "$ref": "AAAAAAFZJ0UJUJTYebA=" + }, + "model": { + "$ref": "AAAAAAFZJ0UJT5TW9Ys=" + }, + "visible": null, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 652, + "top": 1071, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFZJ0UJUJTYebA=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFZJ0UJUJTbT+U=", + "_parent": { + "$ref": "AAAAAAFZJ0UJUJTYebA=" + }, + "model": { + "$ref": "AAAAAAFZJ0UJT5TW9Ys=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 696, + "top": 1072, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFZJ0UJUJTYebA=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "head": { + "$ref": "AAAAAAFYplR452dt4u8=" + }, + "tail": { + "$ref": "AAAAAAFZJ0Tfp5SKqYM=" + }, + "lineStyle": 2, + "points": "682:1104;682:1052", + "stereotypeDisplay": "label", + "showVisibility": true, + "showProperty": true, + "nameLabel": { + "$ref": "AAAAAAFZJ0UJUJTZJhg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFZJ0UJUJTaOQY=" + }, + "propertyLabel": { + "$ref": "AAAAAAFZJ0UJUJTbT+U=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAFZK34BdLP0LR4=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAFZK34BdLPyGik=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFZK34BdLP1hH4=", + "_parent": { + "$ref": "AAAAAAFZK34BdLP0LR4=" + }, + "model": { + "$ref": "AAAAAAFZK34BdLPyGik=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 230, + "top": 649, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFZK34BdLP0LR4=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFZK34BdLP2MlI=", + "_parent": { + "$ref": "AAAAAAFZK34BdLP0LR4=" + }, + "model": { + "$ref": "AAAAAAFZK34BdLPyGik=" + }, + "visible": null, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 215, + "top": 649, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFZK34BdLP0LR4=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFZK34BdbP39AM=", + "_parent": { + "$ref": "AAAAAAFZK34BdLP0LR4=" + }, + "model": { + "$ref": "AAAAAAFZK34BdLPyGik=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 260, + "top": 650, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFZK34BdLP0LR4=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "head": { + "$ref": "AAAAAAFYplBdqGVJPVc=" + }, + "tail": { + "$ref": "AAAAAAFYplPlN2cIYnI=" + }, + "lineStyle": 2, + "points": "352:656;245:656;245:480", + "stereotypeDisplay": "label", + "showVisibility": true, + "showProperty": true, + "nameLabel": { + "$ref": "AAAAAAFZK34BdLP1hH4=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFZK34BdLP2MlI=" + }, + "propertyLabel": { + "$ref": "AAAAAAFZK34BdbP39AM=" + } } ] }, @@ -10047,6 +10621,20 @@ "$ref": "AAAAAAFYpmYlfnwyF/k=" }, "visibility": "public" + }, + { + "_type": "UMLGeneralization", + "_id": "AAAAAAFZK34BdLPyGik=", + "_parent": { + "$ref": "AAAAAAFYplPlN2cGJWo=" + }, + "source": { + "$ref": "AAAAAAFYplPlN2cGJWo=" + }, + "target": { + "$ref": "AAAAAAFYplBdp2VHGxk=" + }, + "visibility": "public" } ], "visibility": "public", @@ -11140,6 +11728,35 @@ "isAbstract": false, "isFinalSpecialization": false, "isLeaf": false + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFZJ0TfppSIKrU=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "HumanoidNPC", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAFZJ0UJT5TW9Ys=", + "_parent": { + "$ref": "AAAAAAFZJ0TfppSIKrU=" + }, + "source": { + "$ref": "AAAAAAFZJ0TfppSIKrU=" + }, + "target": { + "$ref": "AAAAAAFYplR452drOZI=" + }, + "visibility": "public" + } + ], + "visibility": "public", + "isAbstract": false, + "isFinalSpecialization": false, + "isLeaf": false, + "isActive": false } ], "visibility": "public" diff --git a/work_files/UML/actors.png b/work_files/UML/actors.png new file mode 100644 index 000000000..10cae6a30 Binary files /dev/null and b/work_files/UML/actors.png differ