[Struct] Point
using System;
public struct Point {
public static readonly Point Empty = new Point();
private int x;
private int y;
public Point (int x, int y) {
this.x = x;
this.y = y;
}
public Point (Size sz) {
this.x = sz.Width;
this.y = sz.Height;
}
public Point (int dw) {
this.x = (short)LOWORD(dw);
this.y = (short)HIWORD(dw);
}
public bool IsEmpty { get { return x == 0 && y == 0; } }
public int X {
get { return x; }
set { x = value; }
}
public int Y {
get { return y; }
set { y = value; }
}
public static implicit operator Point (Size s) {
return new Point(s.Width, s.Height);
}
public static explicit operator Size (Point p) {
return new Size(p.x, p.y);
}
public static Point operator + (Point pt, Size sz) {
return Add(pt, sz);
}
public static Point operator - (Point pt, Size sz) {
return Subtract(pt, sz);
}
public static bool operator == (Point left, Point right) {
return left.X == right.X && left.Y == right.Y;
}
public static bool operator != (Point left, Point right) {
return !(left == right);
}
public static Point Add (Point pt, Size sz) {
return new Point(pt.X + sz.Width, pt.Y + sz.Height);
}
public static Point Subtract (Point pt, Size sz) {
return new Point(pt.X - sz.Width, pt.Y - sz.Height);
}
public static Point Ceiling (Point value) {
return new Point((int)Math.Ceiling((double)value.X), (int)Math.Ceiling((double)value.Y));
}
public static Point Truncate (Point value) {
return new Point((int)value.X, (int)value.Y);
}
public static Point Round (Point value) {
return new Point((int)Math.Round((double)value.X), (int)Math.Round((double)value.Y));
}
public override bool Equals (object obj) {
if (!(obj is Point)) return false;
Point comp = (Point)obj;
return comp.X == this.X && comp.Y == this.Y;
}
public override int GetHashCode() {
return x ^ y;
}
public void Offset (int dx, int dy) {
X += dx;
Y += dy;
}
public void Offset (Point p) {
Offset(p.X, p.Y);
}
public override string ToString () {
return "{X=" + X.ToString() + ",Y=" + Y.ToString() + "}";
}
private static int HIWORD (int n) {
return(n >> 16) & 0xffff;
}
private static int LOWORD (int n) {
return n & 0xffff;
}
}
'Unity' 카테고리의 다른 글
[UnityUI] Nested ScrollRect (0) | 2016.08.08 |
---|---|
[UnityUI] Text LetterSpacing (0) | 2016.08.08 |
[UnityUI] Text Gradient (0) | 2016.08.08 |
그라데이션 배경 (Gradient Shader 활용) (0) | 2015.11.19 |
[Shader] 그라데이션 (Gradient) (0) | 2015.11.19 |
[Struct] Size (0) | 2015.11.07 |
[Shader] 텍스처 회전 (Texture Rotation) (0) | 2015.09.08 |
C# 리스트(List)를 이용해 만든 우선순위큐(PriorityQueue) (0) | 2015.07.23 |
리플렉션 응용 (C# Reflection) (0) | 2015.07.01 |
MonoBehaviour Lifecycle (0) | 2014.06.30 |