Ejemplo n.º 1
0
 protected BallSetBase(ITableInternal table)
 {
     m_Table     = table;
     m_Balls     = new List <IBallInternal>();
     m_CueBalls  = new List <IBallInternal>();
     m_BallSteps = new Dictionary <IBallInternal, BallStepInfo>();
 }
Ejemplo n.º 2
0
 public void Visit(ITableInternal <TElement> table)
 {
     if (Content.ContainsKey(JsonProperties.Table))
     {
         var pile = (JObject)Content[JsonProperties.Table];
         Load(pile, table);
     }
 }
Ejemplo n.º 3
0
 public void Visit(ITableInternal <TElement> table)
 {
     if (Deck.Options.Table.Enabled)
     {
         var obj = new JObject();
         Serialize(obj, table);
         Content.Add(JsonProperties.Table, obj);
     }
 }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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--;
            }
        }
Ejemplo n.º 6
0
 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;
 }
Ejemplo n.º 7
0
 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);
 }