public static bool PassesMultiPartRule(IBlockAccess world, Vector3 position, MultiPartRule rule, BlockState baseBlock, out MultiPartRule passedRule) { MultiPartRule s = rule; passedRule = rule; if (rule.HasOrContition) { if (rule.Or.Any(o => { var pass = PassesMultiPartRule(world, position, o, baseBlock, out var p); if (pass) { s = p; return(true); } return(false); })) { passedRule = s; return(true); } ; return(false); } if (rule.HasAndContition) { if (rule.And.All(o => { var pass = PassesMultiPartRule(world, position, o, baseBlock, out var p); if (pass) { s = p; return(true); } return(false); })) { passedRule = s; return(true); } ; return(false); } return(rule.KeyValues.All(x => Passes(world, position, baseBlock, x.Key, x.Value.ToLower()))); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.StartArray) { var v = serializer.Deserialize <MultiPartRule[]>(reader); return(v); } else { var v = new MultiPartRule[] { serializer.Deserialize <MultiPartRule>(reader) }; return(v); } }
private static bool PassesMultiPartRule(MultiPartRule rule, BlockState blockState) { if (rule.HasOrContition) { return(rule.Or.Any(o => PassesMultiPartRule(o, blockState))); } if (rule.HasAndContition) { return(rule.And.All(o => PassesMultiPartRule(o, blockState))); } return(rule.KeyValues.All(x => CheckRequirements(blockState, x.Key, x.Value))); }
private static bool PassesMultiPartRule(MultiPartRule rule, IBlockState blockState) { if (rule.HasOrContition) { return(rule.Or.Any(o => PassesMultiPartRule(o, blockState))); } if (rule.HasAndContition) { return(rule.And.All(o => PassesMultiPartRule(o, blockState))); } if (CheckRequirements(blockState, "down", rule.Down) && CheckRequirements(blockState, "up", rule.Up) && CheckRequirements(blockState, "north", rule.North) && CheckRequirements(blockState, "east", rule.East) && CheckRequirements(blockState, "south", rule.South) && CheckRequirements(blockState, "west", rule.West)) { return(true); } return(false); }
private static bool PassesMultiPartRule(IWorld world, Vector3 position, MultiPartRule rule, IBlockState baseBlock) { if (rule.HasOrContition) { return(rule.Or.Any(o => PassesMultiPartRule(world, position, o, baseBlock))); } if (rule.HasAndContition) { return(rule.And.All(o => PassesMultiPartRule(world, position, o, baseBlock))); } if (Passes(world, position, baseBlock, "down", rule.Down) && Passes(world, position, baseBlock, "up", rule.Up) && Passes(world, position, baseBlock, "north", rule.North) && Passes(world, position, baseBlock, "east", rule.East) && Passes(world, position, baseBlock, "south", rule.South) && Passes(world, position, baseBlock, "west", rule.West)) { return(true); } return(false); }
public static bool PassesMultiPartRule(IBlockAccess world, Vector3 position, MultiPartRule rule, BlockState baseBlock, out MultiPartRule passedRule) { MultiPartRule s = rule; passedRule = rule; if (rule.HasOrContition) { if (rule.Or.Any(o => { var pass = PassesMultiPartRule(world, position, o, baseBlock, out var p); if (pass) { s = p; return(true); } return(false); })) { passedRule = s; return(true); } ; return(false); } if (rule.HasAndContition) { if (rule.And.All(o => { var pass = PassesMultiPartRule(world, position, o, baseBlock, out var p); if (pass) { s = p; return(true); } return(false); })) { passedRule = s; return(true); } ; return(false); } //return rule.All(x => CheckRequirements(baseBlock, x.Key, x.Value)); return(rule.KeyValues.All(x => Passes(world, position, baseBlock, x.Key, x.Value.ToLower()))); /* * if (Passes(world, position, baseBlock, "down", rule.Down) * && Passes(world, position, baseBlock, "up", rule.Up) * && Passes(world, position, baseBlock, "north", rule.North) * && Passes(world, position, baseBlock, "east", rule.East) * && Passes(world, position, baseBlock, "south", rule.South) * && Passes(world, position, baseBlock, "west", rule.West)) * { * return true; * } * * return false;*/ }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { MultiPartRule rule = new MultiPartRule(); JObject obj = JObject.Load(reader); foreach (var prop in obj) { switch (prop.Key.ToLower()) { case "or": if (prop.Value.Type == JTokenType.Array) { rule.Or = prop.Value.ToObject <MultiPartRule[]>(serializer); } else { rule.Or = new MultiPartRule[] { prop.Value.ToObject <MultiPartRule>(serializer) }; } break; case "and": if (prop.Value.Type == JTokenType.Array) { rule.And = prop.Value.ToObject <MultiPartRule[]>(serializer); } else { rule.And = new MultiPartRule[] { prop.Value.ToObject <MultiPartRule>(serializer) }; } break; default: if (prop.Value.Type == JTokenType.String || prop.Value.Type == JTokenType.Boolean) { rule.KeyValues.Add(prop.Key, prop.Value.ToObject <string>()); } else { Log.Warn($"Got unsupported property type: {prop.Key}:{prop.Value.Type}"); } break; } } /*if (reader.TokenType == JsonToken.StartArray) * { * var v = serializer.Deserialize<MultiPartRule[]>(reader); * return v; * } * else * { * var v = new MultiPartRule[] { serializer.Deserialize<MultiPartRule>(reader) }; * return v; * }*/ return(rule); }