示例#1
0
            public DanceSprite NextMove()
            {
                DanceSprite sprite = DanceSprite.Random();
                Vector2     pos    = Center();

                pos.Y = 0;
                sprite.Sprite.Position = pos + Viewport.Position;
                sprite.Sprite.Size     = SIZE;
                return(sprite);
            }
示例#2
0
        public FilledDisplay[] EnumerateFloor()
        {
            FilledDisplay[] floor   = new FilledDisplay[9];
            IMyCubeBlock    topLeft = GridTerminalSystem.GetBlockWithName("P_FLOOR");

            if (topLeft != null && topLeft is IMyTextPanel)
            {
                DanceSprite[] sprites   = DanceSprite.ALL();
                Vector3I      origin    = topLeft.Position;
                Vector3I      Y         = Base6Directions.GetIntVector(topLeft.Orientation.Up) * -1;
                Vector3I      X         = Base6Directions.GetIntVector(topLeft.Orientation.Left) * -1;
                Vector3I[]    positions = new Vector3I[9];
                for (int y = 0; y < 3; y++)
                {
                    for (int x = 0; x < 3; x++)
                    {
                        positions[(y * 3) + x] = origin + (Y * y) + (X * x);
                    }
                }
                int found = 0;
                List <IMyTextPanel> panels = new List <IMyTextPanel>();
                GridTerminalSystem.GetBlocksOfType(panels);
                foreach (IMyTextPanel panel in panels)
                {
                    for (int i = 0; i < positions.Length; i++)
                    {
                        if (panel.Position == positions[i])
                        {
                            floor[i] = new FilledDisplay(panel, sprites[i].Sprite, panel);
                            floor[i].Draw();
                            Log(String.Format("Addded floor #{0} in position {1}", i, panel.Position));
                            found++;
                        }
                    }
                }
            }
            return(floor);
        }
示例#3
0
            override public void DrawFrame(MySpriteDrawFrame frame)
            {
                if (queuedMoves.Count == 0)
                {
                    queuedMoves.Add(NextMove());
                }
                using (frame)
                {
                    bool collision = false, over = true;
                    for (int i = queuedMoves.Count - 1; i >= 0; i--)
                    {
                        Vector2 oldPos  = queuedMoves[i].Sprite.Position.Value;
                        Vector2 nextPos = oldPos + speed;
                        if (nextPos.Y - Viewport.Y >= Size().Y)
                        {
                            queuedMoves.RemoveAt(i);
                        }
                        else
                        {
                            DanceSprite newMove = queuedMoves[i];
                            newMove.Sprite.Position = nextPos;
                            if (Collides(newMove.Sprite, activeBox))
                            {
                                collision = true;
                                if (program._floor != null)
                                {
                                    List <MyDetectedEntityInfo> entities = new List <MyDetectedEntityInfo>();
                                    program._sensor.DetectedEntities(entities);
                                    foreach (MyDetectedEntityInfo entity in entities)
                                    {
                                        if (EntityOver(program._floor[newMove.Index].Block, entity))
                                        {
                                            if (newMove.Success == false)
                                            {
                                                points         += 1;
                                                newMove.Success = true;
                                            }
                                        }
                                    }
                                }
                                over &= newMove.Success;
                            }
                            queuedMoves[i] = newMove;
                            if ((i == queuedMoves.Count - 1) && (nextPos.Y - Viewport.Position.Y >= Size().Y * 0.2))
                            {
                                queuedMoves.Add(NextMove());
                            }
                        }
                    }
                    if (collision)
                    {
                        activeBox.Color = over ? Color.Green : Color.Red;
                    }
                    else
                    {
                        activeBox.Color = Color.White;
                    }

                    frame.Add(new MySprite()
                    {
                        Type            = SpriteType.TEXT,
                        Data            = String.Format("Points {0}", points),
                        Position        = Viewport.Position,
                        RotationOrScale = 1.0f,
                        Color           = Color.Red,
                        Alignment       = TextAlignment.LEFT,
                        FontId          = "White"
                    });
                    frame.Add(activeBox);
                    frame.AddRange(queuedMoves.ConvertAll(move => move.Sprite));
                }
            }
示例#4
0
 public static MySprite Convert(DanceSprite sprite)
 {
     return(sprite.Sprite);
 }