// 코딩스탠다드 코딩컨벤션 코드컨벤션
// 한줄 또는 여러줄 둘다 사용
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    ------------------------------------------------
}
반응형

'About ACABerryGames' 카테고리의 다른 글

2022년도 1인개발 결산  (2) 2023.01.19
About ACABerryGames  (0) 2023.01.16

4월

- ACACL2 : 채팅 및 싱크 NodeJS 실시간 동기화(심플 MMO)

- ACACL2 : 캐릭터 슬롯 및 로그인 / 하트비트싱크 및 강퇴

- ACAMogura

 

5월

- ACAPR : 배 모델링 만들기(배리에이션들)

- ACAPR : 배 선택팝업/도크뷰/모델세팅/조이스틱/효과음/나침반UI

- ACAHaon : 최초커밋(5월말), 무기/이펙/공속/이속/플래시/FUI/팝업기본

 

6월

- ACAHaon : 메인UI/스테이징/섹터/스테터스컨트롤/무기장비데이터/무기모델링/가챠/무기등급/스킬슬롯/스킬뽑기/업/락/드랍/몬스터리스트/카메라워크/스킬1

 

7월

- ACAHaon : 드랍/아이템/스킬/포션/칼이펙/가챠/BGM/장비특성/강화/보유효과/등급업/엘리멘탈/재감정/진화/특성

- ACAMogura : 폰트/BGM/아트/하이스코어/스코어팝업

 

8월

- ACAHaon : 아바타:헤어,무기,옷/랜더텍스처/아바타인벤화/다이아수거/레벨업/스텟팝업/링/팽던트

- ACAPRSpace : 맵팝업/쉽모델/자원3종/오더/베이스쉽/가져오기코어

- ACAShipport : 생산선택/터치생산/업그레이드

 

9월

- ACAHaon : 유물/이펙트/조이스틱/셰이더업데이트/진화방식/글로벌버프

- ACAXPRoad : 주행보조/AI/로드디플로이/캣터미널

 

10월

- ACAHaon : 스테이지아이콘/던전입장권/스킬던전/튜토/스이츠시스템/렙제/몹속방/데미지표기/속성딜테스트/장착특수효과/고유이펙/보스던전/엘펜/기리에/절전모드/유물이펙트/버스트스킬/아바타가챠/염색/해체

 

11월

 - ACAHaon : 스토어아바타/이큅인포/펫들/억제기/맵이동제한/일일상점/방치광고다이아/패스구매/ADBuff/SE작업/채팅/반복퀘/옵션팝업/우편함/볼륨/전리품(보물상자)/브로드캐스팅/자동도전/아바타추가/트리섬/나무숨결팬던트/스테미나시스템/스테이징-해물-별-천계-디스코스타

 

12월

- ACAHaon : 레이드스테이지/드라이어드4종/던전BGM/서버붙임/DID발급시스템/타이틀페이지/몹프리펩/리밸런싱/버전패스/점검/오토로그인/계정닉/랭킹/우편/아이콘/이큅지급리워드/오프닝/통신재시도/유물드랍/뉴마크/유물4종(성장형)/크리펜/유니티애즈/유니티IAP/프리징테스트/오프라인박스/GPGS/구글애즈/GPGS테스트/GID복구연계/구글닉/유저로그/전투력시스템/마을NPC디노

 

2023년 1월

- ACAHaon : 스토어URL/서버로그/타이틀작업/아이콘작업/BAT/폰트문제수정/인트로...

 

하나만 좀 만들면 좋았을텐데 5개의 프로젝트가 시간을 많이 잡아먹었다.

 

ACACL2 : 접속자순 생존형 게임 기획인데 싱크맞추는 아이디어만 신나게 내다가 Socket.io가지고 논 것으로 만족했던 프로젝트. 하지만 의도가 심플하고 프로젝트 스케일이 크지 않기에 언제든 복귀할 수 있을것 같다.

ACAPR : 배 모델링을 유모델러로 직접 만들었고, 마을도 서부마을 뜯어다 섬으로 개조하고, 키UI 디테일이 있었다.

ACAPRSpace : UI가 이쁘게 나왔는데, 모선 조립하다가 시간 많이 잡아먹고

ACAShipport : 마지막 레벨디자인까지 하는바람에 노가다작업이 심했고, 자동생산 슬롯때문에 에너지가 소모되었었다.

ACAXPRoad : 직선한정 자동주행을 코드로 구현했고, 바닥에 물체반사로 사펑바닥처럼 만들었으나 포스트이펙트 블룸과 합쳐져 색체가 범벅이라 좀 그랬고, ai 만드는데 차들이 자기들끼리 왤케 부딫히는지... 새로운 유니티 인풋시스템이라 불편했고, 차량 에셋이 너무 무겁고 유니티 z좌표를 1만 넘게 사용하는바람에 도중에 멈춘 프로젝트.

 

ACAHaon : 부유섬 대검소녀키우기 런칭완료(5월말 최초커밋으로, 제작기간  7개월인데 샛길로 새느라 그정돈 안나올듯)

반응형

'About ACABerryGames' 카테고리의 다른 글

CodingConvention-ACABERRYGAMES  (1) 2023.01.27
About ACABerryGames  (0) 2023.01.16

반응형

'About ACABerryGames' 카테고리의 다른 글

CodingConvention-ACABERRYGAMES  (1) 2023.01.27
2022년도 1인개발 결산  (2) 2023.01.19

+ Recent posts