// 코딩스탠다드 코딩컨벤션 코드컨벤션
// 한줄 또는 여러줄 둘다 사용
using System;using System.Text;using UnityEngine; // 가능
using Ext;
using Ext.Unity3D;
using UnityEngine.UI;
#if LOG_DEBUG
using Ext.Debugging;
#endif// LOG_DEBUG
using ReadWriteCsv;

public enum DAMAGE_TYPE { NORMAL, CRITICAL, SUPER_CRITICAL }
public enum GET_GOLD_TYPE { STAGE, MOB, REWARD, PURCHASED }

namespace ACABerryGames
{
    public class ExampleClass : BaseClass
    {
        // 1) 변수
        int hp;// NOTE: private
        public int Mp;
        protected int bar;// NOTE: protected (for override)
        static int baz;

        public int Foo; // 기본 퍼블릭은 대문자, 프라이빗 소문자


        // 2) 인터페이스 -> 보통 맨 아래 위치
        public long GetTotalDamage => (long)(this.hp * this.bar);
        public int PropertyShortVer { get { return this.hp; } } // NOTE: read only

        // 아래와 같은 get/set도 이 위치
        public string PropertyLargeVer
        {
            set
            {
                // ...
            }
            get
            {
                var sb = new StringBuilder();
                sb.Append("blah1").Append("blah2");

                if (this.bar == 0)
                    sb.Append("blah3");
                else
                    sb.Append("blah4");

                // 또는 유틸의 Stb사용하여
                // return ACAUTIL.Stb("blah1", "blah2", (this.bar == 0) ? "blah3" : "blah4");

                return sb.ToString();
            }
        }

        // 3) 생성자
        // summary는 <summary>를 삭제후, 필요한 파라미터만 셋팅. 기본은 함수위 // 주석만 사용
        /// <param name="Mp">마나의 위엄</param>
        /// <param name="_name">이름이 없어도 상관없음</param>
        public ExampleClass(int Mp, int _mp, int _exp, string _name)
        {
            // _hp와 Hp둘다 사용 가능(Ctrl+C+V 의 문제로 인해)
            this.Mp = _mp;
            this.Mp = Mp;
        }

        // 하지만 이러면 어떻게 될까?
        /// <param name="_def">방어력 졸라쌤</param>
        public void SetDef(int _def)
        {

        }

        // 4) 일반함수
        public ExampleClass(int _foo) : base()
        {
            this.hp = _foo; // this 사용
            this.bar = this.MethodTemplate();
            this.Method();

            ExampleClass.MethodStatic(_foo);
            MethodStatic(_foo);
            // 둘다 사용

            this.Txt("HP", this.hp.ToString());
            Txt("HP", this.hp.ToString());
            // 둘다 사용

            if (this.hp == 0) Debug.Log("hp is zero");
            else
                Debug.Log("hp is not zero");
            // 둘다 사용

            var a = new ExampleClass(30, 10, 30, "Player");
            var b = new ExampleClass(30
                , 10
                , 30
                , "Player"
                );
            // 둘다 사용 가능. 대신 쉼표(,)는 앞에. Ctrl+C+V 용이하므로

            if (this.hp == 0)
            {
            }
            else if (this.hp < 50)
            {
            }
            else
            {
            }

            switch (this.hp)
            {
                case 0:
                    break;
                case 1:
                    {
                        // NOTE: large case
                        break;
                    }
                case 2:
                case 3:
                case 4:
                    // NOTE: multiple
                    break;
                default:
                    break;
            }
        }


        public static int PropertyStatic { get { return ExampleClass.baz; } }
        public void Method()
        {
            // ...
        }
        public static void MethodStatic(int _value)
        {
            // 비교변수(변하는 값)을 앞에 쓰고, 뒤에는 고정된 값(피비교 변수)을 사용
            if (_value > ExampleClass.baz)
            {
                // ...
            }
        }

        protected virtual int MethodTemplate()// NOTE: template method pattern
        {
            return 0;
        }

        // ENUM 적극 활용 : 코드를 읽을때 true / false 가 뭔지 모르는 경우 코드 읽는데 시간이 걸림
        // ex) SetDamage(bool _isCri) 이면, 호출시 SetDamage(true) 인 경우 보기 어려울 수 있음
        public void SetDamage(DAMAGE_TYPE _type)
        {
        }


        // 기본함수명 사용방법

        // 골드를 얻는다.
        public void GetGold()
        {
            // 이 함수명은 -> 모든 골드를 얻는경우 통틀어 사용
            // GetGold() 만 사용하는 경우는 Info안에 있는 경우 추천(어디서 가져오는지 그냥 딱봐도 알수있는 경우)
            // 예를들면 TextFlow.cs를 호출할때의 SetText(string _text)는 누가봐도 세팅하는 상황이라 이해가 빠름
        }
        public void GetGold(GET_GOLD_TYPE _type)
        {
            // 이 함수명이라면 골드 얻는 경우가 많은 경우 사용
        }
        public void GetGoldFromCharacterInventory()
        {
            // 이 함수명이라면 평범하게 얻는 골드가 아닌경우(특수상황)
        }
        // 주석다는 기준은 없지만 적당히 알아볼 수 있게(GetGold걍 쓰고 주석에 //인벤토리 골드 가져옴 써도 됨)


        // 웬~만하면 통일되는 기본 함수명 On, Set, Get
        // On은 코드로 부르는것보다는(코드로 부른다면 웬만하면 Set) 코루틴 동작이나 사용자의 터치 등 '발생시키다' 보다는 '발생되어지다' 인 경우 사용.
        // 코드로 이 함수를 부르는 경우는 최소화(코루틴에서 부르는 경우 제외)
        public void OnPress(GameObject _obj)
        {
        }

        public void SetMoveSpeed(float _spd)
        {
        }

    }
}

public class BaseClass
{
    public void Txt(string _key, string _val)
    {
    }
}
EnumCollector.cs
namespace ACABerryGames
{
    // System------------------------------------------------
    public enum DEVICE_TYPE
    {
        Android,
        iOS,
    }
    // System------------------------------------------------



    // UI    ------------------------------------------------
    public enum ITEM_TYPE
    {
        Card,
        Item,
        Package,
    }
    // UI    ------------------------------------------------
}
반응형

'■ 1인개발 프로젝트' 카테고리의 다른 글

2022년도 1인개발 결산  (2) 2023.01.19
#00. ACABerryStudio - LOGO  (2) 2018.07.06

+ Recent posts