Beispiel #1
0
		public void EarlySimulate ()
		{
			if (HasParent) {

			} else {
				if (VelocityChanged) {
					VelocityMagnitude = Velocity.Magnitude ();
					VelocityChanged = false;

				}

				if (VelocityMagnitude != 0) {
					Position.x += Velocity.x;
					Position.y += Velocity.y;
					PositionChanged = true;
				}
			}
			if (PositionChanged) {
				Partition.PartitionObject (this);
				Offset = Position - LastPosition;
				LastPosition = Position;
				PositionChangedBuffer = true;
			} else {
				PositionChangedBuffer = false;
			}
			if (RotationChanged) {
				RotationChangedBuffer = true;
			} else {
				RotationChangedBuffer = false;
			}
		}
        public void Initialize(Vector2d StartPosition, Vector2d StartRotation)
        {
            Parent = null;

            PositionChanged       = true;
            RotationChanged       = true;
            VelocityChanged       = true;
            PositionChangedBuffer = false;
            RotationChangedBuffer = false;

            Priority = _priority;
            Velocity = Vector2d.zero;
            VelocityFastMagnitude = 0;
            Position = StartPosition;
            Rotation = StartRotation;


            _parent       = null;
            LocalPosition = Vector2d.zero;
            LocalRotation = Vector2d.up;

            XMin = 0;
            XMax = 0;
            YMin = 0;
            YMax = 0;


            PastGridXMin = long.MaxValue;
            PastGridXMax = long.MaxValue;
            PastGridYMin = long.MaxValue;
            PastGridYMax = long.MaxValue;

            if (Shape != ColliderType.None)
            {
                BuildPoints();
                BuildBounds();
            }

            ID = PhysicsManager.Assimilate(this);
            Partition.PartitionObject(this);

            visualPosition = Position.ToVector3(0f);
            lastVisualPos  = visualPosition;
            _positionalTransform.position = visualPosition;

            visualRot     = Quaternion.LookRotation(Rotation.ToVector3(0f));
            lastVisualRot = visualRot;
            _positionalTransform.rotation = visualRot;
        }
Beispiel #3
0
        public void Initialize(Vector3d StartPosition, Vector2d StartRotation, bool isDynamic = true)
        {
            Active = true;
            PositionalTransform = _positionalTransform;
            RotationalTransform = _rotationalTransform;
            if (!Setted)
            {
                this.Setup(null);
            }
            this.RaycastVersion = 0;

            this.HeightPosChanged = true;

            CheckVariables();

            PositionChanged       = true;
            RotationChanged       = true;
            VelocityChanged       = true;
            PositionChangedBuffer = true;
            RotationChangedBuffer = true;

            Priority          = BasePriority;
            Velocity          = Vector2d.zero;
            VelocityMagnitude = 0;
            LastPosition      = _position = StartPosition.ToVector2d();
            _heightPos        = StartPosition.z;
            _rotation         = StartRotation;
            ForwardNeedsSet   = true;
            FastRadius        = this.Radius * this.Radius;

            XMin = 0;
            XMax = 0;
            YMin = 0;
            YMax = 0;


            PastGridXMin = int.MaxValue;
            PastGridXMax = int.MaxValue;
            PastGridYMin = int.MaxValue;
            PastGridYMax = int.MaxValue;

            if (Shape != ColliderType.None)
            {
                BuildPoints();
                BuildBounds();
            }

            ID = PhysicsManager.Assimilate(this, isDynamic);
            Partition.PartitionObject(this);
            if (PositionalTransform != null)
            {
                CanSetVisualPosition         = true;
                _visualPosition              = _position.ToVector3(HeightPos.ToFloat());
                lastVisualPos                = _visualPosition;
                PositionalTransform.position = _visualPosition;
            }
            else
            {
                CanSetVisualPosition = false;
            }
            if (RotationalTransform != null)
            {
                CanSetVisualRotation = true;
                visualRot            = GetVisualRot();
                //				_rotationOffset = transform.GetComponent<InvasionDay.GeoHandler>()._eulerOffset;
                lastVisualRot = visualRot;
            }
            else
            {
                CanSetVisualRotation = false;
            }
            SetVisuals();
            velocityPosition = Vector3.zero;
            this.ImmovableCollisionDirection = Vector2d.zero;
            PartitionChanged = true;
        }
