Example #1
0
        public void Update()
        {
            if (unit.Platoon.Type == Ingame.Prototype.UnitType.Tank)
            {
                if (target == null || !target.exists())
                {
                    target = new TargetTuple(FindClosestEnemy());
                }

                if (RotateTurret(target))
                {
                    TryFireWeapon(target);
                }
            }


            if (unit.Platoon.Type == Ingame.Prototype.UnitType.Arty)
            {
                if (target != null)
                {
                    RotateTurret(target);
                    TryFireWeapon(target);
                }
            }
        }
Example #2
0
        public void Cycle()
        {
            var platformProvider = new PlatformsProvider();

            var platformFactory = platformProvider.Platforms.FirstOrDefault(
                x => x.PlatformType == MockPlatformFactory.MockPlatform &&
                x.ToolchainType == MockPlatformFactory.MockToolchain &&
                x.ArchitectureType == ArchitectureType.X64);

            var profile = Profile.Parse("{}");

            var platform = platformFactory.CreatePlatform(profile);

            var toolchain = platformFactory.CreateToolchain(profile);

            var targetTuple = new TargetTuple(
                platformFactory.PlatformType,
                platformFactory.ArchitectureType,
                platformFactory.ToolchainType,
                ConfigurationType.Debug,
                ConfigurationFlavour.None);

            var solution = new SampleSolution();

            var resolved = new ResolvedSolution(solution, targetTuple);

            Assert.ThrowsException <ResolvingException>(() =>
            {
                resolved.Configure();

                resolved.Resolve();
            });
        }
Example #3
0
        public void Initialize(PlatoonBehaviour platoon)
        {
            TargetTuple = new TargetTuple(this);
            Platoon     = platoon;

            _unitData = gameObject.GetComponent <DataComponent>();

            _voiceComponent = gameObject.transform.Find("VoiceComponent")
                              .GetComponent <VoiceComponent>();
            _movementComponent = gameObject.GetComponent <MovementComponent>();
            _healthComponent   = gameObject.GetComponent <HealthComponent>();
            _armorComponent    = gameObject.GetComponent <ArmorComponent>();
            VisionComponent    = gameObject.GetComponent <VisionComponent>();
            _turretSystem      = gameObject.GetComponent <TurretSystem>();

            // Only used in this class, not really configurable,
            // and no way to get a reference to it here if it's
            // instantiated in the UnitFitter.
            // I think it's fine to leave it here.
            _selectionCircle = Instantiate(
                Resources.Load <GameObject>("SelectionCircle"), Transform);

            _movementComponent.Initialize();
            _healthComponent.Initialize(this, _unitData);
            VisionComponent.Initialize(this, _unitData);
            _armorComponent.Initialize(_healthComponent, _unitData, _movementComponent);

            _targetingOverlay = OverlayFactory.Instance.CreateTargetingOverlay(this);
            _targetingOverlay.gameObject.transform.parent = gameObject.transform;
        }
Example #4
0
        public override void OnNetworkDestroy()
        {
            TargetTuple.Reset();

            MatchSession.Current.RegisterUnitDeath(this);

            Platoon.RemoveUnit(this);
        }
Example #5
0
        public void setTarget(Vector3 position)
        {
            var distance = Vector3.Distance(unit.transform.position, position);

            if (distance < data.FireRange)
            {
                target = new TargetTuple(position);
            }
        }
Example #6
0
        private bool TryFireWeapon(TargetTuple target)
        {
            reloadTimeLeft -= Time.deltaTime;
            if (reloadTimeLeft > 0)
            {
                return(false);
            }

            reloadTimeLeft = data.ReloadTime;
            return(FireWeapon(target));
        }
Example #7
0
        public override void OnNetworkDestroy()
        {
            // Model lingers as a wreck for 30s
            if (_deathEffect != null)
            {
                _deathEffect.Activate(_art);
            }

            TargetTuple.Reset();

            MatchSession.Current.RegisterUnitDeath(this);

            Platoon.RemoveUnit(this);
        }
Example #8
0
        public void SolutionResolving()
        {
            var solution    = new SampleSolution();
            var targetTuple = new TargetTuple(
                PlatformType.Windows,
                ArchitectureType.X64,
                ToolchainType.MSVC,
                ConfigurationType.Debug,
                ConfigurationFlavour.None);

            var resolved = new ResolvedSolution(solution, targetTuple);

            resolved.Resolve();
        }
Example #9
0
        private bool FireWeapon(TargetTuple target)
        {
            if (unit.Platoon.Type == Ingame.Prototype.UnitType.Tank)
            {
                // sound
                Source.PlayOneShot(shotSound, shotVolume);
                // particle
                shotEffect.Play();

                if (target.enemy != null)
                {
                    System.Random rnd  = new System.Random();
                    int           roll = rnd.Next(1, 100);

                    // HIT
                    if (roll < data.Accuracy)
                    {
                        target.enemy.GetComponent <UnitBehaviour>()
                        .HandleHit(data.Damage);
                        return(true);
                    }
                }
                else
                {
                    // ensure we only fire pos once
                    this.target = null;
                }

                // MISS
                return(false);
            }

            if (unit.Platoon.Type == Ingame.Prototype.UnitType.Arty)
            {
                //  Vector3 start = new Vector3(ShotStarterPosition.position.x, ShotStarterPosition.position.y+0., ShotStarterPosition.position.z);


                GameObject shell     = Resources.Load <GameObject>("shell");
                GameObject shell_new = Instantiate(shell, ShotStarterPosition.position, ShotStarterPosition.transform.rotation);
                shell_new.GetComponent <BulletBehavior>().SetUp(ShotStarterPosition, target.position, 60);

                //Debug.Break();


                return(true);
            }

            return(false);
        }
