示例#1
0
        protected override void Handle(SpawnBullet message)
        {
            string polygonPath = message.BulletType switch
            {
                BulletType.Laser => "polygons/long_bullet",
                _ => "polygons/bullet"
            };

            PolygonRenderer renderer = _polygonLoader.Load(polygonPath);

            _world
            .CreateEntity()
            .Attach(new Transform
            {
                Position = message.Position,
                Rotation = message.Rotation
            })
            .Attach(new Rigidbody
            {
                Velocity = new Vector2(0, -Velocity).Rotate(message.Rotation)
            })
            .Attach(new SpriteRenderer
            {
                Texture = message.BulletType switch
                {
                    BulletType.Laser => _laserTexture,
                    _ => _bulletTexture
                }
            })
示例#2
0
        public void Start()
        {
            Score = 0;
            World.Entities.With <LabelComponent>().ForEach(World.Destroy);

            PolygonRenderer polygon = _polygonLoader.Load("polygons/ship");

            _timeToGiveLaser = LaserRechargeTime;

            World
            .CreateEntity()
            .Attach(new Transform
            {
                Position = new Vector2(World.Width / 2f, World.Height / 2f)
            })
            .Attach(new Rigidbody())
            .Attach(new SpriteRenderer())
            .Attach(polygon)
            .Attach(new Collider(new Polygon2(polygon.Vertices)))
            .Attach(new Player());

            World
            .CreateEntity()
            .Attach(new Transform
            {
                Position = new Vector2(10f)
            })
            .Attach(new LabelComponent())
            .Attach(new ScoreComponent());

            _gameStarted = true;
        }
示例#3
0
        private void SpawnAsteroid(int size, Vector2 position)
        {
            float  directionAngle   = (float)(_world.Random.NextDouble() - 0.5d) * 4 * MathF.PI;
            float  startingVelocity = MaxVelocity / size;
            string name             = $"planetoids/planetoid_{MaxSize - size + 1}";

            PolygonRenderer polygon = _polygonLoader.Load($"polygons/{name}");

            _world
            .CreateEntity()
            .Attach(new Transform
            {
                Position = position
            })
            .Attach(new Rigidbody
            {
                Velocity        = new Vector2(startingVelocity, 0).Rotate(directionAngle),
                AngularVelocity = MathF.PI,
                MaxVelocity     = new Vector2(200f)
            })
            .Attach(new SpriteRenderer
            {
                Texture = _content.Load <Texture2D>(name)
            })
            .Attach(polygon)
            .Attach(new Collider(new Polygon2(polygon.Vertices)))
            .Attach(new Asteroid
            {
                Size = size
            });
        }
示例#4
0
 public Robot(RobotRenderer r, Color color, Color colorBloated, int id)
 {
     renderer               = r;
     pathRenderer           = new PathFromRobotRenderer(r, color, .1f);
     lidarRendererRear      = new LidarRenderer("rear", 0, id, new SensorPose(-.36, 0, 0, Math.PI, 0, 0, 0));
     lidarRendererFront     = new LidarRenderer("front", 1, id, new SensorPose(0, 0, .20, 0, 0, 0, 0));
     polyRenderer           = new PolygonRenderer(color);
     bloatedPolygonRenderer = new PolygonRenderer(colorBloated);
 }
示例#5
0
    public void CalculateResult()
    {
        // Figure
        GameObject figureGO = GameObject.FindGameObjectWithTag(Tags.Figure);
        Figure     figure   = figureGO.GetComponent <Figure>();

        List <Vector3>  figureSidePolygon = figure.GetVisibleSidePoligon();
        List <IntPoint> figureIntPoints   = ConvertVectors3ToIntPoints(figureSidePolygon);

        // Line
        GameObject     drawControllerGO = GameObject.FindGameObjectWithTag(Tags.DrawController);
        DrawController drawController   = drawControllerGO.GetComponent <DrawController>();
        LineRenderer   line             = drawController.Line;

        Vector3[] lineVectorsArray = new Vector3[line.positionCount];
        line.GetPositions(lineVectorsArray);
        List <IntPoint> lineIntPoints = ConvertVectors3ToIntPoints(lineVectorsArray);

        Clipper c = new Clipper();

        c.AddPaths(new List <List <IntPoint> >()
        {
            figureIntPoints
        }, PolyType.ptSubject, true);
        c.AddPaths(new List <List <IntPoint> >()
        {
            lineIntPoints
        }, PolyType.ptClip, true);

        var resultPolygons = new List <List <IntPoint> >();

        bool succeeded = c.Execute(ClipType.ctIntersection, resultPolygons);

        Debug.Log("successed: " + succeeded);

        if (succeeded)
        {
            foreach (var polygon in resultPolygons)
            {
                GameObject      go          = new GameObject();
                PolygonRenderer polRenderer = go.AddComponent <PolygonRenderer>();
                List <Vector3>  points      = ConvertIntPointsToVectors3(polygon);
                points.Reverse();
                polRenderer.Points = points;
                polRenderer.Mat    = Resources.Load <Material>("Polygon");
            }
        }
    }
示例#6
0
        private void SpawnUfo(Vector2 position)
        {
            PolygonRenderer polygon = _polygonLoader.Load($"polygons/ufo");

            _world
            .CreateEntity()
            .Attach(new Transform
            {
                Position = position
            })
            .Attach(new Rigidbody())
            .Attach(polygon)
            .Attach(new Collider(new Polygon2(polygon.Vertices)))
            .Attach(new SpriteRenderer())
            .Attach(new Ufo())
            .Attach(_jsonLoader.Load <Animation>("animations/ufo"));
        }
示例#7
0
        public override void OnCreate()
        {
            base.OnCreate();

            Entity entity = this;

            Camera camera = entity.AddComponent <Camera>().AddLayersUnder(ViewLayers.FOREGROUND).RemoveLayer(ViewLayers.BACKGROUND).RemoveLayer(ViewLayers.DAEMON_OBJECTS);

            entity.camera.enableLighting = true;

            entity.AddComponent <AudioListener>();

            _fake3d        = entity.AddComponent <Fake3DProjector>();
            _fake3d.camera = camera;

            _handler             = entity.AddComponent <CameraHandler>();
            _handler.followSpeed = 20;

            _fake3dOverlay = entity.AddComponent <PolygonRenderer>();
            _fake3dOverlay.SetMaterial(new Material(_fake3d.renderTexture.Texture, BlendMode.Multiply)).SetLayer(ViewLayers.FOREGROUND);
            //_fake3dSprite.CenterOrigin();

            world.mainCamera = entity.camera;
        }
示例#8
0
 void OnEnable()
 {
     renderer = (PolygonRenderer)target;
 }