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); } } }
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(); }); }
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; }
public override void OnNetworkDestroy() { TargetTuple.Reset(); MatchSession.Current.RegisterUnitDeath(this); Platoon.RemoveUnit(this); }
public void setTarget(Vector3 position) { var distance = Vector3.Distance(unit.transform.position, position); if (distance < data.FireRange) { target = new TargetTuple(position); } }
private bool TryFireWeapon(TargetTuple target) { reloadTimeLeft -= Time.deltaTime; if (reloadTimeLeft > 0) { return(false); } reloadTimeLeft = data.ReloadTime; return(FireWeapon(target)); }
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); }
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(); }
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); }
/// <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); }
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; }
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); }