All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mmb.engine.chance.RandomOrElseChance Maven / Gradle / Ivy

Go to download

Dependency for the MultiMachineBuilder, a voxel game about building an industrial empire in a finite world. THIS RELEASE IS NOT PLAYABLE. To play the game, donwload from >ITCH.IO LINK HERE< or >GH releases link here<

There is a newer version: 0.6
Show newest version
/**
 * 
 */
package mmb.engine.chance;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import org.ainslec.picocog.PicoWriter;

import mmb.engine.inv.io.InventoryWriter;
import mmb.engine.item.ItemEntry;
import mmb.engine.worlds.world.World;

/**
 * @author oskar
 *
 */
public class RandomOrElseChance implements Chance {
	
	public final double chance;
	public final Chance wrap;
	public final Chance other;

	/**
	 * Creates a random chance object
	 * @param chance the chance of selecting the first item
	 * @param wrap the item which may be rewarded
	 * @param other the result when first chance is not selected
	 */
	public RandomOrElseChance(double chance, Chance wrap, Chance other) {
		super();
		this.chance = chance;
		this.wrap = wrap;
		this.other = other;
	}

	@Override
	public boolean drop(InventoryWriter inv, World map, int x, int y) {
		if(Math.random() < chance) return wrap.drop(inv, map, x, y);
		return other.drop(inv, map, x, y);
	}

	@Override
	public void produceResults(InventoryWriter tgt, int amount) {
		if(Math.random() < chance) wrap.produceResults(tgt, amount);
		else other.produceResults(tgt, amount);
	}

	@Override
	public void represent(PicoWriter out) {
		out.write((chance*100)+"% chance with else [");
		wrap.represent(out);
		out.write("] else [");
		other.represent(out);
		out.write("]");
	}

	
	@Override
	public boolean contains(ItemEntry item) {
		return wrap.contains(item) || other.contains(item);
	}

	private Set items;
	@Override
	public Set items() {
		if(items == null) {
			Set items0 = new HashSet<>();
			items0.addAll(wrap.items());
			items0.addAll(other.items());
			items = Collections.unmodifiableSet(items0);
		}
		return items;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy