/* * Copyright 2010, Maarten Billemont * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.lyndir.omicron.api; import com.google.common.base.Preconditions; import com.lyndir.lhunath.opal.system.logging.Logger; import com.lyndir.lhunath.opal.system.util.MetaObject; import com.lyndir.omicron.api.error.*; import javax.annotation.Nullable; public abstract class Module extends MetaObject implements IModule { @SuppressWarnings("UnusedDeclaration") private static final Logger logger = Logger.get( Module.class ); private final ImmutableResourceCost resourceCost; private GameObject gameObject; protected Module(final ImmutableResourceCost resourceCost) { this.resourceCost = resourceCost; Preconditions.checkState( getType().getModuleType().isInstance( this ), "Invalid module type for module: %s", this ); } @Override public int hashCode() { return System.identityHashCode( this ); } @Override public boolean equals(@Nullable final Object obj) { return obj == this; } @Override public ImmutableResourceCost getResourceCost() { return resourceCost; } void setGameObject(final GameObject gameObject) { this.gameObject = gameObject; } @Override public GameObject getGameObject() { return Preconditions.checkNotNull( gameObject, "This module has not yet been initialized by its game object." ); } void assertOwned() throws NotAuthenticatedException, NotOwnedException { Security.assertOwned( getGameObject() ); } void assertObservable() throws NotAuthenticatedException, NotObservableException { Security.assertObservable( getGameObject() ); } protected abstract void onReset(); protected abstract void onNewTurn(); static Module cast(final IModule module) { return (Module) module; } }