예제 #1
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        public ScareCrow()
        {
            cornMesh = new XMesh("data/corn.x");
            cornfields.Add(new CornField(cornMesh, new Vector3(30, 0, 30)));
            cornfields.Add(new CornField(cornMesh, new Vector3(-30, 0, 30)));
            cornfields.Add(new CornField(cornMesh, new Vector3(-30, 0, -30)));

            birds        = new Birds(100);
            birds.Random = false;
            birds.SetRandomTarget();

            arrow      = new GameObject();
            arrow.Mesh = new XMesh("data\\arrow.x");

            startTime = 0;
        }
예제 #2
0
        public void OnFrameMove(Microsoft.DirectX.Direct3D.Device device, double totalTime, float elapsedTime)
        {
            if (startTime != 0)
            {
                if (cropsLeft > 0)
                {
                    minutes = (int)Math.Floor((Program.Instance.CurrentTime - startTime) / 60);
                    seconds = (int)Math.Floor((Program.Instance.CurrentTime - startTime) - minutes * 60);
                }

                if (cropsLeft < 0)
                {
                    Program.Instance.CenterHud.ShowGameText(string.Format("Game over!\nYou defended the crops for {0} minutes and {1} seconds",
                                                                          minutes, seconds), 1000);
                }
                else
                {
                    Program.Instance.CenterHud.ShowGameText(string.Format("Your time : {0}:{1}\nCrops remaining : {2}%", minutes, seconds.ToString("00"), (int)(Math.Floor(cropsLeft))),
                                                            1000);
                }
            }
            else
            {
                startTime = Program.Instance.CurrentTime;
            }

            if (totalTime > lastUpdate + 5)
            {
                if ((birds.TargetReached) || (currentTargetField == -1))
                {
                    if ((birds.TargetReached) && (currentTargetField != -1))
                    {
                        if (!justArrived)
                        {
                            justArrived = true;
                        }
                        else
                        {
                            Retarget();
                        }
                    }
                    else
                    {
                        Retarget();
                    }
                }
                lastUpdate = totalTime;
            }
            if (birds.TargetReached)
            {
                if (currentTargetField != -1)
                {
                    bool temp = birds.TargetReached;
                    cropsLeft         -= (double)(2 * elapsedTime);
                    arrow.Position     = new Vector3(cornfields[currentTargetField].Position.X, 3f, cornfields[currentTargetField].Position.Z);
                    arrow.RotateYAngle = (float)totalTime;
                    arrow.OnFrameMove(device, totalTime, elapsedTime);
                }
            }
            foreach (CornField field in cornfields)
            {
                field.OnFrameMove(device, totalTime, elapsedTime);
            }
            birds.OnFrameMove(device, totalTime, elapsedTime);
            if (birds.Scared)
            {
                currentTargetField = -1;
                birds.SetRandomTarget();
            }
        }