Exemple #1
0
        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());
        }
Exemple #2
0
        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);
        }
Exemple #4
0
    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");
    }
Exemple #5
0
 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;
     }
 }
Exemple #6
0
    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);
    }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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());
        }
Exemple #12
0
        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);
        }