private void Spawn( Vector2 origin, Vector2 direction, List <DmlObject> speeds, string[] paramNames, DmlObject[] values, DmlBullet parent, DmlBulletFactory factory, DmlSystem system) { bool local = parent != null; double speed; DmlObject newObj; DmlBullet newBullet; foreach (DmlObject s in speeds) { speed = (double)(s.Value); newObj = factory.Instantiate(origin, system); newBullet = (DmlBullet)(newObj.Value); newBullet.Direction = direction; newBullet.Speed = speed; for (int i = 0; i < paramCount; i++) { newObj.SetVar(paramNames[i], values[i]); } if (local) { parent.Children.Add(newBullet); } system.AddBullet(newBullet); } }
public override void Update(DmlBullet bullet, DmlSystem system) { bullet.Speed += speedIncrement * Globals.deltaTime; if (bullet.LocalTime >= endTime) { Dead = true; bullet.Speed = finalSpeed; } }
public override void Update(DmlBullet bullet, DmlSystem system) { bullet.RelativePosition += posIncrement * (float)(Globals.deltaTime); if (bullet.LocalTime >= endTime) { Dead = true; bullet.RelativePosition = endPos; } }
private void Spawn( List <DmlObject> origins, List <DmlObject> directions, List <DmlObject> speeds, string[] paramNames, DmlObject[] values, DmlBullet parent, DmlBulletFactory factory, DmlSystem system) { if (origins.Count != directions.Count || origins.Count != speeds.Count || directions.Count != speeds.Count) { throw new BehaviourException("Origins, Directions and Speeds must all have the same number of elements."); } bool local = parent != null; Vector2 origin, direction; double speed; DmlObject newObj; DmlBullet newBullet; for (int i = 0; i < origins.Count; i++) { origin = (Vector2)(origins[i].Value); direction = (Vector2)(directions[i].Value); speed = (double)(speeds[i].Value); newObj = factory.Instantiate(origin, system); newBullet = (DmlBullet)(newObj.Value); newBullet.Direction = direction; newBullet.Speed = speed; for (int j = 0; j < paramCount; j++) { newObj.SetVar(paramNames[j], values[j]); } if (local) { parent.Children.Add(newBullet); } system.AddBullet(newBullet); } }
public void Perform( CodeBlock block, Stack <DmlObject> stack, Dictionary <string, DmlObject> locals, DmlObject bullet, DmlSystem system) { switch (property) { case DmlTokens.INTRINSIC_ORIGIN: stack.Push(new DmlObject(DmlType.Vector, ((DmlBullet)bullet.Value).Origin)); break; case DmlTokens.INTRINSIC_POSITION: stack.Push(new DmlObject(DmlType.Vector, ((DmlBullet)bullet.Value).Position)); break; case DmlTokens.INTRINSIC_DIRECTION: stack.Push(new DmlObject(DmlType.Vector, ((DmlBullet)bullet.Value).Direction)); break; case DmlTokens.INTRINSIC_SPEED: stack.Push(new DmlObject(DmlType.Vector, ((DmlBullet)bullet.Value).Speed)); break; case DmlTokens.INTRINSIC_COLOUR: stack.Push(new DmlObject(DmlType.Colour, ((DmlBullet)bullet.Value).Colour)); break; case DmlTokens.INTRINSIC_TIME: stack.Push(new DmlObject(DmlType.Number, ((DmlBullet)bullet.Value).LocalTime)); break; case DmlTokens.INTRINSIC_VELOCITY: DmlBullet b = (DmlBullet)bullet.Value; stack.Push(new DmlObject(DmlType.Vector, b.Direction * (float)b.Speed)); break; default: throw new DmlSyntaxError(String.Format("Unknown bullet property \"{0}\"", property)); } }
private void Spawn( Vector2 origin, Vector2 direction, double speed, string[] paramNames, DmlObject[] values, DmlBullet parent, DmlBulletFactory factory, DmlSystem system) { DmlObject newObj = factory.Instantiate(origin, system); DmlBullet newBullet = (DmlBullet)newObj.Value; newBullet.Direction = direction; newBullet.Speed = speed; for (int i = 0; i < paramCount; i++) { newObj.SetVar(paramNames[i], values[i]); } if (parent != null) { parent.Children.Add(newBullet); } system.AddBullet(newBullet); }
public void Perform( CodeBlock block, Stack <DmlObject> stack, Dictionary <string, DmlObject> locals, DmlObject bullet, DmlSystem system) { double leeway = 0; if (hasLeeway) { leeway = (double)(stack.Pop().Value); } DmlBullet b = (DmlBullet)(bullet.Value); double x = b.Position.X; double y = b.Position.Y; if (-leeway <= x && x <= max_x + leeway && -leeway <= y && y <= max_y + leeway) { return; } b.Dead = true; }
public void Perform( CodeBlock block, Stack <DmlObject> stack, Dictionary <string, DmlObject> locals, DmlObject bullet, DmlSystem system) { var paramNames = new string[paramCount]; var values = new DmlObject[paramCount]; DmlObject top; List <DmlObject> param; for (int i = 0; i < paramCount; i++) { top = stack.Pop(); param = (List <DmlObject>)top.Value; paramNames[i] = (string)(param[0].Value); values[i] = param[1]; } DmlObject originObj = null, directionObj = null, speedObj = null; if (speedParam != ParamState.None) { speedObj = stack.Pop(); } if (directionParam != ParamState.None) { directionObj = stack.Pop(); } if (originParam != ParamState.None) { originObj = stack.Pop(); } var factory = (DmlBulletFactory)(stack.Pop().Value); if (multi) { Vector2? origin = null, direction = null; double speed = 0; List <DmlObject> origins = null, directions = null, speeds = null; if (originParam == ParamState.None) { origin = ((DmlBullet)bullet.Value).Position; } else if (originParam == ParamState.Single) { origin = (Vector2)(originObj.Value); } else { origins = (List <DmlObject>)(originObj.Value); } if (directionParam == ParamState.None) { direction = new Vector2(0, 1); } else if (directionParam == ParamState.Single) { direction = (Vector2)(directionObj.Value); } else { directions = (List <DmlObject>)(directionObj.Value); } if (speedParam == ParamState.None) { speed = 0; } else if (speedParam == ParamState.Single) { speed = (double)(speedObj.Value); } else { speeds = (List <DmlObject>)(speedObj.Value); } DmlBullet parent = null; if (bullet != null) { parent = (DmlBullet)(bullet.Value); } if (origins == null) { if (directions == null) { if (speeds == null) { Spawn(origin.Value, direction.Value, speed, paramNames, values, parent, factory, system); } else { Spawn(origin.Value, direction.Value, speeds, paramNames, values, parent, factory, system); } } else { if (speeds == null) { Spawn(origin.Value, directions, speed, paramNames, values, parent, factory, system); } else { Spawn(origin.Value, directions, speeds, paramNames, values, parent, factory, system); } } } else { if (directions == null) { if (speeds == null) { Spawn(origins, direction.Value, speed, paramNames, values, parent, factory, system); } else { Spawn(origins, direction.Value, speeds, paramNames, values, parent, factory, system); } } else { if (speeds == null) { Spawn(origins, directions, speed, paramNames, values, parent, factory, system); } else { Spawn(origins, directions, speeds, paramNames, values, parent, factory, system); } } } } else { Vector2 origin; if (originParam == ParamState.None) { origin = ((DmlBullet)bullet.Value).Origin; } else { origin = (Vector2)(originObj.Value); } DmlObject newObj = factory.Instantiate(origin, system); DmlBullet newBullet = (DmlBullet)newObj.Value; if (directionParam != ParamState.None) { newBullet.Direction = (Vector2)(directionObj.Value); } if (speedParam != ParamState.None) { newBullet.Speed = (double)(speedObj.Value); } for (int i = 0; i < paramCount; i++) { newObj.SetVar(paramNames[i], values[i]); } if (bullet != null) { // We have to check if bullet is null because Spawn is one of the few behaviours // that can be used in a Timeline. When the Timeline's code is executed, `null` // is sent in for `bullet`. ((DmlBullet)bullet.Value).Children.Add(newBullet); } } }
public bool BulletCollide(DmlBullet bullet) { Vector2 bpos = bullet.Position; return(Math.Pow(bpos.X - position.X, 2) + Math.Pow(bpos.Y - position.Y, 2) < Math.Pow(bullet.bulletRadius + radius, 2)); }
private void Spawn( List<DmlObject> origins, List<DmlObject> directions, List<DmlObject> speeds, string[] paramNames, DmlObject[] values, DmlBullet parent, DmlBulletFactory factory, DmlSystem system) { if (origins.Count != directions.Count || origins.Count != speeds.Count || directions.Count != speeds.Count) throw new BehaviourException("Origins, Directions and Speeds must all have the same number of elements."); bool local = parent != null; Vector2 origin, direction; double speed; DmlObject newObj; DmlBullet newBullet; for (int i = 0; i < origins.Count; i++) { origin = (Vector2)(origins[i].Value); direction = (Vector2)(directions[i].Value); speed = (double)(speeds[i].Value); newObj = factory.Instantiate(origin, system); newBullet = (DmlBullet)(newObj.Value); newBullet.Direction = direction; newBullet.Speed = speed; for (int j = 0; j < paramCount; j++) newObj.SetVar(paramNames[j], values[j]); if (local) parent.Children.Add(newBullet); system.AddBullet(newBullet); } }
private void Spawn( Vector2 origin, Vector2 direction, List<DmlObject> speeds, string[] paramNames, DmlObject[] values, DmlBullet parent, DmlBulletFactory factory, DmlSystem system) { bool local = parent != null; double speed; DmlObject newObj; DmlBullet newBullet; foreach (DmlObject s in speeds) { speed = (double)(s.Value); newObj = factory.Instantiate(origin, system); newBullet = (DmlBullet)(newObj.Value); newBullet.Direction = direction; newBullet.Speed = speed; for (int i = 0; i < paramCount; i++) newObj.SetVar(paramNames[i], values[i]); if (local) parent.Children.Add(newBullet); system.AddBullet(newBullet); } }
private void Spawn( Vector2 origin, Vector2 direction, double speed, string[] paramNames, DmlObject[] values, DmlBullet parent, DmlBulletFactory factory, DmlSystem system) { DmlObject newObj = factory.Instantiate(origin, system); DmlBullet newBullet = (DmlBullet)newObj.Value; newBullet.Direction = direction; newBullet.Speed = speed; for (int i = 0; i < paramCount; i++) newObj.SetVar(paramNames[i], values[i]); if (parent != null) parent.Children.Add(newBullet); system.AddBullet(newBullet); }
public void Perform( CodeBlock block, Stack <DmlObject> stack, Dictionary <string, DmlObject> locals, DmlObject bullet, DmlSystem system) { var local = bullet != null; DmlBullet parent = null; Vector2 origin = Vector2.Zero; if (local) { parent = (DmlBullet)(bullet.Value); origin = parent.Position; } if (hasOrigin) { origin = (Vector2)(stack.Pop().Value); } double angleMin = 0, angleMax = 2 * Math.PI, speedMin, speedMax; if (hasAngleRange) { var angleRange = (List <DmlObject>)(stack.Pop().Value); angleMin = (double)angleRange[0].Value; angleMax = (double)angleRange[1].Value; if (degrees) { angleMin *= Math.PI / 180; angleMax *= Math.PI / 180; } } var speedRange = (List <DmlObject>)(stack.Pop().Value); speedMin = (double)speedRange[0].Value; speedMax = (double)speedRange[1].Value; var count = (double)(stack.Pop().Value); var factory = (DmlBulletFactory)(stack.Pop().Value); double crntAngle, crntSpeed; Vector2 direction; DmlObject newObj; DmlBullet newBullet; for (int i = 0; i < count; i++) { crntAngle = (angleMax - angleMin) * Globals.randGen.NextDouble() + angleMin; crntSpeed = (speedMax - speedMin) * Globals.randGen.NextDouble() + speedMin; direction = new Vector2((float)Math.Cos(crntAngle), (float)Math.Sin(crntAngle)); newObj = factory.Instantiate(origin, system); newBullet = (DmlBullet)(newObj.Value); newBullet.Direction = direction; newBullet.Speed = crntSpeed; if (local) { parent.Children.Add(newBullet); } system.AddBullet(newBullet); } }
public void Perform( CodeBlock block, Stack <DmlObject> stack, Dictionary <string, DmlObject> locals, DmlObject bullet, DmlSystem system) { string[] paramNames = new string[paramCount]; DmlObject[] values = new DmlObject[paramCount]; DmlObject top; List <DmlObject> param; for (int i = 0; i < paramCount; i++) { top = stack.Pop(); param = (List <DmlObject>)top.Value; paramNames[i] = (string)(param[0].Value); values[i] = param[1]; } var speed = 0d; var direction = new Vector2(0, 1); Vector2 origin; if (hasSpeed) { speed = (double)(stack.Pop().Value); } switch (this.direction) { case DirectionType.Direction: direction = (Vector2)(stack.Pop().Value); direction.Normalize(); break; case DirectionType.Angle: double angle = (double)(stack.Pop().Value); direction = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)); break; default: break; } if (hasOrigin) { origin = (Vector2)(stack.Pop().Value); } else { origin = ((DmlBullet)bullet.Value).Position; } var type = (DmlBulletFactory)(stack.Pop().Value); DmlObject newObj = type.Instantiate(origin, system); DmlBullet newBullet = (DmlBullet)newObj.Value; if (this.direction != DirectionType.None) { newBullet.Direction = direction; } if (hasSpeed) { newBullet.Speed = speed; } for (int i = 0; i < paramCount; i++) { newObj.SetVar(paramNames[i], values[i]); } if (bullet != null) { // We have to check if bullet is null because Spawn is one of the few behaviours // that can be used in a Timeline. When the Timeline's code is executed, `null` // is sent in for `bullet`. ((DmlBullet)bullet.Value).Children.Add(newBullet); } system.AddBullet(newBullet); }