Unity/수업내용(C#)

[3.24] delegate를 이용한 드론과 컨트롤러

ljw4104 2021. 3. 24. 12:02
using System;

namespace Study10
{
    public struct Vector3
    {
        public int x;
        public int y;
        public int z;
        public static Vector3 zero = new Vector3(0, 0, 0);

        public Vector3(int x, int y, int z)
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }

        public override string ToString()
        {
            return String.Format("Position : {0}.{1}.{2}", this.x, this.y, this.z);
        }
    }

    public class Drone
    {
        public enum eDirection
        {
            UP,DOWN,FORWARD,LEFT,RIGHT
        }
        private Vector3 position;

        public Drone()
        {
            position = Vector3.zero;
        }

        public void Move(eDirection dir)
        {
            switch ((int)dir)
            {
                case 0:
                    position.z++;
                    break;
                case 1:
                    position.z--;
                    break;
                case 2:
                    position.x++;
                    break;
                case 3:
                    position.y++;
                    break;
                case 4:
                    position.y--;
                    break;
                default:
                    Console.WriteLine("잘못된 방향입니다.");
                    break;
            }
            SendPosition();
        }

        public Vector3 SendPosition()
        {
            return position;
        }
    }

    public class Monitor
    {
        private Drone drone;
        public Monitor(Drone drone)
        {
            this.drone = drone;
        }

        public void Print()
        {
            Console.WriteLine(drone.SendPosition());
        }
    }

    public class Controller
    {
        private Drone drone;
        public Action<Drone.eDirection> droneMove;
        public Controller()
        {

        }

        public void Connect(Drone drone)
        {
            this.drone = drone;
            droneMove = drone.Move;
            Console.WriteLine("Connected with {0}\n", this.drone.ToString());
        }

        public void Move(Drone.eDirection dir)
        {
            this.droneMove(dir);
        }
    }

    public class App
    {
        public App()
        {
            Drone drone = new Drone();
            Controller controller = new Controller();
            Monitor monitor = new Monitor(drone);

            Console.WriteLine("드론과 컨트롤러를 연결합니다.");
            controller.Connect(drone);

            controller.droneMove(Drone.eDirection.FORWARD);
            monitor.Print();

            controller.droneMove(Drone.eDirection.UP);
            monitor.Print();
        }
    }
}

드론의 좌표는 Vector3라는 구조체를 만들어서 저장시킨다.

따로 Position 구조체의 ToString 형태를 오버라이딩해서 출력을 편하게 하였다.

좌표는 3차원 좌표계를 따른다.