using StgSharp.Linear; using StgSharp.Math; using System; using System.Collections.Generic; using System.Text; namespace StgSharp.Geometries { public class Circle : IPlainGeometry { internal Point _baseCenter; internal Point _center; internal Point _pointOnCircle; internal Point _pointOnPlain; internal RenderMode _renderMode; internal readonly uint bornTick; public override Point BasePoint => _baseCenter; public override Point RefPoint => _center; public override Point RefVec01 => _pointOnCircle; public override Point RefVec02 => _pointOnPlain; public override RenderMode renderMode => _renderMode; public Circle(uint bornTime) : base(bornTime) { bornTick = bornTime; } public Circle(Counter tickCounter) : base(tickCounter) { bornTick = tickCounter._value; } internal override void CalcVec01(uint tick) { _center._position = _baseCenter._position + MoveCenter(tick); } internal override void CalcVec02(vec3d vec, uint tick) { _pointOnCircle._position = vec + UpdateRadius(tick); } internal override void CalcVec03(vec3d vec, uint tick) { _pointOnPlain._position = vec + UpdatePlain(tick); } public virtual vec3d MoveCenter(uint tick) => default; public virtual vec3d UpdateRadius(uint tick) => default; public virtual vec3d UpdatePlain(uint tick) => default; public override float SetArrayX() { throw new NotImplementedException(); } public override float SetArrayY() { throw new NotImplementedException(); } public override Plain GetPlain() { return new Plain(_center,_pointOnCircle,_pointOnPlain); } internal override void OnRender(uint tick) { tick-=bornTick; CalcVec01(tick); switch (_renderMode) { case RenderMode.BasePoint: CalcVec02(_baseCenter._position,tick); CalcVec03(_baseCenter._position,tick); break; case RenderMode.RefPoint: CalcVec02(_center._position, tick); CalcVec03(_center._position, tick); break; default: break; } } public override Line[] GetAllSides() { throw new NotImplementedException(); } } }