/// <summary> /// This function is called to update the furniture. This will also trigger EventsActions. /// This checks if the furniture is a PowerConsumer, and if it does not have power it cancels its job. /// </summary> /// <param name="deltaTime">The time since the last update was called.</param> public void FixedFrequencyUpdate(float deltaTime) { // requirements from components (gas, ...) bool canFunction = true; BuildableComponent.Requirements newRequirements = BuildableComponent.Requirements.None; foreach (BuildableComponent component in components) { bool componentCanFunction = component.CanFunction(); canFunction &= componentCanFunction; // if it can't function, collect all stuff it needs (power, gas, ...) for icon signalization if (!componentCanFunction) { newRequirements |= component.Needs; } } // requirements were changed, force update of status icons if (Requirements != newRequirements) { Requirements = newRequirements; OnIsOperatingChanged(this); } IsOperating = canFunction; if (canFunction == false) { if (prevUpdatePowerOn) { EventActions.Trigger("OnPowerOff", this, deltaTime); } Jobs.PauseAll(); prevUpdatePowerOn = false; return; } prevUpdatePowerOn = true; Jobs.ResumeAll(); if (EventActions != null) { EventActions.Trigger("OnUpdate", this, deltaTime); } foreach (BuildableComponent component in components) { component.FixedFrequencyUpdate(deltaTime); } if (Animation != null) { Animation.Update(deltaTime); } }
public void AddStatus(BuildableComponent.Requirements requirements, GameObject gameObj) { if (StatusIndicators == null) { StatusIndicators = new Dictionary <BuildableComponent.Requirements, GameObject>(); } StatusIndicators[requirements] = gameObj; }
public BuildableComponent.Requirements GetPossibleRequirements() { BuildableComponent.Requirements requires = BuildableComponent.Requirements.None; foreach (BuildableComponent component in components) { requires |= component.Needs; } return(requires); }
private Sprite GetStatusIndicatorSprite(BuildableComponent.Requirements oneIdicator) { return(SpriteManager.GetSprite("Icon", string.Format("{0}Indicator", oneIdicator.ToString()))); }
protected override void OnCreated(Furniture furniture) { GameObject furn_go = new GameObject(); // Add our tile/GO pair to the dictionary. objectGameObjectMap.Add(furniture, furn_go); // FIXME: This hardcoding is not ideal! if (furniture.HasTypeTag("Door")) { // Check to see if we actually have a wall north/south, and if so // set the furniture verticalDoor flag to true. Tile northTile = world.GetTileAt(furniture.Tile.X, furniture.Tile.Y + 1, furniture.Tile.Z); Tile southTile = world.GetTileAt(furniture.Tile.X, furniture.Tile.Y - 1, furniture.Tile.Z); if (northTile != null && southTile != null && northTile.Furniture != null && southTile.Furniture != null && northTile.Furniture.HasTypeTag("Wall") && southTile.Furniture.HasTypeTag("Wall")) { furniture.VerticalDoor = true; } } SpriteRenderer sr = furn_go.AddComponent <SpriteRenderer>(); sr.sprite = GetSpriteForFurniture(furniture); sr.sortingLayerName = "Furniture"; sr.color = furniture.Tint; furn_go.name = furniture.Type + "_" + furniture.Tile.X + "_" + furniture.Tile.Y; furn_go.transform.position = furniture.Tile.Vector3 + ImageUtils.SpritePivotOffset(sr.sprite, furniture.Rotation); furn_go.transform.Rotate(0, 0, furniture.Rotation); furn_go.transform.SetParent(objectParent.transform, true); sr.sortingOrder = Mathf.RoundToInt(furn_go.transform.position.y * -1); FurnitureChildObjects childObjects = new FurnitureChildObjects(); childObjectMap.Add(furniture, childObjects); childObjects.Overlay = new GameObject(); childObjects.Overlay.transform.parent = furn_go.transform; childObjects.Overlay.transform.position = furn_go.transform.position; SpriteRenderer spriteRendererOverlay = childObjects.Overlay.AddComponent <SpriteRenderer>(); Sprite overlaySprite = GetOverlaySpriteForFurniture(furniture); if (overlaySprite != null) { spriteRendererOverlay.sprite = overlaySprite; spriteRendererOverlay.sortingLayerName = "Furniture"; spriteRendererOverlay.sortingOrder = Mathf.RoundToInt(furn_go.transform.position.y * -1) + 1; } // indicators (power, fluid, ...) BuildableComponent.Requirements furnReq = furniture.GetPossibleRequirements(); foreach (BuildableComponent.Requirements req in Enum.GetValues(typeof(BuildableComponent.Requirements))) { if (req != BuildableComponent.Requirements.None && (furnReq & req) == req) { GameObject indicator = new GameObject(); indicator.transform.parent = furn_go.transform; indicator.transform.localScale = new Vector3(IndicatorScale, IndicatorScale, IndicatorScale); indicator.transform.position = furn_go.transform.position + statusIndicatorOffsets[req]; SpriteRenderer powerSpriteRenderer = indicator.AddComponent <SpriteRenderer>(); powerSpriteRenderer.sprite = GetStatusIndicatorSprite(req); powerSpriteRenderer.sortingLayerName = "Power"; powerSpriteRenderer.color = Color.red; childObjects.AddStatus(req, indicator); } } UpdateIconObjectsVisibility(furniture, childObjects); if (furniture.Animations != null) { furniture.Animations.Renderer = sr; } // Register our callback so that our GameObject gets updated whenever // the object's into changes. furniture.Changed += OnChanged; furniture.Removed += OnRemoved; furniture.IsOperatingChanged += OnIsOperatingChanged; }