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