Setting variables
This commit is contained in:
parent
912eb26652
commit
a61871d3f4
|
@ -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
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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] = ???
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue