Roman e3e11e2556 任务:编写玩法框架
1.制作障碍系统

(1.制作几种类型的障碍物的预制体
((*.编写障碍物基类,以下几种均继承自基类,含碰撞体,RememberY(生成障碍物时该有多大的Y)
((1.矮障碍,仅碰撞体
((2.高障碍,仅碰撞体
((3.可冲破障碍
(((1.除基本碰撞体外,额外包含一个触发器,比碰撞体先检测到马,同时获取马的x速度,大于阈值则给障碍做破碎,用马的力度决定破碎力,关闭碎块和马的碰撞
(((*.导入某2D破碎插件
((4.人马分离障碍
(((WAIT,需要等待人马分离系统先搭建

(2.编写障碍物生成系统
((1.每若干时间,生成一个随机一种障碍,若干的范围可控
(((1.设计协程,从预制体列表中随机出一种,并在计算好的位置实例化,随后等待范围内的若干时间,然后检查马的存活情况,若马仍存活,重新调用本协程
((2.生成的位置:x在相机右侧若干不变距离,y根据障碍物的不同而不同,需要计算保存。

(3.编写障碍物消亡系统
((1.每个障碍物和碎片都会在离开镜头后被删除
2022-07-30 00:47:44 +08:00

50 lines
1.2 KiB
C#

using UnityEngine;
using System.Collections.Generic;
namespace Delaunay
{
namespace Geo
{
public sealed class Polygon
{
private List<Vector2> _vertices;
public Polygon (List<Vector2> vertices)
{
_vertices = vertices;
}
public float Area ()
{
return Mathf.Abs (SignedDoubleArea () * 0.5f); // XXX: I'm a bit nervous about this; not sure what the * 0.5 is for, bithacking?
}
public Winding Winding ()
{
float signedDoubleArea = SignedDoubleArea ();
if (signedDoubleArea < 0) {
return Geo.Winding.CLOCKWISE;
}
if (signedDoubleArea > 0) {
return Geo.Winding.COUNTERCLOCKWISE;
}
return Geo.Winding.NONE;
}
private float SignedDoubleArea () // XXX: I'm a bit nervous about this because Actionscript represents everything as doubles, not floats
{
int index, nextIndex;
int n = _vertices.Count;
Vector2 point, next;
float signedDoubleArea = 0; // Losing lots of precision?
for (index = 0; index < n; ++index) {
nextIndex = (index + 1) % n;
point = _vertices [index];
next = _vertices [nextIndex];
signedDoubleArea += point.x * next.y - next.x * point.y;
}
return signedDoubleArea;
}
}
}
}