extra FragmentShader(VertexOut vertex, Field <data> Data, Field <unit> Unit, Field <extra> Extra, vec2 Destination, [Player.Vals] float player, [SelectionFilter.Vals] float filter) { data data_here = Data[Here]; unit unit_here = Unit[Here]; extra extra_here = Extra[Here]; if (player == unit_here.player && selected(data_here) && SelectionFilter.FilterHasUnit(filter, unit_here.type)) { extra_here = extra.Nothing; } return(extra_here); }
void DrawSelectedInfo() { color clr = rgba(0x888888, .5f).Premultiplied; bool building_selected = UnitType.BuildingVals.Any(type => DataGroup.UnitSummary[Int(type) - 1]); vec2 size = vec(.145f, .145f); float building_scale = 1.4f; float building_shift = building_selected ? (building_scale - 1) * 2 * size.x : 0; vec2 shift = vec(-size.x, 0); vec2 start; if (MapEditor) { start = vec(CameraAspect, -1) + vec(-.1f, .46f); } else { start = vec(CameraAspect, -1) + vec(-.1f, .21f); } vec2 cur_pos = start - vec(building_shift, 0); for (int i = Int(UnitType.Count) - 1; i >= 0; i--) { if (DataGroup.UnitSummary[i]) { float type = _[i + 1]; vec2 pos = cur_pos + -2 * size.FlipY(); vec2 s = size; if (IsBuilding(type)) { s *= building_scale; pos.y += s.y * .2f; } SetUnitQuad(pos, s, type, MyPlayerNumber, (GameClass.World.DrawCount / 7) % UnitSpriteSheet.AnimLength, Dir.Left, q); bool FilteredOut = SelectionFilter.FilterHasUnit(CurSelectionFilter, type); color Shade = FilteredOut ? rgb(0xffffff) : rgb(0x000000); DrawColoredTexture.Using(vec(0, 0, 1, 1), CameraAspect, q.Texture, Shade); q.Draw(GameClass.Graphics); cur_pos += shift; } } }
vec4 FragmentShader(VertexOut vertex, Field <data> Data, Field <unit> Unit, Field <data> TargetData, vec2 Destination, [Player.Vals] float player, [SelectionFilter.Vals] float filter) { data data_here = Data[Here]; unit unit_here = Unit[Here]; vec4 target = vec4.Zero; if (player == unit_here.player && selected(data_here) && SelectionFilter.FilterHasUnit(filter, unit_here.type)) { vec2 dest = Destination; target = pack_vec2(dest); } else { target = (vec4)TargetData[Here]; } return(target); }
vec4 FragmentShader(VertexOut vertex, Field <data> Data, Field <unit> Unit, Field <data> TargetData, vec2 Destination_BL, vec2 Selection_BL, vec2 ConversionRatio, [Player.Vals] float player, [SelectionFilter.Vals] float filter) { data data_here = Data[Here]; unit unit_here = Unit[Here]; vec4 target = vec4.Zero; if (player == unit_here.player && selected(data_here) && SelectionFilter.FilterHasUnit(filter, unit_here.type)) { vec2 pos = vertex.TexCoords * Data.Size; pos = (pos - Selection_BL); pos = pos * ConversionRatio + Destination_BL; pos = round(pos); target = pack_vec2(pos); } else { target = (vec4)TargetData[Here]; } return(target); }
bool[] FilteredSummary(float filter) { return(DataGroup.UnitSummary.Select((b, i) => b && SelectionFilter.FilterHasUnit(filter, _[i + 1])).ToArray()); }