Compare commits
No commits in common. "2b001a9ab07461ed3408cfe16d7fc4eafd81370a" and "ec80e51f95198dd68afe0cb264325f6f77fc09f4" have entirely different histories.
2b001a9ab0
...
ec80e51f95
@ -1,26 +0,0 @@
|
||||
package fmon.draw
|
||||
|
||||
import javafx.animation.{Transition => JTransition}
|
||||
|
||||
import scalafx.Includes._
|
||||
import scalafx.animation._
|
||||
import scalafx.scene.image.ImageView
|
||||
import scalafx.util.Duration
|
||||
|
||||
class SpriteAnimation(val view: ImageView, val image: Drawable, val duration: Duration) extends JTransition {
|
||||
setCycleDuration(duration)
|
||||
setInterpolator(Interpolator.Linear)
|
||||
|
||||
def interpolate(t: Double): Unit = {
|
||||
image.draw(view, t)
|
||||
}
|
||||
}
|
||||
|
||||
class AnimatedImage(val frames: IndexedSeq[Drawable]) extends Drawable {
|
||||
val lastIndex = -1
|
||||
|
||||
def draw(view: ImageView, t: Double): Unit = {
|
||||
val index = Math.min((frames.size * t).toInt, frames.size - 1)
|
||||
frames(index).draw(view, t)
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
package fmon.draw
|
||||
|
||||
import java.io._
|
||||
|
||||
object Battler {
|
||||
final val FramesPerPose = 3
|
||||
|
||||
def apply(filename: String): Sprite = {
|
||||
this(new File(filename))
|
||||
}
|
||||
|
||||
def apply(file: File): Sprite = {
|
||||
val palette = new Palette(new FileInputStream(file), 9, 6)
|
||||
def pose(x: Int, y: Int): AnimatedImage = {
|
||||
val xx = x * FramesPerPose
|
||||
val frames = IndexedSeq(palette(xx, y), palette(xx + 1, y), palette(xx + 2, y), palette(xx + 1, y))
|
||||
new AnimatedImage(frames)
|
||||
}
|
||||
val poses = Map(
|
||||
"Idle" -> pose(0, 0),
|
||||
"ReadyPhys" -> pose(0, 1),
|
||||
"ReadyMag" -> pose(0, 2),
|
||||
"Guard" -> pose(0, 3),
|
||||
"Damage" -> pose(0, 4),
|
||||
"Evade" -> pose(0, 5),
|
||||
"Stab" -> pose(1, 0),
|
||||
"Swing" -> pose(1, 1),
|
||||
"Shoot" -> pose(1, 2),
|
||||
"PhysSkill" -> pose(1, 3),
|
||||
"MagSkill" -> pose(1, 4),
|
||||
"Item" -> pose(1, 5),
|
||||
"Escape" -> pose(2, 0),
|
||||
"Victory" -> pose(2, 1),
|
||||
"Crisis" -> pose(2, 2),
|
||||
"Abnormal" -> pose(2, 3),
|
||||
"Sleep" -> pose(2, 4),
|
||||
"Dead" -> pose(2, 5)
|
||||
)
|
||||
new Sprite("Idle", poses)
|
||||
}
|
||||
}
|
||||
|
||||
import scalafx.application.JFXApp
|
||||
import scalafx.scene._
|
||||
import scalafx.scene.control._
|
||||
import scalafx.scene.image._
|
||||
import scalafx.scene.paint.Color._
|
||||
import scalafx.util.Duration
|
||||
|
||||
object DrawingDemo extends JFXApp {
|
||||
val view = new ImageView
|
||||
stage = new JFXApp.PrimaryStage {
|
||||
title.value = "Hello Stage"
|
||||
width = 600
|
||||
height = 450
|
||||
scene = new Scene {
|
||||
fill = LightGreen
|
||||
content = view
|
||||
}
|
||||
}
|
||||
val battler = Battler(raw"C:\Users\James\Documents\Design\fakemon\images\Aekashics Librarium MV Format Animated Battlers\Aekashics Librarium MV Format Animated Battlers\RPG Maker MV format Animated Sideview Battlers\Bat\Bat1_1.png")
|
||||
val animation = new SpriteAnimation(view, battler, new Duration(1000)) {
|
||||
setCycleCount(10)
|
||||
}
|
||||
animation.play()
|
||||
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
package fmon.draw
|
||||
|
||||
import scalafx.scene.image.ImageView
|
||||
|
||||
trait Drawable {
|
||||
def draw(view: ImageView, t: Double): Unit
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
package fmon.draw
|
||||
|
||||
import java.io.InputStream
|
||||
|
||||
import scalafx.geometry.Rectangle2D
|
||||
import scalafx.scene.image.{Image, ImageView}
|
||||
|
||||
case class Box(val x: Int, val y: Int, val width: Int, val height: Int)
|
||||
|
||||
case class StillImg(val image: Image, val x: Double, val y: Double, val width: Double, val height: Double) extends Drawable {
|
||||
def draw(view: ImageView, t: Double): Unit = {
|
||||
if (view.image() != image.delegate) {
|
||||
view.image = image
|
||||
}
|
||||
view.viewport = new Rectangle2D(x, y, width, height)
|
||||
}
|
||||
}
|
||||
|
||||
class Palette(val image: Image, val numAcross: Int, val numDown: Int) {
|
||||
def this(url: String, numAcross: Int, numDown: Int) = this(new Image(url), numAcross, numDown)
|
||||
def this(stream: InputStream, numAcross: Int, numDown: Int) = this(new Image(stream), numAcross, numDown)
|
||||
|
||||
val imgWidth = image.width() / numAcross
|
||||
val imgHeight = image.height() / numDown
|
||||
|
||||
def apply(x: Int, y: Int): StillImg = {
|
||||
StillImg(image, x * imgWidth, y * imgHeight, imgWidth, imgHeight)
|
||||
}
|
||||
|
||||
def apply(x : Int, y : Int, w : Int, h : Int): StillImg = {
|
||||
StillImg(image, x * imgWidth, y * imgHeight, w * imgWidth, h * imgHeight)
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a sub-image that spans multiple cells
|
||||
*/
|
||||
def apply(cells : Box): StillImg = {
|
||||
this(cells.x, cells.y, cells.width, cells.height)
|
||||
}
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
package fmon.draw
|
||||
|
||||
import scalafx.scene.image.{Image, ImageView}
|
||||
|
||||
class Sprite(var pose: String, val poses: Map[String, Drawable]) extends Drawable {
|
||||
def draw(view: ImageView, t: Double): Unit = {
|
||||
poses(pose).draw(view, t)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user