private List <DefensiveBattleController.CameraEventData> GetMostReleventCameraEvents() { if (this.cameraEvents.Count > 0) { DefensiveCameraEventType defensiveCameraEventType = DefensiveCameraEventType.None; if (this.currentCameraEvent != null) { defensiveCameraEventType = this.currentCameraEvent.type; } List <DefensiveBattleController.CameraEventData> list = new List <DefensiveBattleController.CameraEventData>(); float num = 10f; float time = Time.time; for (int i = this.cameraEvents.Count - 1; i >= 0; i--) { DefensiveBattleController.CameraEventData cameraEventData = this.cameraEvents[i]; if (this.currentCameraEvent != null) { Vector2 a = new Vector2(cameraEventData.posX, cameraEventData.posZ); Vector2 b = new Vector2(this.currentCameraEvent.posX, this.currentCameraEvent.posZ); num = Math.Abs(Vector2.Distance(a, b)); } if (num >= 10f && time < cameraEventData.timeStamp + this.GetExpirationTimeForEvent(cameraEventData.type) && cameraEventData.type <= defensiveCameraEventType) { list.Add(cameraEventData); } } return(list); } return(null); }
private void AddCameraEvent(float x, float z, DefensiveCameraEventType type) { if (!this.autoMoveCamera) { return; } DefensiveBattleController.CameraEventData cameraEventData = new DefensiveBattleController.CameraEventData(); cameraEventData.posX = x; cameraEventData.posZ = z; cameraEventData.type = type; cameraEventData.timeStamp = Time.time; this.cameraEvents.Add(cameraEventData); this.MoveCameraToAction(); }
private float GetExpirationTimeForEvent(DefensiveCameraEventType type) { switch (type) { case DefensiveCameraEventType.BuildingDestroyed: case DefensiveCameraEventType.WallDestroyed: case DefensiveCameraEventType.TroopDestroyed: return(0.5f); case DefensiveCameraEventType.TroopSpawned: return(0.5f); case DefensiveCameraEventType.EntityDamaged: return(0.2f); default: return(0f); } }
public EatResponse OnEvent(EventId id, object cookie) { switch (id) { case EventId.PreEntityKilled: { Entity entity = (Entity)cookie; BuildingComponent buildingComponent = entity.Get <BuildingComponent>(); TransformComponent transformComponent = entity.Get <TransformComponent>(); if (transformComponent != null) { DefensiveCameraEventType type = DefensiveCameraEventType.TroopDestroyed; if (buildingComponent != null) { if (buildingComponent.BuildingType.Type == BuildingType.Wall) { type = DefensiveCameraEventType.WallDestroyed; } else { type = DefensiveCameraEventType.BuildingDestroyed; } } this.AddCameraEvent(Units.BoardToWorldX(transformComponent.CenterX()), Units.BoardToWorldZ(transformComponent.CenterZ()), type); } return(EatResponse.NotEaten); } case EventId.EntityKilled: { Entity item = (Entity)cookie; if (this.currentWave != null && this.currentWave.Troops.Contains(item)) { this.currentWave.Troops.Remove(item); if (this.currentWave.Troops.Count == 0 && this.timers.Count == 0) { this.EndCurrentWave(); } } return(EatResponse.NotEaten); } case EventId.PostBuildingEntityKilled: case EventId.EntityDestroyed: IL_1D: if (id == EventId.CameraFinishedMoving) { this.MoveCameraToAction(); return(EatResponse.NotEaten); } if (id != EventId.UserStartedCameraMove) { return(EatResponse.NotEaten); } this.autoMoveCamera = false; this.cameraEvents.Clear(); this.numTimesEntityHit.Clear(); this.UnRegisterObservers(); return(EatResponse.NotEaten); case EventId.EntityHit: { Bullet bullet = (Bullet)cookie; SmartEntity target = bullet.Target; uint iD = target.ID; TransformComponent transformComp = target.TransformComp; BuildingComponent buildingComp = target.BuildingComp; if (buildingComp != null && transformComp != null) { if (this.numTimesEntityHit.ContainsKey(iD)) { Dictionary <uint, int> dictionary; uint key; (dictionary = this.numTimesEntityHit)[key = iD] = dictionary[key] + 1; } else { this.numTimesEntityHit.Add(iD, 1); } if (this.currentCameraEvent == null || this.numTimesEntityHit[iD] > 5) { this.numTimesEntityHit[iD] = 0; this.AddCameraEvent(Units.BoardToWorldX(transformComp.CenterX()), Units.BoardToWorldZ(transformComp.CenterZ()), DefensiveCameraEventType.EntityDamaged); } } return(EatResponse.NotEaten); } } goto IL_1D; }