public override void Update(float delta)
        {
            if (_isReloading)
            {
                _reloadingTime += delta;
                if (_reloadingTime >= _cooldown)
                {
                    _isReloading = false;
                }
                return;
            }
            if (_inputController.MouseUpdate && _inputController.MouseButtons[0])
            {
                Vector3 rotation = GameObject.Rotation;
                rotation.Y = GameObject.Children[1].Rotation.Y;
                Matrix       rotationMatrix = Matrix.RotationYawPitchRoll(rotation.Z, rotation.Y, rotation.X);
                Vector3      direction      = (Vector3)Vector3.Transform(Vector3.UnitZ, rotationMatrix);
                Game3DObject bullet         = _bulletPrototype.GetCopy();
                bullet.MoveTo(GameObject.Position + direction);
                bullet.AddScript(new BulletScript(direction, 1, 1));
                GameObject.Scene.AddGameObject(bullet);
                OnCakeShoot?.Invoke();

                _reloadingTime = 0;
                _isReloading   = true;
            }
        }
Пример #2
0
 public PlatformsMovementScript(Game3DObject player, float speedY, float maxY, float minY)
 {
     _speedY = speedY;
     _maxY   = maxY;
     _minY   = minY;
     _player = player;
 }
Пример #3
0
        public override void Update(float delta)
        {
            if (_isCreating)
            {
                _lastCreatingTime += delta;
                if (_lastCreatingTime >= _cooldown)
                {
                    _isCreating = false;
                }
                return;
            }
            var position  = new Vector3(GameObject.Position.X, GameObject.Position.Y - 0.27f, GameObject.Position.Z);
            var direction = _target.Position - position;

            direction.Normalize();
            Game3DObject copyBullet = _bullet.GetCopy();

            copyBullet.MoveTo(position);
            //copyBullet.MoveTo(GameObject.Position);
            if ((GameObject.Position - _target.Position).Length() <= 1.5f)
            {
                copyBullet.AddScript(new BulletScript(direction));
                GameObject.Scene.AddGameObject(copyBullet);
                OnEggShoot?.Invoke();
            }


            _lastCreatingTime = 0;
            _isCreating       = true;
        }
Пример #4
0
 /// <summary>
 /// Конструктор класса
 /// </summary>
 /// <param name="spawn">Объект, относительно которого появляется стрела</param>
 /// <param name="speed">Базовая скорость полёта стрелы</param>
 /// <param name="lifeTime">Время существования стрелы</param>
 public Arrow(Game3DObject spawn, float speed, float lifeTime)
 {
     _spawnObject = spawn;
     _speed       = speed;
     _lifeTime    = lifeTime;
     _time        = 0.0f;
 }
Пример #5
0
 public PlatformsSpawnerScript(Game3DObject platform, float cooldown = 0.51f)
 {
     _cooldown         = cooldown;
     _lastCreatingTime = 0;
     _isCreating       = false;
     _platform         = platform;
     random            = new Random();
 }
Пример #6
0
 /// <summary>
 /// Конструктор класса
 /// </summary>
 /// <param name="target">Цель врага</param>
 /// <param name="detectRadius">Радиус обнаружения</param>
 /// <param name="damage">Урон врага</param>
 public Enemy(SharpAudioVoice voice1, SharpAudioVoice voice2, Game3DObject target, float detectRadius, int damage)
 {
     _voice1       = voice1;
     _voice2       = voice2;
     _target       = target;
     _detectRadius = detectRadius;
     _damage       = damage;
 }
Пример #7
0
 public BulletSpawnerScript(Game3DObject target, Game3DObject bullet, float cooldown = 2f)
 {
     _cooldown         = cooldown;
     _lastCreatingTime = 0;
     _isCreating       = false;
     _bullet           = bullet;
     _target           = target;
 }
 public PlayerGunScript(Game3DObject bullet, float cooldown = 0.2f)
 {
     _inputController = InputController.GetInstance();
     _bulletPrototype = bullet;
     _cooldown        = cooldown;
     _reloadingTime   = 0;
     _isReloading     = false;
 }
