70 lines
1.8 KiB
C#
70 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace StgSharp_Geometry
|
|
{
|
|
internal unsafe class PointOnCircle : Point
|
|
{
|
|
private Circle _bindedItem;
|
|
|
|
public Circle geometryItem
|
|
{
|
|
get { return _bindedItem; }
|
|
set { _bindedItem = value; }
|
|
}
|
|
|
|
private float _angle;
|
|
|
|
public float Angle
|
|
{
|
|
get { return _angle; }
|
|
set { _angle = value; }
|
|
}
|
|
|
|
private float[] _angularVelocity;
|
|
private readonly uint beginTick;
|
|
private readonly uint* nowtick;
|
|
|
|
public PointOnCircle(Circle c, float p, float angle, uint counts,uint* gameTick)
|
|
{
|
|
_bindedItem = c;
|
|
_angle = (angle + counts * (360.0f / counts))*(float)(2*Math.PI/360);
|
|
nowtick = gameTick;
|
|
beginTick = *gameTick;
|
|
}
|
|
|
|
public void AddRotation(float[] aFunc)
|
|
{
|
|
if (aFunc.Length==10)
|
|
{
|
|
_angularVelocity=aFunc;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Parameters are too much or too few!");
|
|
}
|
|
}
|
|
public override void OnRender()
|
|
{
|
|
if (_angularVelocity!=null)
|
|
{
|
|
uint a = *nowtick - beginTick;
|
|
float deltaAngle = 0;
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
deltaAngle += _angularVelocity[i];
|
|
deltaAngle *= a;
|
|
}
|
|
_angle+=deltaAngle;
|
|
}
|
|
|
|
this.X = (float)(_bindedItem.Center.X + _bindedItem.Radius * Math.Cos(_angle));
|
|
this.Y = (float)(_bindedItem.Center.X + _bindedItem.Radius * Math.Sin(_angle));
|
|
|
|
}
|
|
}
|
|
}
|