Exemplo n.º 1
0
        public PrimitiveObject BuildStandartObject(string name, Locator loc, Vector size, CollisionShape shape, Viewer viewer)
        {
            PrimitiveObject obj = new PrimitiveObject(name);

            obj.Viewer = viewer;

            obj.LocalCenter = loc.Center;
            obj.LocalAngle  = loc.Angle;
            obj.LocalZIndex = loc.ZIndex;

            obj.CollisionShape = shape;
            obj.Size = size;

            map.AddObject(obj);
            
            obj.LocationChanged += map.UpdateObject;
            obj.LocationChanged += GameProcess.Current_Game.Manager.RegisterObject;

            obj.Crashed += map.RemoveObject;
            obj.Crashed += GameProcess.Current_Game.Camera.TryRemoveIndicator;
            obj.Crashed += GameProcess.Current_Game.Manager.UnRegisterObject;

            obj.LifeChanged += GameProcess.Current_Game.Camera.IndicateLifeChange;

            return obj;
        }    
Exemplo n.º 2
0
        /// <summary>
        /// Method that return list of primitive objects that may be collision to current primitive object
        /// It is broad phase of collision
        /// </summary>
        /// <param name="current_obj"></param>
        /// <returns></returns>
        public List<PrimitiveObject> MaybeCollisionPrimitives(PrimitiveObject pObj)
        {
            List<GridCorner> cCorners = targetMap.GetCornersByArea(pObj.AbsoluteCenter, pObj.Size, pObj.AbsoluteAngle);

            List<PrimitiveObject> maybeCollisionPrimitives = new List<PrimitiveObject>();

            foreach (GridCorner col_corner in cCorners)
                foreach (PrimitiveObject sObj in col_corner.ObjectsInCorner)
                {
                    if (sObj.CollisionShape != CollisionShape.None) maybeCollisionPrimitives.Add(sObj);
                }

            return maybeCollisionPrimitives.Distinct().ToList();
        }
Exemplo n.º 3
0
        /// <summary>
        /// Transparent object is an object without collision shape.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="loc"></param>
        /// <param name="viewer"></param>
        public virtual PrimitiveObject BuildLandscapeTile(Locator loc, Viewer viewer)
        {
            PrimitiveObject obj = new PrimitiveObject();

            obj.LocalCenter = loc.Center;
            obj.LocalAngle  = loc.Angle;
            obj.LocalZIndex = loc.ZIndex;

            obj.Viewer = viewer;
            obj.CollisionShape = CollisionShape.None;

            obj.Size = new Vector(map.TileSize / 2, map.TileSize / 2);

            this.map.AddObject(obj);

            return obj;
        }
Exemplo n.º 4
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="primitive"></param>
        /// <returns></returns>
        private TransformGroup GetTransformation(PrimitiveObject primitive, Vector focus, Vector viewSize)
        {
            TransformGroup transformGroup = new TransformGroup();

            if (primitive.AbsoluteAngle != 0)
            {
                RotateTransform rot = new RotateTransform(primitive.AbsoluteAngle, primitive.Size.X, primitive.Size.Y);
                transformGroup.Children.Add(rot);
            }

            TranslateTransform translate = new TranslateTransform();

            Vector position = CalculatePositionOnCanvas(primitive.AbsoluteCenter, viewSize, focus);

            translate.X = position.X - primitive.Size.X;
            translate.Y = position.Y - primitive.Size.Y;

            transformGroup.Children.Add(translate);

            return transformGroup;
        }
Exemplo n.º 5
0
        public static MTV GetObjectsMTV(PrimitiveObject objFirst, PrimitiveObject objSecond)
        {
            MTV MinTranslate = null;

            if (objFirst.CollisionShape == CollisionShape.Point)
            {
                if (objSecond.CollisionShape == CollisionShape.Rectangle)
                {
                    MinTranslate = CollisionPointRectangle(objFirst.AbsoluteCenter,
                        objSecond.AbsoluteCenter, objSecond.Size, objSecond.AbsoluteAngle);

                    return MinTranslate;
                }                
                if (objSecond.CollisionShape == CollisionShape.Circle)
                {
                    MinTranslate = CollisionPointCircle(objFirst.AbsoluteCenter, 
                        objSecond.AbsoluteCenter, objSecond.Size.X);
           
                    return MinTranslate;
                }
                if (objSecond.CollisionShape == CollisionShape.Point)
                {
                    return MinTranslate; 
                }
            }

            if (objFirst.CollisionShape == CollisionShape.Rectangle)
            {
                if (objSecond.CollisionShape == CollisionShape.Rectangle)
                {
                    MinTranslate = CollisionRectangleRectangle(objFirst.AbsoluteCenter, objFirst.Size, 
                        objFirst.AbsoluteAngle, objSecond.AbsoluteCenter, objSecond.Size, objSecond.AbsoluteAngle);
               
                    return MinTranslate;
                }
                if (objSecond.CollisionShape == CollisionShape.Point)
                {
                    MinTranslate = CollisionPointRectangle(objSecond.AbsoluteCenter, 
                        objFirst.AbsoluteCenter, objFirst.Size, objFirst.AbsoluteAngle);

                    if (MinTranslate != null)
                        MinTranslate.Direction *= -1;

                    return MinTranslate;
                }
                if (objSecond.CollisionShape == CollisionShape.Circle)
                {
                    MinTranslate = CollisionCircleRectangle(objSecond.AbsoluteCenter, objSecond.Size.X, 
                        objFirst.AbsoluteCenter, objFirst.Size, objFirst.AbsoluteAngle);

                    if(MinTranslate != null)
                        MinTranslate.Direction *= -1;

                    return MinTranslate;

                    ///Нужно подкорректиировать коллизии от круга
                }
            }

            if (objFirst.CollisionShape == CollisionShape.Circle)
            {
                if (objSecond.CollisionShape == CollisionShape.Rectangle)
                {
                    MinTranslate = CollisionCircleRectangle(objFirst.AbsoluteCenter, objFirst.Size.X,
                        objSecond.AbsoluteCenter, objSecond.Size, objSecond.AbsoluteAngle);

                    return MinTranslate;
                }

                if (objSecond.CollisionShape == CollisionShape.Circle)
                {
                    MinTranslate = CollisionCircleCircle(objFirst.AbsoluteCenter, objFirst.Size.X, objSecond.AbsoluteCenter, objSecond.Size.X);
    
                    return MinTranslate;
                }
                if (objSecond.CollisionShape == CollisionShape.Point)
                {
                    MinTranslate = CollisionPointCircle(objSecond.AbsoluteCenter,
                        objFirst.AbsoluteCenter, objFirst.Size.X);

                    if (MinTranslate != null)
                        MinTranslate.Direction *= -1;

                    return MinTranslate;
                }
            }

            return MinTranslate;
        }