Пример #9
0
 /// <summary>
 /// От так
 /// </summary>
 /// <param name="player">Игрок</param>
 private void Attack(Game3DObject player)
 {
     _voice1.Stop();
     _voice2.Stop();
     _voice2.Play();
     _reloadComponent.StartReload();
     player.GetComponent <PlayerComponent>().RemoveHealth(_damage);
     new Animation(new float[] { 0f, -0.02f, 0.035f }, 0.5f).AddProcess((value) => {
         var position = GameObject.Children[1].LocalPosition;
         GameObject.Children[1].MoveBy(0, 0, value);
     });
 }
 private void GetChildrenMeshes(ref Game3DObject parent, Node node)
 {
     if (node.HasChildren)
     {
         var objects = new List <Game3DObject>();
         foreach (var child in node.Children)
         {
             node.Transform.Decompose(out Vector3D _, out Assimp.Quaternion rotation, out Vector3D position);
             var newChildObject = new Game3DObject(new Vector3(position.X, position.Y, position.Z), ToEulerAngles(rotation));
             newChildObject.AddMeshObject(meshList.Find(x => x.Name == child.Name));
             objects.Add(newChildObject);
             GetChildrenMeshes(ref newChildObject, child);
         }
         parent.Children.AddRange(objects);
     }
 }
Пример #11
0
        private void CreatePlatforms(Loader loader, int index, Vector3 position)
        {
            var file     = @"Resources\Models\platform" + index.ToString() + ".fbx";
            var obstacle = loader.LoadGameObjectFromFile(file, position, Vector3.Zero);

            obstacle.Tag       = "obstacle";
            obstacle.Collision = new BoxCollision(2.2f, 0.8f * index);
            obstacle.AddComponent(new ColliderComponent());
            obstacle.AddScript(new ColliderScript());
            var platform = new Game3DObject(new Vector3(0.0f, 1.5f * index, 0.0f), Vector3.Zero);

            platform.Tag       = "ground";
            platform.Collision = new BoxCollision(1.8f, 0.8f);
            platform.AddComponent(new ColliderComponent());
            platform.AddScript(new ColliderScript());
            obstacle.AddChild(platform);
            AddGameObject(obstacle);
        }
        protected override void InitializeObjects(Loader loader, SharpAudioDevice audioDevice)
        {
            string file = @"Models\T_Rex.fbx";

            _go = loader.LoadGameObjectFromFile(file, Vector3.Zero, new Vector3(0, MathUtil.PiOverTwo, 0));
            Game3DObject g1 = loader.LoadGameObjectFromFile(file, new Vector3(1, 1, 0), Vector3.Zero);
            Game3DObject g2 = loader.LoadGameObjectFromFile(file, new Vector3(-1, 1, 0), Vector3.Zero);
            Game3DObject g3 = loader.LoadGameObjectFromFile(file, Vector3.UnitZ * 2, Vector3.Zero);

            _go.AddChild(g1);
            _go.AddChild(g2);
            _go.AddChild(g3);
            _go.AddScript(new DinoMovementScript());
            AddGameObject(_go);
            AddGameObject(loader.LoadGameObjectFromFile(@"Models\dsa.fbx", Vector3.UnitX * 5, Vector3.Zero));

            _voice  = new SharpAudioVoice(audioDevice, @"Sounds\again.wav");
            _voice2 = new SharpAudioVoice(audioDevice, @"Sounds\again.wav");
        }
Пример #13
0
        protected override void InitializeObjects(Loader loader, SharpAudioDevice audioDevice)
        {
            //_camera = new OrthoCamera(new Vector3(0, 20, -20), rotY: MathUtil.Pi / 4f, fovY: 0.1f);
            _camera = new Camera(new Vector3(0, 60, -60), rotY: MathUtil.Pi / 4f);

            _player = CreatePlayer(loader);
            var z1 = CreateZombie(loader);

            //var z2 = CreateZombie(loader);
            //var z3 = CreateZombie(loader);

            z1.MoveTo(Vector3.UnitX * 40);
            //z2.MoveTo(Vector3.UnitX * -40);
            //z3.MoveTo(Vector3.UnitZ * -40);


            AddGameObject(_player);
            //AddGameObject(loader.LoadGameObjectFromFile(@"Models\FirstAidKit.fbx", Vector3.Zero, Vector3.Zero, @"Textures\ammo.tif"));
            AddGameObject(z1);
            //AddGameObject(z2);
            //AddGameObject(z3);

            var ammo = loader.LoadGameObjectFromFile(@"Models\BonusAmmo.fbx", Vector3.UnitX * 20, Vector3.Zero);

            ammo.Collision = new SphereCollision(2);
            ammo.AddScript(new AmmoBonusScript(_player));

            var health = loader.LoadGameObjectFromFile(@"Models\BonusHeart.fbx", Vector3.UnitZ * 20, Vector3.Zero);

            health.Collision = new SphereCollision(2);
            health.AddScript(new HealthBonusScript(_player));

            var invisibility = loader.LoadGameObjectFromFile(@"Models\BonusStels.fbx", Vector3.UnitX * -20, Vector3.Zero);

            invisibility.Collision = new SphereCollision(2);
            invisibility.AddScript(new InvisibilityBonusScript(_player));

            AddGameObject(ammo);
            AddGameObject(health);
            AddGameObject(invisibility);
        }
        public Game3DObject LoadGameObjectFromFile(string path, Vector3 startPosition, Vector3 startRotation, string texture = null)
        {
            var importer = new AssimpContext();

            importer.SetConfig(new NormalSmoothingAngleConfig(66.0f));
            var          fileScene  = importer.ImportFile(path, PostProcessSteps.Triangulate);
            var          indices    = new List <uint>();
            var          vertices   = new List <Renderer.VertexDataStruct>();
            var          root       = fileScene.RootNode;
            Game3DObject gameObject = null;

            meshList  = new List <MeshObject>();
            materials = new List <Graphics.Material>();
            textures  = new List <Texture>();

            ExtractTextures(fileScene);
            ExtractMaterials(fileScene, texture);
            ExtractMeshes(fileScene, indices, vertices);

            gameObject = new Game3DObject(startPosition, startRotation);
            if (root.HasChildren)
            {
                foreach (var child in root.Children)
                {
                    if (child.HasMeshes)
                    {
                        child.Transform.Decompose(out Vector3D _, out Assimp.Quaternion rotation, out Vector3D position);
                        var childObject = gameObject.AddChild(new Game3DObject(new Vector3(position.X, position.Y, position.Z), ToEulerAngles(rotation)));
                        childObject.AddMeshObject(meshList[child.MeshIndices[0]]);
                        GetChildrenMeshes(ref childObject, child);
                    }
                }
            }
            else
            {
                gameObject.AddMeshObject(meshList[root.MeshIndices[0]]);
            }

            return(gameObject);
        }
