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 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 screenSizeWidth(screenSize: F[ScreenSize]): F[Float]
|
||||||
def screenSizeHeight(screenSize: F[ScreenSize]): F[Float]
|
def screenSizeHeight(screenSize: F[ScreenSize]): F[Float]
|
||||||
|
|
||||||
|
@ -201,6 +204,33 @@ object Fanscript {
|
||||||
screenSize,
|
screenSize,
|
||||||
Vector(1)
|
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 positionPosition(position: Fancade[Position]): Fancade[Vector3] = ???
|
||||||
override def positionRotation(position: Fancade[Position]): Fancade[Rotation] = ???
|
override def positionRotation(position: Fancade[Position]): Fancade[Rotation] = ???
|
||||||
|
|
|
@ -17,13 +17,12 @@ object Main extends IOApp {
|
||||||
def program[F[_] : Sync : ContextShift]: Stream[F, Unit] = {
|
def program[F[_] : Sync : ContextShift]: Stream[F, Unit] = {
|
||||||
val program = new Fanscript.Program[Unit] {
|
val program = new Fanscript.Program[Unit] {
|
||||||
override def run[G[_]](implicit interp: Fanscript[G]): G[Unit] = {
|
override def run[G[_]](implicit interp: Fanscript[G]): G[Unit] = {
|
||||||
val screenSize = interp.screenSize
|
val score = interp.numberVariable("Score")
|
||||||
val screenWidth = interp.screenSizeWidth(screenSize)
|
val one = interp.lift(1.0F)
|
||||||
val inspectWidth = interp.inspect(screenWidth, () => {
|
val addToScore = interp.addNumbers(score, one)
|
||||||
val screenHeight = interp.screenSizeHeight(screenSize)
|
val setScore = interp.setNumber(score, addToScore, () => interp.unit)
|
||||||
interp.inspect(screenHeight, () => interp.unit)
|
val inspectScore = interp.inspect(score, () => setScore)
|
||||||
})
|
inspectScore
|
||||||
inspectWidth
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue