public static float EvalAngular(float a, float b, float x, TweenType tween) { if (x < 0f) { x = 0f; } if (x > 1f) { x = 1f; } var diff = Mathx.AngleSubtract(b, a); switch (tween) { case (TweenType.Linear): return(a + diff * x); case (TweenType.Accelerate): //n = (x * x) * (1f - x); //return a + diff * (n * n * n + x * x); return(a + diff * (-(x * x * x) + 2 * x * x)); case (TweenType.Decelerate): return(a + diff * (x * x - x * x * x + x)); case (TweenType.Smooth): if (x > 0.5f) { return(a + diff * Eval(0.5f, 1f, (x - 0.5f) * 2f, TweenType.Decelerate)); } return(a + diff * Eval(0f, 0.5f, x * 2f, TweenType.Accelerate)); } return(0f); }
public static Value Rand(Interpreter interpreter, SourceRef location, Value[] args, int argCount) { if (argCount > 1) { return(Mathx.GetRandom(args[0].VerifyType(Value.ValueType.Number, location).Number, args[1].VerifyType(Value.ValueType.Number, location).Number)); } return(Mathx.GetRandom(0.0, args[0].VerifyType(Value.ValueType.Number, location).Number)); }
public static Value SetGlow(Interpreter interpreter, SourceRef location, Value[] args, int argCount) { var obj = interpreter.DynamicLocalConstants["this"].Object as Entity; obj.Glow = (byte)Mathx.Clamp( args[0].VerifyType(Value.ValueType.Number, location).Number, 0.0, 255.0 ); return(Value.Nil); }
public void Fire() { if (Parent == null || Parent.Deleted || BulletDefinition == null || Count1 <= 0 || Count2 <= 0) { return; } switch (PatternType) { case (PatternType.Normal): var angTotal = (float)(Count1 - 1) * (Angle2 / (float)Count1); var angAdd = angTotal / (float)(Count1 - 1); var speedAdd = (Speed2 - Speed1) / (float)(Math.Max(1, Count2 - 1)); var ang = Angle1 - angTotal / 2f; for (var column = 0; column < Count1; column++) { var speed = Speed1; var shootPos = Position + Parent.Position + new Vector2( Mathx.DCos(ang) * Radius, Mathx.DSin(ang) * Radius ); for (var bullet = 0; bullet < Count2; bullet++) { if (PlayerTeam) { Bullet.PlayerBullet(shootPos, speed, ang + Angle3, BulletDefinition, Function); } else { new Bullet(shootPos, speed, ang + Angle3, BulletDefinition, Function); } speed += speedAdd; } ang += angAdd; } break; } }
public static Value Choose(Interpreter interpreter, SourceRef location, Value[] args, int argCount) { var arr = args[0].VerifyType(Value.ValueType.Array, location).Array; return(arr[Mathx.GetRandom(arr.Count)]); }
public override void Update() { base.Update(); if (Position.X < -Frame.Size.X / 2f + 2f) { Position = new Vector2(-Frame.Size.X / 2f + 2f, Position.Y); } if (Position.X > Frame.Size.X / 2f - 2f) { Position = new Vector2(Frame.Size.X / 2f - 2f, Position.Y); } if (Position.Y < 2f) { Position = new Vector2(Position.X, 2f); } if (Position.Y >= Frame.Size.Y - 2f) { Position = new Vector2(Position.X, Frame.Size.Y - 2f); } if (!Alive) { if (Engine.Time >= LastDeathTime + ReviveTime) { Alive = true; Script.InvokeEntityEventTask(Object, "onPlayerRevive"); } ShouldShoot = false; } else { ShouldShoot = Input.GetKeyPressed(Keys.Z); } if (ShouldShoot) { if (!LastShouldShoot) { Console.WriteLine("start shooting"); ShootTask = Script.InvokeEntityEventTask(this, "onPlayerShoot"); } } else { if (LastShouldShoot) { Console.WriteLine("stop shooting "); if (ShootTask != null) { ShootTask.Stop(); } } } Slow = !Input.GetKeyPressed(Keys.LeftShift); var moveX = (Input.GetKeyPressed(Keys.Right) ? 1f : 0f) - (Input.GetKeyPressed(Keys.Left) ? 1f : 0f); var moveY = (Input.GetKeyPressed(Keys.Down) ? 1f : 0f) - (Input.GetKeyPressed(Keys.Up) ? 1f : 0f); if (moveX != 0f || moveY != 0f) { Angle = Mathx.DAtan2(moveY, moveX); Speed = (Slow ? MoveSpeed : MoveSpeedSlow); } else { Speed = 0f; } if (moveX != 0f) { TurnAmount = Mathx.Clamp(TurnAmount + (double)Math.Sign(moveX) / TurnTimePlayer, -1.0, 1.0); } else { TurnAmount = Math.Max( 0.0, Math.Abs(TurnAmount) - 1.0 / TurnTimePlayer ) * (double)Math.Sign(TurnAmount); } if (Alive) { foreach (var ent in Layer.Bullets.Entities) { if (ent.Destroyed) { continue; } var diffX = ent.Position.X - Position.X; var diffY = ent.Position.Y - Position.Y; var hitboxCombined = ent.HitboxRadius + HitboxRadiusPlayer; if (diffX * diffX + diffY * diffY < hitboxCombined * hitboxCombined) { LastDeathTime = Engine.Time; Alive = false; Script.InvokeEntityEventTask(this, "onPlayerDie"); break; } } } LastShouldShoot = ShouldShoot; }
public void GenerateRing(float radius, float thickness, float startAngle, float endAngle, int steps) { Begin(); var angAdd = (endAngle - startAngle) / (float)steps; var cos = Mathx.DCos(startAngle); var sin = Mathx.DSin(startAngle); var lastPosOuter = new Vector3( cos * (radius + thickness / 2f), sin * (radius + thickness / 2f), 0f ); var lastPosInner = new Vector3( cos * (radius - thickness / 2f), sin * (radius - thickness / 2f), 0f ); var lastU = 0f; float u, angle; Vector3 posOuter, posInner; for (angle = startAngle + angAdd; angle < endAngle; angle += angAdd) { cos = Mathx.DCos(angle); sin = Mathx.DSin(angle); u = (angle - startAngle) / (endAngle - startAngle); posOuter = new Vector3( cos * (radius + thickness / 2f), sin * (radius + thickness / 2f), 0f ); posInner = new Vector3( cos * (radius - thickness / 2f), sin * (radius - thickness / 2f), 0f ); AddVertex(lastPosOuter, Color.White, new Vector2(lastU, 0f)); AddVertex(posOuter, Color.White, new Vector2(u, 0f)); AddVertex(lastPosInner, Color.White, new Vector2(lastU, 1f)); AddVertex(lastPosInner, Color.White, new Vector2(lastU, 1f)); AddVertex(posOuter, Color.White, new Vector2(u, 0f)); AddVertex(posInner, Color.White, new Vector2(u, 1f)); lastPosOuter = posOuter; lastPosInner = posInner; lastU = u; } angle = endAngle; cos = Mathx.DCos(angle); sin = Mathx.DSin(angle); u = 1f; posOuter = new Vector3( cos * (radius + thickness / 2f), sin * (radius + thickness / 2f), 0f ); posInner = new Vector3( cos * (radius - thickness / 2f), sin * (radius - thickness / 2f), 0f ); AddVertex(lastPosOuter, Color.White, new Vector2(lastU, 0f)); AddVertex(posOuter, Color.White, new Vector2(u, 0f)); AddVertex(lastPosInner, Color.White, new Vector2(lastU, 1f)); AddVertex(lastPosInner, Color.White, new Vector2(lastU, 1f)); AddVertex(posOuter, Color.White, new Vector2(u, 0f)); AddVertex(posInner, Color.White, new Vector2(u, 1f)); End(); }