private static ObjectAction GetMoveAction_Phase0() { ObjectAction teleportToInitialLocation = ObjectActionGenerator.DoOnce( ObjectAction.SetPosition( xMillis: MathExpression.Constant(500 * 1000), yMillis: MathExpression.Constant(850 * 1000))); ObjectAction moveAction = ObjectAction.Union( ObjectAction.StrafeMove(moveToXMillis: MathExpression.XMillis(), moveToYMillis: MathExpression.Constant(0)), ObjectAction.SetSpeed(MathExpression.Constant(20))); BooleanExpression shouldStopMoving = BooleanExpression.LessThanOrEqualTo( MathExpression.YMillis(), MathExpression.Constant(500 * 1000)); ObjectAction stopMovingAction = ObjectAction.SetSpeed(MathExpression.Constant(0)); ObjectAction setPhaseAction = ObjectAction.SetNumericVariable(CurrentPhaseVariableName, MathExpression.Constant(1)); return(ObjectAction.ConditionalNextAction( currentAction: ObjectAction.Union(teleportToInitialLocation, moveAction), condition: shouldStopMoving, nextAction: ObjectActionGenerator.DoOnce(ObjectAction.Union(stopMovingAction, setPhaseAction)))); }
private static ObjectAction GetMoveAction( GuidGenerator guidGenerator) { string variableName = guidGenerator.NextGuid(); ObjectAction initializeVariable = ObjectAction.SetNumericVariable( variableName: variableName, variableValue: MathExpression.Constant(0)); ObjectAction incrementVariable = ObjectAction.SetNumericVariable( variableName: variableName, variableValue: MathExpression.Add(MathExpression.Variable(variableName), MathExpression.ElapsedMillisecondsPerIteration())); ObjectAction initializeAndIncrementVariable = ObjectAction.ConditionalNextAction( currentAction: initializeVariable, condition: BooleanExpression.True(), nextAction: incrementVariable); ObjectAction teleportToInitialLocation = ObjectAction.SetPosition( xMillis: MathExpression.Add(50 * 1000, MathExpression.RandomInteger(900 * 1000)), yMillis: MathExpression.Constant(800 * 1000)); ObjectAction faceTowardsPlayer = ObjectAction.Move( moveToXMillis: MathExpression.PlayerXMillis(), moveToYMillis: MathExpression.Min(MathExpression.PlayerYMillis(), 300 * 1000)); ObjectAction setInitialSpeed = ObjectActionGenerator.DoOnce( ObjectAction.SetSpeed( speedInMillipixelsPerMillisecond: MathExpression.Constant(60))); ObjectAction slowDownSpeed1 = ObjectAction.Condition( condition: BooleanExpression.GreaterThanOrEqualTo( MathExpression.Variable(variableName), 1 * 1000), action: ObjectActionGenerator.DoOnce( ObjectAction.SetSpeed( speedInMillipixelsPerMillisecond: MathExpression.Constant(40)))); ObjectAction slowDownSpeed2 = ObjectAction.Condition( condition: BooleanExpression.GreaterThanOrEqualTo( MathExpression.Variable(variableName), 2 * 1000), action: ObjectActionGenerator.DoOnce( ObjectAction.SetSpeed( speedInMillipixelsPerMillisecond: MathExpression.Constant(20)))); ObjectAction stopMovement = ObjectAction.Condition( condition: BooleanExpression.GreaterThanOrEqualTo( MathExpression.Variable(variableName), 3 * 1000), action: ObjectActionGenerator.DoOnce( ObjectAction.SetSpeed( speedInMillipixelsPerMillisecond: MathExpression.Constant(0)))); BooleanExpression ShouldLeave1 = BooleanExpression.GreaterThanOrEqualTo( MathExpression.Variable(variableName), 10 * 1000); ObjectAction leave1 = ObjectAction.SetPosition( xMillis: MathExpression.XMillis(), yMillis: MathExpression.Add(MathExpression.YMillis(), MathExpression.Multiply(MathExpression.ElapsedMillisecondsPerIteration(), MathExpression.Constant(25)))); ObjectAction leave1ConditionalAction = ObjectAction.Condition( condition: ShouldLeave1, action: leave1); BooleanExpression shouldLeave2 = BooleanExpression.GreaterThanOrEqualTo( MathExpression.Variable(variableName), 11 * 1000); ObjectAction leave2 = ObjectAction.SetPosition( xMillis: MathExpression.XMillis(), yMillis: MathExpression.Add(MathExpression.YMillis(), MathExpression.Multiply(MathExpression.ElapsedMillisecondsPerIteration(), MathExpression.Constant(50)))); ObjectAction leave2ConditionalAction = ObjectAction.ConditionalNextAction( currentAction: leave1ConditionalAction, condition: shouldLeave2, nextAction: leave2); ObjectAction shouldDestroy = ObjectAction.Condition( condition: BooleanExpression.And(shouldLeave2, BooleanExpression.GreaterThanOrEqualTo(MathExpression.YMillis(), 800 * 1000)), action: ObjectAction.Destroy()); return(ObjectAction.ConditionalNextAction( currentAction: teleportToInitialLocation, condition: BooleanExpression.True(), nextAction: ObjectAction.Union(faceTowardsPlayer, initializeAndIncrementVariable, setInitialSpeed, slowDownSpeed1, slowDownSpeed2, stopMovement, leave2ConditionalAction, shouldDestroy))); }