protected BallSetBase(ITableInternal table) { m_Table = table; m_Balls = new List <IBallInternal>(); m_CueBalls = new List <IBallInternal>(); m_BallSteps = new Dictionary <IBallInternal, BallStepInfo>(); }
public void Visit(ITableInternal <TElement> table) { if (Content.ContainsKey(JsonProperties.Table)) { var pile = (JObject)Content[JsonProperties.Table]; Load(pile, table); } }
public void Visit(ITableInternal <TElement> table) { if (Deck.Options.Table.Enabled) { var obj = new JObject(); Serialize(obj, table); Content.Add(JsonProperties.Table, obj); } }
public TriangleBallSet(ITableInternal table) : base(table) { //add cue ball var cueBallLocation = m_Table.CueBallLocations.FirstOrDefault() ?? new Coordinates(-m_Table.Width / 4.0, 0); var cueBall = AddBall(new BallGraphicsData(null, Color.White, false, 0.5), c_PhysicsData, cueBallLocation); m_CueBalls.Add(cueBall as IBallInternal); //add other balls var ballLocation = m_Table.BallLocations.FirstOrDefault() ?? new Coordinates(m_Table.Width / 4.0, 0); foreach (var data in c_GraphicsData.Zip(c_BallPositionOffsets, (gd, off) => new { GraphicsData = gd, Position = Coordinates.Add(ballLocation, off) })) { AddBall(data.GraphicsData, c_PhysicsData, data.Position); } }
public GameManager(IGame game, ITableInternal table, IBallSetInternal ballSet, Players players) { m_GetScore = () => game.GetScore(table, ballSet); m_IsOver = () => game.IsOver(ballSet); m_HasWin = () => game.HasWin(ballSet); m_BallSet = ballSet; m_Players = players; m_Players.ShotDataReady += m_BallSet.HitBall; var balls = m_BallSet.Balls.Except(m_BallSet.CueBalls); InGameBallCount = balls.Count(); foreach (IBallInternal b in balls) { b.RemovedFromGame += () => InGameBallCount--; } }
public Ball(BallGraphicsData graphicsData, BallPhysicsData physicsData, ITableInternal table, Coordinates startPosition) { m_GraphicsData = graphicsData; m_PhysicsData = physicsData; m_Table = table; m_BallInterface = this; m_InGame = true; m_Position = startPosition; m_Velocity = Coordinates.Zero; m_DrawingOffset = new Coordinates(m_Table.Width / 2, m_Table.Height / 2); Coordinates.MakeReadonly(m_DrawingOffset); m_BallDrawingOffset = new Coordinates(m_PhysicsData.Radius, m_PhysicsData.Radius); Coordinates.MakeReadonly(m_BallDrawingOffset); m_StripedRadius = (int)Math.Ceiling(m_PhysicsData.Radius * m_GraphicsData.StripedRadiusCoefficient); m_StripedDiameter = 2 * m_StripedRadius; m_StripedDrawingOffset = new Coordinates(m_StripedRadius, m_StripedRadius); Coordinates.MakeReadonly(m_StripedDrawingOffset); m_DirectionUpdated = false; }
public ComponentManager(IGame game, IGameMetadata gameMetadata, ExportFactory <IBrain, IBrainMetadata> brainFactory) { m_EvolutionLock = new object(); m_Game = game; m_GameMetadata = gameMetadata; m_Table = TableFactory.GetTable(gameMetadata.Table); m_ValidGames = new List <GameManager>(); //load accessory functions from brain assembly new CompositionContainer(new TypeCatalog(brainFactory.Metadata.BrainType)).ComposeParts(this); m_Population = brainFactory.Metadata.Population; m_MaxShot = 0; m_MaxBalls = 0; m_ShotCount = 1; m_BallCount = null; m_PlayingGamesCount = m_Population; m_BestScore = null; PlayWinner = false; Initialize((pop, play) => brainFactory.CreateExport().Value); }