Пример #15
0
        /// <summary>
        /// Проверка столкновения коллайдера с другими объектами с тегам
        /// </summary>
        /// <param name="gameObject">Пересекаемый объект или NULL</param>
        /// <param name="tag">Тэг объкта, с которым проверяется пересечение</param>
        /// <returns>Результат пересечения</returns>
        public bool CheckIntersects(out Game3DObject gameObject, string tag = "")
        {
            foreach (var collision in _collisions)
            {
                if (tag == "" || collision.GameObject.Tag != tag)
                {
                    continue;
                }

                if (collision != GameObject.Collision)
                {
                    var result = ObjectCollision.Intersects(GameObject.Collision, collision);
                    if (result)
                    {
                        gameObject = collision.GameObject;
                        return(result);
                    }
                }
            }

            gameObject = null;
            return(false);
        }
Пример #16
0
        /// <summary>
        /// Обновление поведения
        /// </summary>
        /// <param name="delta">Время между кадрами</param>
        public override void Update(float delta)
        {
            if (_physicsComponent == null)
            {
                return;
            }

            if (_physicsComponent.IsGrounded)
            {
                if (!ObjectCollision.Intersects(GameObject.Collision, _ground.Collision))
                {
                    _ground = null;
                }
            }
            else
            {
                if (_colliderComponent.CheckIntersects(out Game3DObject ground, "ground"))
                {
                    _ground = ground;
                }
            }

            _physicsComponent.UpdateGrounded(_ground);
        }
 public BulletFlyScript(float flySpeed, Game3DObject target, int damage)
 {
     this._flySpeed = flySpeed;
     this._target   = target;
     this._damage   = damage;
 }
 public FinishPlatformScript(Game3DObject player)
 {
     _player = player;
 }
Пример #19
0
 /// <summary>
 /// Обработка попадания стрелы во врага
 /// </summary>
 /// <param name="enemy">Объект врага</param>
 protected override void HandleHitEnemy(Game3DObject enemy)
 {
     enemy.GetComponent <EnemyComponent>().MakeSlow(_slowTime);
     base.HandleHitEnemy(enemy);
 }
Пример #20
0
 /// <summary>
 /// Конструктор класса
 /// </summary>
 /// <param name="spawn">Объект, относительно которого появляется стрела</param>
 /// <param name="speed">Базовая скорость полёта стрелы</param>
 /// <param name="lifeTime">Время существования стрелы</param>
 /// <param name="slowTime">Время замедления врага</param>
 public PoisonArrow(Game3DObject spawn, float speed, float lifeTime, float slowTime)
     : base(spawn, speed, lifeTime)
 {
     _slowTime = slowTime;
 }
Пример #21
0
 /// <summary>
 /// Обработка попадания стрелы во врага
 /// </summary>
 /// <param name="enemy">Объект врага</param>
 protected virtual void HandleHitEnemy(Game3DObject enemy)
 {
     enemy.GetComponent <EnemyComponent>().RemoveHealth();
     GameObject.Scene.RemoveGameObject(GameObject);
     _colliderComponent.RemoveCollisionFromScene();
 }