Beispiel #4
0
        public void Initialize(Vector2dHeight StartPosition, Vector2d StartRotation)
        {
            PositionalTransform = _positionalTransform;
            RotationalTransform = _rotationalTransform;
            if (!Setted)
            {
                this.Setup(null);
            }
            this.RaycastVersion = 0;

            this.HeightPosChanged = true;

            CheckVariables();

            PositionChanged       = true;
            RotationChanged       = true;
            VelocityChanged       = true;
            PositionChangedBuffer = true;
            RotationChangedBuffer = true;

            Priority = _basePriority;
            Velocity = Vector2d.zero;
            VelocityFastMagnitude = 0;
            LastPosition          = _position = StartPosition.ToVector2d();
            _heightPos            = StartPosition.Height;
            _rotation             = StartRotation;
            ForwardNeedsSet       = true;

            XMin = 0;
            XMax = 0;
            YMin = 0;
            YMax = 0;


            PastGridXMin = int.MaxValue;
            PastGridXMax = int.MaxValue;
            PastGridYMin = int.MaxValue;
            PastGridYMax = int.MaxValue;

            if (Shape != ColliderType.None)
            {
                BuildPoints();
                BuildBounds();
            }

            ID = PhysicsManager.Assimilate(this);
            Partition.PartitionObject(this);
            if (PositionalTransform != null)
            {
                CanSetVisualPosition         = true;
                _visualPosition              = _position.ToVector3(HeightPos.ToFloat());
                lastVisualPos                = _visualPosition;
                PositionalTransform.position = _visualPosition;
            }
            else
            {
                CanSetVisualPosition = false;
            }
            if (RotationalTransform != null)
            {
                CanSetVisualRotation         = true;
                visualRot                    = Quaternion.LookRotation(Forward.ToVector3(0f));
                lastVisualRot                = visualRot;
                RotationalTransform.rotation = visualRot;
            }
            else
            {
                CanSetVisualRotation = false;
            }
        }
Beispiel #5
0
 public virtual void Initialize(Vector3d StartPosition, Vector2d StartRotation, bool isDynamic = true)
 {
     InitializeVariables(StartPosition, StartRotation, isDynamic);
     ID = PhysicsManager.Assimilate(this, isDynamic);
     Partition.PartitionObject(this);
 }
Beispiel #6
0
        public static void Simulate()
        {
            CollisionIterationRemain = (CollisionPairCount) / CollisionIterationSpread + 1;
            if (CollisionIterationCount == CollisionIterationSpread)
            {
                CollisionIterationCount = 0;
                CollisionIterationMark  = 0;
            }
            else
            {
                CollisionIterationMark += CollisionIterationRemain;
            }


            CurCount = 0;
            for (i = 0; i < FastCollisionPairs.Count; i++)
            {
                pair = FastCollisionPairs[i];
                CurCount++;
                if (CollisionIterationRemain == 0 || CurCount < CollisionIterationMark)
                {
                    pair.DistributeCollision();
                }
                else
                {
                    pair.CheckAndDistributeCollision();
                    CollisionIterationRemain--;
                }
            }


            if (CollisionIterationCount == 0)
            {
                for (i = 0; i < PeakCount; i++)
                {
                    if (SimObjectExists [i])
                    {
                        LSBody b1 = SimObjects [i];
                        b1.EarlySimulate();
                        if (b1.PositionChanged)
                        {
                            Partition.Body = b1;
                            Partition.PartitionObject();
                        }

                        b1.Simulate();
                    }
                }

                Partition.EstablishPartitions();
            }
            else
            {
                for (i = 0; i < PeakCount; i++)
                {
                    if (SimObjectExists [i])
                    {
                        LSBody b1 = SimObjects [i];
                        b1.EarlySimulate();
                        b1.Simulate();
                    }
                }
            }



            CollisionIterationCount++;
        }