Example #10
0
        /// <summary>
        /// Creates new instance of ResolvedSolution for given solution and target tuple.
        /// </summary>
        /// <param name="solution">A solution to resolve.</param>
        public ResolvedSolution(
            Solution solution,
            TargetTuple targetTuple)
        {
            this.Solution    = solution ?? throw new ArgumentNullException(nameof(solution));
            this.TargetTuple = targetTuple;


            //
            // Create targets
            //

            foreach (var project in this.Solution.Projects)
            {
                var target   = new Target(project, this.TargetTuple);
                var resolved = new ResolvedTarget(this, target);
                this.m_Targets.Add(resolved);
            }
        }
        public void TestIncludePaths()
        {
            var solution = new SampleSolution(
                TargetType.SharedLibrary,
                DependencyType.Public,
                TargetType.SharedLibrary,
                DependencyType.Public);

            var targetTuple = new TargetTuple(
                PlatformType.Windows,
                ArchitectureType.X64,
                ToolchainType.MSVC,
                ConfigurationType.Debug,
                ConfigurationFlavour.None);

            var resolved = new ResolvedSolution(solution, targetTuple);

            resolved.Resolve();

            //Dump.DumpResolvedSolution.SaveToFile("d:/output.json", resolved);
        }
Example #12
0
        public void Initialize(
            PlatoonBehaviour platoon,
            GameObject art,
            GameObject deathEffect,
            VoiceComponent voice)
        {
            _unitData = gameObject.GetComponent <DataComponent>();

            TargetType type = _unitData.ApImmunity ? TargetType.INFANTRY : TargetType.VEHICLE;

            TargetTuple = new TargetTuple(this, type);
            Platoon     = platoon;

            _art         = art;
            _deathEffect = deathEffect?.GetComponent <WreckComponent>();

            _voiceComponent    = voice;
            _movementComponent = gameObject.GetComponent <MovementComponent>();
            _healthComponent   = gameObject.GetComponent <HealthComponent>();
            _armorComponent    = gameObject.GetComponent <ArmorComponent>();
            VisionComponent    = gameObject.GetComponent <VisionComponent>();
            _turretSystem      = gameObject.GetComponent <TurretSystem>();

            // Only used in this class, not really configurable,
            // and no way to get a reference to it here if it's
            // instantiated in the UnitFitter.
            // I think it's fine to leave it here.
            _selectionCircle = Instantiate(
                Resources.Load <GameObject>("SelectionCircle"), Transform);

            _movementComponent.Initialize();

            _healthComponent.Initialize(this, _unitData);
            VisionComponent.Initialize(this, _unitData);
            _armorComponent.Initialize(_healthComponent, _unitData, _movementComponent);

            _targetingOverlay = OverlayFactory.Instance.CreateTargetingOverlay(this);
            _targetingOverlay.gameObject.transform.parent = gameObject.transform;
        }
Example #13
0
        private bool RotateTurret(TargetTuple target)
        {
            bool  aimed             = false;
            float targetTurretAngle = 0f;
            float targetBarrelAngle = 0f;

            Vector3 pos = target.enemy == null ? target.position : target.enemy.transform.position;

            if (pos != Vector3.zero)
            {
                aimed = true;
                // shotEmitter.LookAt(pos);
                //shot emmiter was comented out because arty has no shot emmiter

                Vector3    directionToTarget = pos - turret.position;
                Quaternion rotationToTarget  = Quaternion.LookRotation(mount.transform.InverseTransformDirection(directionToTarget));

                targetTurretAngle = rotationToTarget.eulerAngles.y.unwrapDegree();
                if (Mathf.Abs(targetTurretAngle) > data.ArcHorizontal)
                {
                    targetTurretAngle = 0f;
                    aimed             = false;
                }

                targetBarrelAngle = rotationToTarget.eulerAngles.x.unwrapDegree();
                if (targetBarrelAngle < -data.ArcUp || targetBarrelAngle > data.ArcDown)
                {
                    targetBarrelAngle = 0f;
                    aimed             = false;
                }
            }

            float turretAngle = turret.localEulerAngles.y;
            float barrelAngle = barrel.localEulerAngles.x;
            float turn        = Time.deltaTime * data.RotationRate;
            float deltaAngle;

            deltaAngle = (targetTurretAngle - turretAngle).unwrapDegree();
            if (Mathf.Abs(deltaAngle) > turn)
            {
                turretAngle += (deltaAngle > 0 ? 1 : -1) * turn;
                aimed        = false;
            }
            else
            {
                turretAngle = targetTurretAngle;
            }

            #region ArtyAdditionalCode
            if (unit.Platoon.Type == Ingame.Prototype.UnitType.Arty)
            {
                targetBarrelAngle = -data.ArcUp;
            }
            #endregion

            deltaAngle = (targetBarrelAngle - barrelAngle).unwrapDegree();
            if (Mathf.Abs(deltaAngle) > turn)
            {
                barrelAngle += (deltaAngle > 0 ? 1 : -1) * turn;
                aimed        = false;
            }
            else
            {
                barrelAngle = targetBarrelAngle;
            }

            turret.localEulerAngles = new Vector3(0, turretAngle, 0);
            barrel.localEulerAngles = new Vector3(barrelAngle, 0, 0);

            return(aimed);
        }