visible actors are defaulted to Visible, SpriteAnimations now has "parent" actors and uses its Visible property

Former-commit-id: 0e240de4ca38a59724f364df4624c8dc79c0112d
Former-commit-id: b017b24ab7591ea2fd2518308bd5656597c14f47
This commit is contained in:
Song Minjae
2016-12-23 20:49:29 +09:00
parent 106afb4f49
commit 944c71d691
22 changed files with 712 additions and 88 deletions

View File

@@ -45,7 +45,7 @@ object WriteMeta {
// define Strings to be hashed // define Strings to be hashed
val props = arrayOf( val props = arrayOf(
TilePropCSV.text TilePropCSV()
//, (item, mat, ...) //, (item, mat, ...)
) )

View File

@@ -7,13 +7,13 @@ package net.torvald.spriteanimation
import net.torvald.terrarum.StateInGame import net.torvald.terrarum.StateInGame
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import com.jme3.math.FastMath import com.jme3.math.FastMath
import net.torvald.terrarum.gameactors.ActorWithBody
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
import org.newdawn.slick.Image import org.newdawn.slick.Image
import org.newdawn.slick.SlickException import org.newdawn.slick.SlickException
import org.newdawn.slick.SpriteSheet import org.newdawn.slick.SpriteSheet
class SpriteAnimation @Throws(SlickException::class) class SpriteAnimation(val parentActor: ActorWithBody) {
constructor() {
private var spriteImage: SpriteSheet? = null private var spriteImage: SpriteSheet? = null
var height: Int = 0 var height: Int = 0
@@ -30,7 +30,8 @@ constructor() {
private var animationRunning = true private var animationRunning = true
private var flipHorizontal = false private var flipHorizontal = false
private var flipVertical = false private var flipVertical = false
private var visible = false private val visible: Boolean
get() = parentActor.isVisible
private val offsetX = 0 private val offsetX = 0
private val offsetY = 0 private val offsetY = 0
@@ -81,14 +82,6 @@ constructor() {
nFrames = frames nFrames = frames
} }
fun setAsVisible() {
visible = true
}
fun setAsInvisible() {
visible = false
}
fun update(delta: Int) { fun update(delta: Int) {
if (animationRunning) { if (animationRunning) {
//skip this if animation is stopped //skip this if animation is stopped

View File

@@ -123,11 +123,17 @@ constructor() : BasicGameState() {
// add new player and put it to actorContainer // add new player and put it to actorContainer
playableActorDelegate = PlayableActorDelegate(PlayerBuilderSigrid.create()) playableActorDelegate = PlayableActorDelegate(PlayerBuilderSigrid())
//player = PBCynthia.create() //player = PBCynthia.create()
//player.setNoClip(true); //player.setNoClip(true);
addActor(player) addActor(player)
// test actor
addActor(PlayerBuilderCynthia())
// init console window // init console window
consoleHandler = UIHandler(ConsoleWindow()) consoleHandler = UIHandler(ConsoleWindow())
consoleHandler.setPosition(0, 0) consoleHandler.setPosition(0, 0)
@@ -488,7 +494,7 @@ constructor() : BasicGameState() {
} }
// inactivate distant actors // inactivate distant actors
else if (actor is ActorWithBody && !actor.inUpdateRange()) { 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 actorContainerInactive.add(actor) // naïve add; duplicates are checked when the actor is re-activated
} }
actorContainer.removeAt(actorIndex) actorContainer.removeAt(actorIndex)

View File

@@ -111,10 +111,10 @@ constructor(gamename: String) : StateBasedGame(gamename) {
//addState(StateSplash()) //addState(StateSplash())
//addState(StateMonitorCheck()) //addState(StateMonitorCheck())
//addState(StateFontTester()) //addState(StateFontTester())
addState(StateNoiseTexGen()) //addState(StateNoiseTexGen())
//ingame = StateInGame() ingame = StateInGame()
//addState(ingame) addState(ingame)
} }
companion object { companion object {
@@ -218,17 +218,17 @@ constructor(gamename: String) : StateBasedGame(gamename) {
var hasController = false var hasController = false
val CONTROLLER_DEADZONE = 0.1f val CONTROLLER_DEADZONE = 0.1f
/** Available CPU cores */ /** Available CPU threads */
val CORES = Runtime.getRuntime().availableProcessors() val THREADS = Runtime.getRuntime().availableProcessors()
/** /**
* If the game is multithreading. * If the game is multithreading.
* True if: * True if:
* *
* CORES >= 2 and config "multithread" is true * THREADS >= 2 and config "multithread" is true
*/ */
val MULTITHREAD: Boolean val MULTITHREAD: Boolean
get() = CORES >= 2 && getConfigBoolean("multithread") get() = THREADS >= 2 && getConfigBoolean("multithread")
private lateinit var configDir: String private lateinit var configDir: String
@@ -432,6 +432,8 @@ fun main(args: Array<String>) {
Terrarum.main(args) Terrarum.main(args)
} }
// I must say: What the fuck is wrong with you, Slick2D?!
fun blendMul() { fun blendMul() {
GL11.glEnable(GL11.GL_BLEND) GL11.glEnable(GL11.GL_BLEND)
GL11.glColorMask(true, true, true, true) 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 // TODO seems working as intended (no more whitened-out semitransparent colour), but needs further investigation
GL14.glBlendFuncSeparate( GL14.glBlendFuncSeparate(
GL11.GL_SRC_ALPHA, 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 GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA // blend func for alpha channels
) )
} }

View File

@@ -7,7 +7,7 @@ import java.util.*
* Created by minjaesong on 16-05-25. * Created by minjaesong on 16-05-25.
*/ */
object ThreadPool { object ThreadPool {
val POOL_SIZE = Terrarum.CORES + 1 val POOL_SIZE = Terrarum.THREADS + 1
private val pool: Array<Thread?> = Array(POOL_SIZE, { null }) private val pool: Array<Thread?> = Array(POOL_SIZE, { null })

View File

@@ -16,7 +16,7 @@ abstract class Actor : Comparable<Actor>, Runnable {
* Valid RefID is equal to or greater than 16777216. * Valid RefID is equal to or greater than 16777216.
* @return Reference ID. (16777216-0x7FFF_FFFF) * @return Reference ID. (16777216-0x7FFF_FFFF)
*/ */
abstract var referenceID: Int open var referenceID: Int = generateUniqueReferenceID()
abstract var actorValue: ActorValue abstract var actorValue: ActorValue
abstract var flagDespawn: Boolean abstract var flagDespawn: Boolean

View File

@@ -23,7 +23,6 @@ import java.util.*
*/ */
open class ActorWithBody : Actor() { open class ActorWithBody : Actor() {
override var referenceID: Int = generateUniqueReferenceID()
override var actorValue: ActorValue = ActorValue() override var actorValue: ActorValue = ActorValue()
@Transient internal var sprite: SpriteAnimation? = null @Transient internal var sprite: SpriteAnimation? = null
@@ -155,8 +154,8 @@ open class ActorWithBody : Actor() {
@Volatile var grounded = false @Volatile var grounded = false
override @Volatile var flagDespawn = false override @Volatile var flagDespawn = false
/** Default to 'false' */ /** Default to 'true' */
var isVisible = false var isVisible = true
/** Default to 'true' */ /** Default to 'true' */
var isUpdate = true var isUpdate = true
var isNoSubjectToGrav = false var isNoSubjectToGrav = false
@@ -255,12 +254,12 @@ open class ActorWithBody : Actor() {
} }
fun makeNewSprite(w: Int, h: Int) { fun makeNewSprite(w: Int, h: Int) {
sprite = SpriteAnimation() sprite = SpriteAnimation(this)
sprite!!.setDimension(w, h) sprite!!.setDimension(w, h)
} }
fun makeNewSpriteGlow(w: Int, h: Int) { fun makeNewSpriteGlow(w: Int, h: Int) {
spriteGlow = SpriteAnimation() spriteGlow = SpriteAnimation(this)
spriteGlow!!.setDimension(w, h) spriteGlow!!.setDimension(w, h)
} }
@@ -943,6 +942,8 @@ open class ActorWithBody : Actor() {
open fun drawBody(gc: GameContainer, g: Graphics) { open fun drawBody(gc: GameContainer, g: Graphics) {
if (isVisible && sprite != null) { if (isVisible && sprite != null) {
when (drawMode) { when (drawMode) {
BLEND_NORMAL -> blendNormal() BLEND_NORMAL -> blendNormal()
BLEND_MULTIPLY -> blendMul() BLEND_MULTIPLY -> blendMul()

View File

@@ -18,9 +18,9 @@ object CreatureBuilder {
* @Param jsonFileName with extension * @Param jsonFileName with extension
*/ */
@Throws(IOException::class, SlickException::class) @Throws(IOException::class, SlickException::class)
fun create(jsonFileName: String): ActorWithBody { operator fun invoke(jsonFileName: String): ActorWithBody {
val actor = ActorWithBody() val actor = ActorWithBody()
CreatureRawInjector.inject(actor.actorValue, jsonFileName) InjectCreatureRaw(actor.actorValue, jsonFileName)
return actor return actor
} }

View File

@@ -18,7 +18,6 @@ class FixtureTikiTorch : FixtureBase(), Luminous {
override val lightBoxList: ArrayList<Hitbox> override val lightBoxList: ArrayList<Hitbox>
init { init {
isVisible = true
density = 1200.0 density = 1200.0
setHitboxDimension(10, 24, 0, 0) setHitboxDimension(10, 24, 0, 0)
@@ -26,12 +25,10 @@ class FixtureTikiTorch : FixtureBase(), Luminous {
lightBoxList = ArrayList(1) lightBoxList = ArrayList(1)
lightBoxList.add(Hitbox(3.0, 0.0, 4.0, 3.0)) lightBoxList.add(Hitbox(3.0, 0.0, 4.0, 3.0))
sprite = SpriteAnimation() makeNewSprite(10, 27)
sprite!!.setDimension(10, 27)
sprite!!.setSpriteImage("assets/graphics/sprites/fixtures/tiki_torch.png") sprite!!.setSpriteImage("assets/graphics/sprites/fixtures/tiki_torch.png")
sprite!!.setDelay(200) sprite!!.setDelay(200)
sprite!!.setRowsAndFrames(1, 1) sprite!!.setRowsAndFrames(1, 1)
sprite!!.setAsVisible()
actorValue[AVKey.BASEMASS] = 1.0 actorValue[AVKey.BASEMASS] = 1.0
} }

View File

@@ -18,22 +18,15 @@ import java.io.Reader
/** /**
* Created by minjaesong on 16-01-31. * 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 { companion object {
protected val luag = Globals() protected val luag = Globals()
init { init {
luag.load(JseBaseLib()) 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) LoadState.install(luag)
LuaC.install(luag) LuaC.install(luag)
} }
@@ -77,8 +70,9 @@ open class HumanoidNPC(aiFile: String, born: GameDate) : ActorHumanoid(born), AI
init { init {
val inputStream = javaClass.getResourceAsStream(scriptPath) //val inputStream = javaClass.getResourceAsStream(scriptPath)
runCommand(InputStreamReader(inputStream), 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 { class ThreadRunCommand : Runnable {
val mode: Int val mode: Int

View File

@@ -12,7 +12,7 @@ import java.security.SecureRandom
/** /**
* Created by minjaesong on 16-03-25. * Created by minjaesong on 16-03-25.
*/ */
object CreatureRawInjector { object InjectCreatureRaw {
const val JSONPATH = "./assets/raw/creatures/" const val JSONPATH = "./assets/raw/creatures/"
private const val MULTIPLIER_RAW_ELEM_SUFFIX = AVKey.MULT private const val MULTIPLIER_RAW_ELEM_SUFFIX = AVKey.MULT
@@ -23,8 +23,7 @@ object CreatureRawInjector {
* @param actorValueRef ActorValue object to be injected. * @param actorValueRef ActorValue object to be injected.
* @param jsonFileName with extension * @param jsonFileName with extension
*/ */
@Throws(IOException::class, SlickException::class) operator fun invoke(actorValueRef: ActorValue, jsonFileName: String) {
fun inject(actorValueRef: ActorValue, jsonFileName: String) {
val jsonObj = JsonFetcher(JSONPATH + jsonFileName) val jsonObj = JsonFetcher(JSONPATH + jsonFileName)
val elementsInt = arrayOf(AVKey.BASEHEIGHT, AVKey.TOOLSIZE, AVKey.ENCUMBRANCE) val elementsInt = arrayOf(AVKey.BASEHEIGHT, AVKey.TOOLSIZE, AVKey.ENCUMBRANCE)

View File

@@ -16,7 +16,6 @@ class PhysTestBall : ActorWithBody() {
init { init {
setHitboxDimension(16, 16, 0, 0) setHitboxDimension(16, 16, 0, 0)
isVisible = true
mass = 10.0 mass = 10.0
density = 200.0 density = 200.0

View File

@@ -40,7 +40,6 @@ class Player(born: GameDate) : ActorHumanoid(born) {
* @throws SlickException * @throws SlickException
*/ */
init { init {
isVisible = true
referenceID = PLAYER_REF_ID // forcibly set ID referenceID = PLAYER_REF_ID // forcibly set ID
density = BASE_DENSITY density = BASE_DENSITY
collisionType = COLLISION_KINEMATIC collisionType = COLLISION_KINEMATIC

View File

@@ -11,9 +11,9 @@ object PlayerBuilder {
private val JSONPATH = "./assets/raw/" private val JSONPATH = "./assets/raw/"
private val jsonString = String() private val jsonString = String()
fun create(): Actor { operator fun invoke(): Actor {
val p: Actor = Player(Terrarum.ingame.world.time.currentTimeAsGameDate) val p: Actor = Player(Terrarum.ingame.world.time.currentTimeAsGameDate)
CreatureRawInjector.inject(p.actorValue, "CreatureHuman.json") InjectCreatureRaw(p.actorValue, "CreatureHuman.json")
// attach sprite // attach sprite

View File

@@ -2,6 +2,7 @@ package net.torvald.terrarum.gameactors
import net.torvald.spriteanimation.SpriteAnimation import net.torvald.spriteanimation.SpriteAnimation
import net.torvald.terrarum.gameactors.ActorHumanoid import net.torvald.terrarum.gameactors.ActorHumanoid
import net.torvald.terrarum.gameactors.ai.scripts.PokemonNPCAI
import net.torvald.terrarum.mapdrawer.MapDrawer import net.torvald.terrarum.mapdrawer.MapDrawer
/** /**
@@ -9,25 +10,25 @@ import net.torvald.terrarum.mapdrawer.MapDrawer
*/ */
object PlayerBuilderCynthia { object PlayerBuilderCynthia {
fun create(): Player { operator fun invoke(): ActorWithBody {
val p: Player = Player(GameDate(100, 143)) // random value thrown //val p: Player = Player(GameDate(100, 143)) // random value thrown
CreatureRawInjector.inject(p.actorValue, "CreatureHuman.json") val p: HumanoidNPC = HumanoidNPC(PokemonNPCAI(), GameDate(100, 143)) // random value thrown
InjectCreatureRaw(p.actorValue, "CreatureHuman.json")
p.actorValue[AVKey.__PLAYER_QUICKBARSEL] = 0 p.actorValue[AVKey.__PLAYER_QUICKBARSEL] = 0
p.actorValue["__selectedtile"] = 16
p.makeNewSprite(26, 42) p.makeNewSprite(26, 42)
p.sprite!!.setSpriteImage("assets/graphics/sprites/test_player_2.png") p.sprite!!.setSpriteImage("assets/graphics/sprites/test_player_2.png")
p.sprite!!.setDelay(200) p.sprite!!.setDelay(200)
p.sprite!!.setRowsAndFrames(1, 1) p.sprite!!.setRowsAndFrames(1, 1)
p.sprite!!.setAsVisible()
p.setHitboxDimension(15, p.actorValue.getAsInt(AVKey.BASEHEIGHT) ?: ActorHumanoid.BASE_HEIGHT, 9, 0) 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 return p
} }
} }

View File

@@ -21,7 +21,7 @@ import java.io.IOException
object PlayerBuilderSigrid { object PlayerBuilderSigrid {
fun create(): Player { operator fun invoke(): Player {
val p = Player(GameDate(-2147483648, 0)) // XD val p = Player(GameDate(-2147483648, 0)) // XD
p.referenceID = 0x51621D // the only constant of this procedural universe 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!!.setSpriteImage("assets/graphics/sprites/test_player.png")
p.sprite!!.setDelay(200) p.sprite!!.setDelay(200)
p.sprite!!.setRowsAndFrames(1, 1) p.sprite!!.setRowsAndFrames(1, 1)
p.sprite!!.setAsVisible()
p.makeNewSpriteGlow(28, 51) p.makeNewSpriteGlow(28, 51)
p.spriteGlow!!.setSpriteImage("assets/graphics/sprites/test_player_glow.tga") p.spriteGlow!!.setSpriteImage("assets/graphics/sprites/test_player_glow.tga")
p.spriteGlow!!.setDelay(200) p.spriteGlow!!.setDelay(200)
p.spriteGlow!!.setRowsAndFrames(1, 1) p.spriteGlow!!.setRowsAndFrames(1, 1)
p.spriteGlow!!.setAsVisible()
p.actorValue = ActorValue() p.actorValue = ActorValue()
p.actorValue[AVKey.SCALE] = 1.0 p.actorValue[AVKey.SCALE] = 1.0

View File

@@ -0,0 +1,10 @@
package net.torvald.terrarum.gameactors.ai.scripts
/**
* Created by SKYHi14 on 2016-12-23.
*/
object PokemonNPCAI {
operator fun invoke(): String = """
"""
}

View File

@@ -29,7 +29,7 @@ object TileCodex {
try { try {
// todo verify CSV using pre-calculated SHA256 hash // 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") println("[TileCodex] Building tile properties table")

View File

@@ -4,7 +4,7 @@ package net.torvald.terrarum.tileproperties
* Created by minjaesong on 16-09-11. * Created by minjaesong on 16-09-11.
*/ */
object TilePropCSV { object TilePropCSV {
const val text = """ operator fun invoke() = """
"id";"dmg";"name" ; "opacity";"strength";"dsty";"mate";"fluid";"solid";"wall"; "lumcolor";"drop";"ddmg";"fall";"dlfn";"friction" "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" "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" "1"; "0";"TILE_STONE" ; "33587232"; "25";"2400";"rock"; "0"; "1"; "1"; "0"; "1"; "0"; "0"; "0";"16"

View File

@@ -151,7 +151,7 @@ class BasicDebugInfoWindow : UICanvas {
g.color = GameFontBase.codeToCol["y"] g.color = GameFontBase.codeToCol["y"]
g.drawString("${ccY}MEM ", (Terrarum.WIDTH - 15 * 8 - 2).toFloat(), 2f) 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}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) (Terrarum.WIDTH - 2 - 6*8).toFloat(), 10f)
g.color = GameFontBase.codeToCol["g"] g.color = GameFontBase.codeToCol["g"]

View File

@@ -910,7 +910,7 @@
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 81, "left": 81,
"top": 655, "top": 649,
"width": 0, "width": 0,
"height": 13, "height": 13,
"autoResize": false, "autoResize": false,
@@ -944,7 +944,7 @@
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 66, "left": 66,
"top": 655, "top": 649,
"width": 0, "width": 0,
"height": 13, "height": 13,
"autoResize": false, "autoResize": false,
@@ -978,7 +978,7 @@
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 111, "left": 111,
"top": 656, "top": 650,
"width": 0, "width": 0,
"height": 13, "height": 13,
"autoResize": false, "autoResize": false,
@@ -1010,7 +1010,7 @@
"$ref": "AAAAAAFYplWBi2f5GNY=" "$ref": "AAAAAAFYplWBi2f5GNY="
}, },
"lineStyle": 2, "lineStyle": 2,
"points": "128:662;96:662;96:480", "points": "128:656;96:656;96:480",
"stereotypeDisplay": "label", "stereotypeDisplay": "label",
"showVisibility": true, "showVisibility": true,
"showProperty": true, "showProperty": true,
@@ -4591,7 +4591,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 744, "left": 696,
"top": 1136, "top": 1136,
"width": 0, "width": 0,
"height": 13, "height": 13,
@@ -4616,7 +4616,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 621, "left": 597,
"top": 1111, "top": 1111,
"width": 40.94873046875, "width": 40.94873046875,
"height": 13, "height": 13,
@@ -4642,7 +4642,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 744, "left": 696,
"top": 1136, "top": 1136,
"width": 223, "width": 223,
"height": 13, "height": 13,
@@ -4668,7 +4668,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 744, "left": 696,
"top": 1136, "top": 1136,
"width": 0, "width": 0,
"height": 13, "height": 13,
@@ -4688,7 +4688,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 616, "left": 592,
"top": 1104, "top": 1104,
"width": 50.94873046875, "width": 50.94873046875,
"height": 25, "height": 25,
@@ -4724,7 +4724,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 616, "left": 592,
"top": 1129, "top": 1129,
"width": 50.94873046875, "width": 50.94873046875,
"height": 10, "height": 10,
@@ -4748,7 +4748,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 616, "left": 592,
"top": 1139, "top": 1139,
"width": 50.94873046875, "width": 50.94873046875,
"height": 10, "height": 10,
@@ -4772,7 +4772,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 432, "left": 408,
"top": 528, "top": 528,
"width": 10, "width": 10,
"height": 10, "height": 10,
@@ -4796,7 +4796,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": false, "containerChangeable": false,
"containerExtending": false, "containerExtending": false,
"left": 432, "left": 408,
"top": 528, "top": 528,
"width": 10, "width": 10,
"height": 10, "height": 10,
@@ -4812,7 +4812,7 @@
"showShadow": true, "showShadow": true,
"containerChangeable": true, "containerChangeable": true,
"containerExtending": false, "containerExtending": false,
"left": 616, "left": 592,
"top": 1104, "top": 1104,
"width": 50.94873046875, "width": 50.94873046875,
"height": 45, "height": 45,
@@ -4881,7 +4881,7 @@
"containerExtending": false, "containerExtending": false,
"left": 357, "left": 357,
"top": 821, "top": 821,
"width": 166.92431640625, "width": 167,
"height": 13, "height": 13,
"autoResize": false, "autoResize": false,
"underline": false, "underline": false,
@@ -4907,7 +4907,7 @@
"containerExtending": false, "containerExtending": false,
"left": 357, "left": 357,
"top": 836, "top": 836,
"width": 166.92431640625, "width": 167,
"height": 13, "height": 13,
"autoResize": false, "autoResize": false,
"underline": false, "underline": false,
@@ -4979,7 +4979,7 @@
"containerExtending": false, "containerExtending": false,
"left": 352, "left": 352,
"top": 816, "top": 816,
"width": 176.92431640625, "width": 177,
"height": 38, "height": 38,
"autoResize": false, "autoResize": false,
"stereotypeLabel": { "stereotypeLabel": {
@@ -5025,7 +5025,7 @@
"containerExtending": false, "containerExtending": false,
"left": 357, "left": 357,
"top": 859, "top": 859,
"width": 166.92431640625, "width": 167,
"height": 13, "height": 13,
"autoResize": false, "autoResize": false,
"underline": false, "underline": false,
@@ -5054,7 +5054,7 @@
"containerExtending": false, "containerExtending": false,
"left": 357, "left": 357,
"top": 874, "top": 874,
"width": 166.92431640625, "width": 167,
"height": 13, "height": 13,
"autoResize": false, "autoResize": false,
"underline": false, "underline": false,
@@ -5075,7 +5075,7 @@
"containerExtending": false, "containerExtending": false,
"left": 352, "left": 352,
"top": 854, "top": 854,
"width": 176.92431640625, "width": 177,
"height": 38, "height": 38,
"autoResize": false "autoResize": false
}, },
@@ -5099,7 +5099,7 @@
"containerExtending": false, "containerExtending": false,
"left": 352, "left": 352,
"top": 892, "top": 892,
"width": 176.92431640625, "width": 177,
"height": 10, "height": 10,
"autoResize": false "autoResize": false
}, },
@@ -5163,7 +5163,7 @@
"containerExtending": false, "containerExtending": false,
"left": 352, "left": 352,
"top": 816, "top": 816,
"width": 176.92431640625, "width": 177,
"height": 86, "height": 86,
"autoResize": false, "autoResize": false,
"stereotypeDisplay": "label", "stereotypeDisplay": "label",
@@ -9376,6 +9376,580 @@
"propertyLabel": { "propertyLabel": {
"$ref": "AAAAAAFZB/aY/8WcvSw=" "$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=" "$ref": "AAAAAAFYpmYlfnwyF/k="
}, },
"visibility": "public" "visibility": "public"
},
{
"_type": "UMLGeneralization",
"_id": "AAAAAAFZK34BdLPyGik=",
"_parent": {
"$ref": "AAAAAAFYplPlN2cGJWo="
},
"source": {
"$ref": "AAAAAAFYplPlN2cGJWo="
},
"target": {
"$ref": "AAAAAAFYplBdp2VHGxk="
},
"visibility": "public"
} }
], ],
"visibility": "public", "visibility": "public",
@@ -11140,6 +11728,35 @@
"isAbstract": false, "isAbstract": false,
"isFinalSpecialization": false, "isFinalSpecialization": false,
"isLeaf": 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" "visibility": "public"

BIN
work_files/UML/actors.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB