2nd update on 20230415 by nitload youmu

This commit is contained in:
Nitload
2023-04-15 18:27:59 +08:00
parent a305aab094
commit 9756504e9d
29 changed files with 257 additions and 102 deletions
+55 -11
View File
@@ -1,25 +1,27 @@
using StgSharp.Math;
using StgSharp.Control;
using StgSharp.Linear;
using StgSharp.Math;
using System;
using System.Collections.Generic;
using System.Text;
namespace StgSharp.Geometries
{
public class Rectangle : IGeometry
public class Rectangle : IPlainGeometry
{
internal Point _basePoint;
internal Point _center;
internal Point _centerToCorner1;
internal Point _centerToCorner2;
internal Point _vertex1;
internal Point _vertex2;
internal RenderMode _renderMode;
internal readonly uint bornTick;
public override sealed Point BasePoint => _basePoint;
public override sealed Point RefPoint=>_center;
public override sealed Point RefVec01 => _centerToCorner1;
public override sealed Point RefVec01 => _vertex1;
public override sealed Point RefVec02 => _centerToCorner2;
public override sealed Point RefVec02 => _vertex2;
public override RenderMode renderMode => _renderMode;
@@ -75,7 +77,7 @@ namespace StgSharp.Geometries
/// <param name="tick">当前游戏刻</param>
internal override void CalcVec02(vec3d vec, uint tick)
{
_centerToCorner1._position = vec + UpdateCTC1(tick);
_vertex1._position = vec + UpdateCTC1(tick);
}
/// <summary>
@@ -87,9 +89,9 @@ namespace StgSharp.Geometries
/// <exception cref="ArgumentException">计算出的第二条对角线长与第一条不相等</exception>
internal override void CalcVec03(vec3d vec, uint tick)
{
_centerToCorner2._position = vec + UpdateCTC2(tick);
if (_centerToCorner1._position.GetLength()
== _centerToCorner2._position.GetLength())
_vertex2._position = vec + UpdateCTC2(tick);
if (_vertex1._position.GetLength()
== _vertex2._position.GetLength())
{
throw new ArgumentException("Cannot form a triangle, " +
"two crossing lines are not equal!");
@@ -114,7 +116,49 @@ namespace StgSharp.Geometries
public override Line[] GetAllSides()
{
throw new NotImplementedException();
Line[] sides = new Line[4]
{
new Line(GameTimeLine.tickCounter),
new Line(GameTimeLine.tickCounter),
new Line(GameTimeLine.tickCounter),
new Line(GameTimeLine.tickCounter),
};
sides[0]._basePoint = this._vertex1;
sides[0]._beginPoint = this._vertex1;
sides[0]._endPoint = this._vertex2;
sides[1]._basePoint = this._vertex2;
sides[1]._beginPoint = this._vertex2;
sides[1]._endPoint = new Point() { _position = GetVertex3(GameTimeLine.tickCounter) };
sides[1].movEnd += this.GetVertex3;
sides[2]._basePoint = sides[1]._endPoint;
sides[2]._beginPoint = sides[2]._basePoint;
sides[2]._endPoint = new Point() { _position = this.GetVertex4(GameTimeLine.tickCounter) };
sides[2].movEnd += this.GetVertex4;
sides[3]._beginPoint = sides[2]._endPoint;
sides[3]._endPoint = this._vertex1;
return sides;
}
public override Plain GetPlain()
{
return new Plain(_vertex1._position, );
}
protected vec3d GetVertex3(Counter<uint> tick)
{
return 2 * this._center._position - this._vertex1._position;
}
protected vec3d GetVertex4(Counter<uint> tick)
{
return 2 * this._center._position - this._vertex2._position;
}
}
}