public override IBrush GetBrush(byte alpha) { if (_canvasRadialGradientBrush == null) { var center = new Vector2(_x0, _y0); center = LocalMatrix.Transform(center); // // var properties = new RadialGradientBrushProperties // { // RadiusX = _r, // RadiusY = _r, // Center = center // }; // // var collection = new GradientStopCollection(renderTarget, _canvasGradientStopCollection, Gamma.Linear, ExtendMode.Clamp); // //TODO: OID: property missed, Same for Linear // _canvasRadialGradientBrush = new RadialGradientBrush { Radius = _r, Center = new RelativePoint(center.X, center.Y, RelativeUnit.Relative), GradientStops = _canvasGradientStopCollection }; } _canvasRadialGradientBrush.Opacity = alpha / 255f; return(_canvasRadialGradientBrush.ToImmutable()); }
public override IBrush GetBrush(byte alpha) { if (_canvasRadialGradientBrush is not null) { return(_canvasRadialGradientBrush); } var startPoint = new Vector((float)_x0, (float)_y0); var endPoint = new Vector((float)_x1, (float)_y1); startPoint = LocalMatrix.Transform(startPoint); endPoint = LocalMatrix.Transform(endPoint); var x0 = startPoint.X; var y0 = startPoint.Y; var x1 = endPoint.X; var y1 = endPoint.Y; var r = Math.Sqrt(Math.Pow(x1 - x0, 2) + Math.Pow(y1 - y0, 2)); var ang = Math.Atan2(x1 - x0, y1 - y0); var percent = _hl; percent = percent switch {
public override void Save(SaveContext saveContext) { var utility = saveContext.Utility; base.Save(saveContext); utility.Write(Unknown1); utility.Write(BranchVisible); // FIXME according to SPICA this is an arbitrary list of child "GfxObjects" (AKA ChunkDICTObject in my world) // Dunno if it's freeform (unlikely) or has context to specific types (in which case we'll need some clever implementation) utility.Write(ChildCount); // ??? utility.Write(ChildOffset); // Offset to pointer list (?) of children I assume if (ChildCount != 0 && ChildOffset != 0) { throw new NotImplementedException("Child objects not implemented"); } saveContext.WriteDICTPointerPlaceholder(AnimGroup); TransformScale.Write(utility); TransformRotate.Write(utility); TransformTranslate.Write(utility); LocalMatrix.Write(utility); WorldMatrix.Write(utility); }
public TectonicPlate(UInt16 id, Color color, uint origin, float height, bool ocean, float movement, float rotation) { this.id = (UInt16)(id + 1); this.plateColor = color; this.height = height; plateCellList = new List <uint>(); plateCellList.Add(origin); World.CellTecID[origin] = this.id; World.Height[origin] = this.height; this.location = World.Cells[origin].Location; this.localMatrix = Matrix4x4.TRS(this.Location, Quaternion.LookRotation(this.Location), Vector3.one); //Debug.Log("Plate " + this.id + " createed with matrix: " + localMatrix.ToString()); checkList = new List <uint>(); this.angular = UnityEngine.Random.Range(-rotation, rotation); this.movement = LocalMatrix.MultiplyPoint3x4(new Vector3(UnityEngine.Random.Range(-movement, movement), UnityEngine.Random.Range(-movement, movement), 0)) - this.Location; //origin.PlateMovement = this.movement; this.isOceanPlate = ocean; //this.movement = new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f),UnityEngine.Random.Range(-0.05f, 0.05f),0); foreach (uint i in World.Cells[origin].CloseNeighbours) { if (World.CellTecID[i] == 0) { checkList.Add(i); } } //Debug.Log("Plate " + id + " created with " + checkList.Count + " in checklist"); }
protected override void UpdateSelf() { if (InherintHasChanges) { LocalMatrix = LocalMatrix.Make(Scale.x, Scale.y, Position.x, Position.y, Rotation, Shear.x, Shear.y); WorldMatrix = Parent?.WorldMatrix.Concat(LocalMatrix, _inheritRotation, _inheritScale) ?? LocalMatrix; } }
public bool Grow() { if (checkList.Count != 0) { int chance = UnityEngine.Random.Range(0, 100); if (chance > 50) { List <uint> temp = new List <uint>(); int count1 = 0; Quaternion rotation = Quaternion.Euler(0, 0, angular * 50); foreach (uint c in checkList) { if (World.CellTecID[(int)c] == 0) { Cell cell = World.Cells[(int)c]; plateCellList.Add(c); World.CellTecID[(int)c] = this.id; World.Height[(int)c] = this.height; GenerateTectonics.TectonicMotion[cell.Id] = movement; // Input rotation Vector3 vec = rotation * LocalMatrix.inverse.MultiplyPoint3x4(cell.Location); GenerateTectonics.TectonicMotion[cell.Id] += LocalMatrix.MultiplyPoint3x4(vec) - cell.Location; count1++; foreach (int i in cell.CloseNeighbours) { if (World.CellTecID[i] == 0) { temp.Add((uint)i); } } } } //Debug.Log("Tectonic Plate " + id + " grown by " + count1); checkList = temp; //Debug.Log(temp.Count + " added to " + id + " checklist"); } } else { return(true); } return(false); }
public override ICanvasBrush GetBrush(CanvasDevice device, byte alpha) { var startPoint = new Vector2(_x0, _y0); var endPoint = new Vector2(_x1, _y1); startPoint = LocalMatrix.Transform(startPoint); endPoint = LocalMatrix.Transform(endPoint); var canvasLinearGradientBrush = new CanvasLinearGradientBrush(device, _canvasGradientStopCollection, CanvasEdgeBehavior.Clamp, CanvasAlphaMode.Straight) { StartPoint = startPoint, EndPoint = endPoint, Opacity = alpha / 255f }; return(canvasLinearGradientBrush); }
public override ICanvasBrush GetBrush(CanvasDevice device, byte alpha) { var center = new Vector2(_x0, _y0); center = LocalMatrix.Transform(center); var canvasRadialGradientBrush = new CanvasRadialGradientBrush(device, _canvasGradientStopCollection, CanvasEdgeBehavior.Clamp, CanvasAlphaMode.Straight) { Center = center, Opacity = alpha / 255f, RadiusX = _r, RadiusY = _r }; return(canvasRadialGradientBrush); }
public override IBrush GetBrush(byte alpha) { if (_canvasLinearGradientBrush == null) { var startPoint = new Vector((float)_x0, (float)_y0); var endPoint = new Vector((float)_x1, (float)_y1); startPoint = LocalMatrix.Transform(startPoint); endPoint = LocalMatrix.Transform(endPoint); _canvasLinearGradientBrush = new ImmutableLinearGradientBrush(_canvasGradientStopCollection, alpha / 255f, startPoint: new RelativePoint(startPoint.X, startPoint.Y, RelativeUnit.Relative), endPoint: new RelativePoint(endPoint.X, endPoint.Y, RelativeUnit.Relative)); } return(_canvasLinearGradientBrush); }
public override Brush GetBrush(RenderTarget renderTarget, byte alpha) { if (_canvasLinearGradientBrush == null || _canvasLinearGradientBrush.IsDisposed) { var startPoint = new Vector2(_x0, _y0); var endPoint = new Vector2(_x1, _y1); startPoint = LocalMatrix.Transform(startPoint); endPoint = LocalMatrix.Transform(endPoint); _canvasLinearGradientBrush = new LinearGradientBrush(renderTarget, new LinearGradientBrushProperties { StartPoint = startPoint.ToRaw(), EndPoint = endPoint.ToRaw(), } , new GradientStopCollection(renderTarget, _canvasGradientStopCollection, Gamma.Linear, ExtendMode.Clamp)); } _canvasLinearGradientBrush.Opacity = alpha / 255f; return(_canvasLinearGradientBrush); }
public override IBrush GetBrush(byte alpha) { if (_canvasLinearGradientBrush == null) { var startPoint = new Vector2(_x0, _y0); var endPoint = new Vector2(_x1, _y1); startPoint = LocalMatrix.Transform(startPoint); endPoint = LocalMatrix.Transform(endPoint); _canvasLinearGradientBrush = new LinearGradientBrush { StartPoint = new RelativePoint(startPoint.X, startPoint.Y, RelativeUnit.Relative), EndPoint = new RelativePoint(endPoint.X, endPoint.Y, RelativeUnit.Relative), GradientStops = _canvasGradientStopCollection }; } _canvasLinearGradientBrush.Opacity = alpha / 255f; return(_canvasLinearGradientBrush.ToImmutable()); }
public override Brush GetBrush(RenderTarget renderTarget, byte alpha) { if (_canvasRadialGradientBrush == null || _canvasRadialGradientBrush.IsDisposed) { var center = new Vector2(_x0, _y0); center = LocalMatrix.Transform(center); var properties = new RadialGradientBrushProperties { RadiusX = _r, RadiusY = _r, Center = center }; var collection = new GradientStopCollection(renderTarget, _canvasGradientStopCollection, Gamma.Linear, ExtendMode.Clamp); //TODO: OID: property missed, Same for Linear _canvasRadialGradientBrush = new RadialGradientBrush(renderTarget, properties, collection); } _canvasRadialGradientBrush.Opacity = alpha / 255f; return(_canvasRadialGradientBrush); }