private void CreateContactableDecoration(string texName, float x, float y, float z, float w, float h, float transX = 0.5f, float transY = 0.5f, string unitType = UnitType.Static, float scaleX = 1.0f, float scaleY = 1.0f) { var def = new DrawUnitDef(); def.TexName = texName; def.X = x; def.Y = y; def.Z = z; def.UnitType = unitType; def.TransformOrigin = new Vector2(transX, transY); DrawUnit unit = _world.CreateRectangle(def, w, h); Texture2D tex = unit.Sprite.Texture; unit.Sprite.DrawRectangle = new Rectangle(0, 0, tex.Width, tex.Height); unit.Group = Group.Destructable; Root.Add(unit.Sprite); }
public DrawUnit CreateUnit(DrawUnitDef def) { var bodydef = new BodyDef(); bodydef.type = def.BodyType; bodydef.angle = def.RotateZ; bodydef.fixedRotation = def.FixedRotation; bodydef.position.X = B2Value(def.X); bodydef.position.Y = B2Value(def.Y); Body body = _world.CreateBody(bodydef); var tex = XNADevicesManager.Instance.ContentManager.Load<Texture2D>(def.TexName); Sprite sprite; if (def.RepeatX != 0.0f || def.RepeatY != 0.0f) { var rSprite = new RepeatSprite(tex); if (def.RepeatX != 0.0f) { rSprite.RepeatX = def.RepeatX; } if (def.RepeatY != 0.0f) { rSprite.RepeatY = def.RepeatY; } sprite = rSprite; } else { sprite = new Sprite(tex); sprite.DrawRectangle = def.DrawRectangle; } sprite.Alpha = def.Alpha; sprite.ScaleX = def.ScaleX; sprite.ScaleY = def.ScaleY; sprite.RotateX = def.RotateX; sprite.RotateY = def.RotateY; sprite.RotateZ = def.RotateZ; sprite.R = def.R; sprite.G = def.G; sprite.B = def.B; sprite.X = def.X; sprite.Y = def.Y; sprite.Z = def.Z; sprite.TransformOrigin = def.TransformOrigin; sprite.ZWriteEnable = def.ZWriteEnable; var unit = new DrawUnit(sprite, body, this); unit.Group = def.Group; body.SetUserData(unit); return unit; }
public DrawUnit CreatePolygon(DrawUnitDef def, Vector2[] verteces) { DrawUnit unit = CreateUnit(def); unit.AttachPolygon(verteces, def.Density, def.Fraction, def.Restitution); return unit; }
public DrawUnit CreateRectangle(DrawUnitDef def, float width, float height) { DrawUnit unit = CreateUnit(def); unit.AttachRectangle(width, height, def.Density, def.Fraction, def.Restitution); return unit; }
public DrawUnit CreateCircle(DrawUnitDef def, float radius) { DrawUnit unit = CreateUnit(def); unit.AttachCircle(radius, def.Density, def.Fraction, def.Restitution); return unit; }