Пример #22
0
 public CopyableGameObject(Game3DObject gameObject, List <Func <Script> > scripts, List <Func <ObjectComponent> > components)
 {
     GameObject = gameObject;
     Scripts    = scripts;
     Components = components;
 }
Пример #23
0
        private void CreatePlayerLoader(Loader loader)
        {
            // создание игрока
            _player = new Game3DObject(new Vector3(0.0f, 10.0f, -5.0f), Vector3.Zero);
            float deltaAngle = Camera.FOVY / Game.RenderForm.ClientSize.Height;

            _player.Tag       = "player";
            _player.Collision = new BoxCollision(1.0f, 1.7f);
            _player.AddComponent(new PhysicsComponent());
            _player.AddScript(new PhysicsScript());
            _player.AddComponent(new ColliderComponent());
            _player.AddScript(new ColliderScript());
            var playerComponent = new PlayerComponent();

            playerComponent.OnArrowsCountChanged += UpdateArrowsCountUI;
            playerComponent.OnHealthChanged      += (count) => _healthProgressBar.Value = count;
            playerComponent.AddArrows(ArrowType.Standart, 5);
            playerComponent.AddArrows(ArrowType.Poison, 2);
            _player.AddComponent(playerComponent);
            _player.AddScript(new PlayerMovement(deltaAngle, 4f, 0.5f, 2.0f));
            _player.AddChild(Camera);
            // доабвление игроку лука
            string file = @"Resources\Models\bow.fbx";
            var    bow  = loader.LoadGameObjectFromFile(file, new Vector3(-0.017f, 0.94f, 0.08f), Vector3.Zero);

            _player.AddChild(bow);
            //добавление точки появления стрел игроку
            var arrowParrent = new Game3DObject(new Vector3(-0.052f, 0.95f, 0.0f), Vector3.Zero);

            arrowParrent.AddComponent(new VisibleComponent());
            arrowParrent.AddScript(new VisibleScript());
            // скрипт стрельбы
            var bowShootScript = new BowShoot(2.0f, 1.0f);

            //создание копируемых стрел для игрока
            //обычная стрела
            file = @"Resources\Models\arrow.fbx";
            var arrow = loader.LoadGameObjectFromFile(file, Vector3.Zero, Vector3.Zero);

            arrow.Collision = new BoxCollision(0.3f, 0.2f, 0.3f);
            var arrowComponents = new List <Func <ObjectComponent> >
            {
                () => new ArrowComponent(),
                () => new PhysicsComponent(0.05f),
                () => new ColliderComponent()
            };
            var arrowScripts = new List <Func <Script> > {
                () => new Arrow(arrowParrent, 20.0f, 5.0f),
                () => new PhysicsScript(),
                () => new ColliderScript()
            };
            var arrowTemplate = new CopyableGameObject(arrow, arrowScripts, arrowComponents);

            bowShootScript.AddArrowTemplate(ArrowType.Standart, arrowTemplate);
            //стрела с ядом
            file            = @"Resources\Models\arrowPoison.fbx";
            arrow           = loader.LoadGameObjectFromFile(file, Vector3.Zero, Vector3.Zero);
            arrow.Collision = new BoxCollision(0.3f, 0.2f, 0.3f);
            arrowComponents = new List <Func <ObjectComponent> >
            {
                () => new ArrowComponent(),
                () => new PhysicsComponent(0.05f),
                () => new ColliderComponent()
            };
            arrowScripts = new List <Func <Script> > {
                () => new PoisonArrow(arrowParrent, 20.0f, 5.0f, 5.0f),
                () => new PhysicsScript(),
                () => new ColliderScript()
            };
            arrowTemplate = new CopyableGameObject(arrow, arrowScripts, arrowComponents);
            bowShootScript.AddArrowTemplate(ArrowType.Poison, arrowTemplate);
            arrowParrent.AddScript(bowShootScript);
            //добавление стрел к точке появления
            file  = @"Resources\Models\arrow.fbx";
            arrow = loader.LoadGameObjectFromFile(file, Vector3.Zero, Vector3.Zero);
            arrowParrent.AddChild(arrow);
            file           = @"Resources\Models\arrowPoison.fbx";
            arrow          = loader.LoadGameObjectFromFile(file, Vector3.Zero, Vector3.Zero);
            arrow.IsHidden = true;
            arrowParrent.AddChild(arrow);
            _player.AddChild(arrowParrent);

            AddGameObject(_player);
        }