public override void Update() { if (World.Ticks >= CreatedTicks + TicksToBuild) { Constructing = false; } if (!Constructing) { if (TargetEntity != null) { float distance = Vector2.Distance(new Vector2(Position.X, Position.Y), new Vector2(TargetEntity.Position.X, TargetEntity.Position.Y)); if (distance > Range || !TargetEntity.IsAlive) { TargetEntity = null; } } if (TargetEntity == null) { IEntity nearestEnemyHarvester = World.Entities.Where(e => e.Player != Player && e is Harvester) .OrderBy(e => Vector2.Distance(new Vector2(Position.X, Position.Y), new Vector2(e.Position.X, e.Position.Y))) .FirstOrDefault(); if (nearestEnemyHarvester != null) { float distance = Vector2.Distance(new Vector2(Position.X, Position.Y), new Vector2(nearestEnemyHarvester.Position.X, nearestEnemyHarvester.Position.Y)); if (distance < Range) { TargetEntity = nearestEnemyHarvester; } } } if (TargetEntity != null) { float targetRotation = VectorHelpers.GetRotationToFace(PositionVector, TargetEntity.PositionVector) ?? Rotation; float rotationDiff = targetRotation - Rotation; float rotationPerFrame = RotationSpeed; //Console.WriteLine("Source: {0}, Target: {1}, Diff: {2} MaxPerFrame: {3}", Rotation, targetRotation, rotationDiff, rotationPerFrame); if (rotationDiff < rotationPerFrame) { Rotation = targetRotation; if (LastShotTicks == null || World.Ticks - LastShotTicks >= FiringIntervalTicks) { int x = Math.Max(0, Position.X - Sprites.Turret.Width / 2); int y = Math.Max(0, Position.Y - Sprites.Turret.Height / 2); Projectile bullet = new CannonShot(World, Player, Position, Target); World.AddProjectile(bullet); LastShotTicks = World.Ticks; Sounds.CannonShot.Play(); } } else { Rotation += rotationPerFrame; } } } }
// Use this for initialization void Start() { reses = new resList(); if (cannon != null) { cs = cannon.GetComponent <CannonShot>(); } }
void Awake() { //mBody = GetComponent<Rigidbody>(); visibilityRadius = NetworkManager.visibilityRadius; //Instantiate(inventory); inventory = GetComponent <Inventory>(); ship_equipment = GetComponent <ShipEquipment>(); //player_equipment = GetComponent<PlayerEquipment>(); movement = GetComponent <BoatMovement>(); playerEnterCollider = GetComponentInChildren <SphereCollider>(); playerEnterCollider.radius = NetworkManager.visibilityRadius / 2; //enable collider for ship when we have player character playerEnterCollider.enabled = false; mysql = FindObjectOfType <Mysql>(); cannonShot = GetComponent <CannonShot>(); cannonController = GetComponent <CannonController>(); spawnManager = FindObjectOfType <SpawnManager>(); }
public void ShootCannon() { CannonShot?.Invoke(_position, _direction); }