Setting variables

This commit is contained in:
Aly 2020-07-26 17:17:11 -07:00
parent 912eb26652
commit a61871d3f4
3 changed files with 83 additions and 7 deletions

View File

@ -1222,4 +1222,51 @@ object BlockDefinition {
)
}
case object SetNumberReference extends BuiltIn[Unit] {
override val width: Int = 2
override val height: Int = 1
override val depth: Int = 2
override val ids: Vector[Obj] = Vector(
Obj.setNumberReference0,
Obj.setNumberReference1,
Obj.setNumberReference2,
Obj.setNumberReference3
)
val after: PinDefinition =
PinDefinition(
PinType.Pull,
PinDirection.Input,
PinPosition.top2(0)
)
val before: PinDefinition =
PinDefinition(
PinType.Pull,
PinDirection.Output,
PinPosition.bottom(0)
)
val reference: PinDefinition =
PinDefinition(
PinType.Pointer(PinType.Number),
PinDirection.Input,
PinPosition.left(1)
)
val value: PinDefinition =
PinDefinition(
PinType.Number,
PinDirection.Input,
PinPosition.left(0)
)
override val pins: Vector[PinDefinition] = Vector(
after,
before,
reference,
value
)
}
}

View File

@ -61,6 +61,9 @@ trait Fanscript[F[_]] {
def addNumbers(a: F[Float], b: F[Float]): F[Float]
def numberVariable(name: String): F[Float]
def setNumber(reference: F[Float], value: F[Float], after: () => F[Unit]): F[Unit]
def screenSizeWidth(screenSize: F[ScreenSize]): F[Float]
def screenSizeHeight(screenSize: F[ScreenSize]): F[Float]
@ -201,6 +204,33 @@ object Fanscript {
screenSize,
Vector(1)
))
override def numberVariable(name: String): Fancade[Float] =
Fix(FancadeF.Create(
Vector(),
Exists(Template(
BlockDefinition.GetNumber,
name
)),
Vector(),
Vector(BlockDefinition.GetNumber.output)
))
override def setNumber(reference: Fancade[Float], value: Fancade[Float], after: () => Fancade[Unit]): Fancade[Unit] = {
val us = Fix(FancadeF.Create(
Vector(reference, value),
Exists(Template(
BlockDefinition.SetNumberReference,
()
)),
Vector(BlockDefinition.SetNumberReference.reference, BlockDefinition.SetNumberReference.value),
Vector(BlockDefinition.SetNumberReference.before)
))
Fix(FancadeF.Sequence(
us,
BlockDefinition.SetNumberReference.after,
after()
))
}
override def positionPosition(position: Fancade[Position]): Fancade[Vector3] = ???
override def positionRotation(position: Fancade[Position]): Fancade[Rotation] = ???

View File

@ -17,13 +17,12 @@ object Main extends IOApp {
def program[F[_] : Sync : ContextShift]: Stream[F, Unit] = {
val program = new Fanscript.Program[Unit] {
override def run[G[_]](implicit interp: Fanscript[G]): G[Unit] = {
val screenSize = interp.screenSize
val screenWidth = interp.screenSizeWidth(screenSize)
val inspectWidth = interp.inspect(screenWidth, () => {
val screenHeight = interp.screenSizeHeight(screenSize)
interp.inspect(screenHeight, () => interp.unit)
})
inspectWidth
val score = interp.numberVariable("Score")
val one = interp.lift(1.0F)
val addToScore = interp.addNumbers(score, one)
val setScore = interp.setNumber(score, addToScore, () => interp.unit)
val inspectScore = interp.inspect(score, () => setScore)
inspectScore
}
}