@SuppressWarnings("unchecked") public <T> T getProperty(String property) { FieldPath fp = dtClass.getFieldPathForName(property); if (fp == null) { throw new IllegalArgumentException(String.format("property %s not found on entity of class %s", property, getDtClass().getDtName())); } return getPropertyForFieldPath(fp); }
@OnEntityCreated public void onCreated(Entity e) { FieldPath fp = e.getDtClass().getFieldPathForName("CBodyComponent.m_hModel"); if (fp == null) { return; } Long resourceHandle = e.getPropertyForFieldPath(fp); if (resourceHandle == null || resourceHandle == 0L) { return; } Resources.Entry entry = resources.getEntryForResourceHandle(resourceHandle); System.out.format("model for entity at %d (%d): %s\n", e.getIndex(), resourceHandle, entry); }
/** * Check if this entity contains all of the given properties. * * @param properties Names of the properties * @return True, if and only if the given properties are present in this entity */ public boolean hasProperties(String... properties) { for (String property : properties) { if (!hasProperty(property)) { return false; } } return true; }
@OnEntitySpawned public void onSpawned(Entity e) { System.out.printf("%06d: %s at index %d has spawned\n", ctx.getTick(), e.getDtClass().getDtName(), e.getIndex()); }
@Override public boolean apply(Entity e) { return dtClassName.equals(e.getDtClass().getDtName()); } });
entity = new Entity(engineType, entityIndex, serial, cls, true, state); entities[entityIndex] = entity; evCreated.raise(entity); throw new ClarityException("entity at index %d was not found for update.", entityIndex); cls = entity.getDtClass(); state = entity.getState(); int nChanged = fieldReader.readFields(stream, cls, state, debug); evUpdated.raise(entity, fieldReader.getFieldPaths(), nChanged); if (!entity.isActive()) { entity.setActive(true); evEntered.raise(entity); log.warn("entity at index %d was not found when ordered to leave.", entityIndex); } else { if (entity.isActive()) { entity.setActive(false); evLeft.raise(entity); if (entity != null) { log.debug("entity at index %d was ACTUALLY found when ordered to delete, tell the press!", entityIndex); if (entity.isActive()) { entity.setActive(false); evLeft.raise(entity);
private void processLifeStateChange(Entity e, FieldPath p) { int oldState = currentLifeState.containsKey(e.getIndex()) ? currentLifeState.get(e.getIndex()) : 2; int newState = e.getPropertyForFieldPath(p); if (oldState != newState) { currentLifeState.put(e.getIndex(), newState); switch(newState) { case 0: if (evSpawned != null) { evSpawned.raise(e); } break; case 1: if (evDying != null) { evDying.raise(e); } break; case 2: if (evDied != null) { evDied.raise(e); } break; } } }
private void clearCachedState(Entity e) { currentLifeState.remove(e.getIndex()); }
@OnEntityCreated @Order(1000) public void onEntityCreated(Entity e) { List<FieldPath> fieldPaths = e.getDtClass().collectFieldPaths(e.getState()); for (FieldPath fp : fieldPaths) { evPropertyChanged.raise(e, fp); } }
private Entry buildWardEntry(Context ctx, Entity e) { Entry entry = new Entry(time); boolean isObserver = !e.getDtClass().getDtName().contains("TrueSight"); Integer x = getEntityProperty(e, "CBodyComponent.m_cellX", null); Integer y = getEntityProperty(e, "CBodyComponent.m_cellY", null); Integer z = getEntityProperty(e, "CBodyComponent.m_cellZ", null); Integer life_state = getEntityProperty(e, "m_lifeState", null); Integer[] pos = {x, y}; entry.x = x; entry.y = y; entry.z = z; entry.type = isObserver ? "obs" : "sen"; entry.entityleft = life_state == 1; entry.key = Arrays.toString(pos); entry.ehandle = e.getHandle(); if (entry.entityleft) { entry.type += "_left"; } Integer owner = getEntityProperty(e, "m_hOwnerEntity", null); Entity ownerEntity = ctx.getProcessor(Entities.class).getByHandle(owner); entry.slot = ownerEntity != null ? (Integer) getEntityProperty(ownerEntity, "m_iPlayerID", null) : null; return entry; } }
public Entity getByHandle(int handle) { Entity e = entities[engineType.indexForHandle(handle)]; return e == null || e.getSerial() != engineType.serialForHandle(handle) ? null : e; }
@OnMessage(S1NetMessages.CSVCMsg_TempEntities.class) public void onTempEntities(S1NetMessages.CSVCMsg_TempEntities message) { if (evTempEntity.isListenedTo()) { BitStream stream = BitStream.createBitStream(message.getEntityData()); S1DTClass cls = null; ReceiveProp[] receiveProps = null; int count = message.getNumEntries(); while (count-- > 0) { stream.readUBitInt(1); // seems to be always 0 if (stream.readBitFlag()) { cls = (S1DTClass) dtClasses.forClassId(stream.readUBitInt(dtClasses.getClassBits()) - 1); receiveProps = cls.getReceiveProps(); } Object[] state = new Object[receiveProps.length]; fieldReader.readFields(stream, cls, state, false); evTempEntity.raise(new Entity(engineType, 0, 0, cls, true, state)); } } }
Entities entities = ctx.getProcessor(Entities.class); Integer hItem = eHero.getProperty("m_hItems." + Util.arrayIdxToString(idx)); if (hItem == 0xFFFFFF) { return null; throw new UnknownItemFoundException(String.format("Can't find item by its handle (%d)", hItem)); String itemName = stEntityNames.getNameByIndex(eItem.getProperty("m_pEntity.m_nameStringableIndex")); if(itemName == null) { throw new UnknownItemFoundException("Can't get item name from EntityName string table"); int numCharges = eItem.getProperty("m_iCurrentCharges"); if(numCharges != 0) { item.num_charges = numCharges; int numSecondaryCharges = eItem.getProperty("m_iSecondaryCharges"); if(numSecondaryCharges != 0) { item.num_secondary_charges = numSecondaryCharges;
@Override public boolean apply(Object[] value) { Entity e = (Entity) value[0]; return p.matcher(e.getDtClass().getDtName()).matches(); } };
@OnEntityDied public void onDied(Entity e) { System.out.printf("%06d: %s at index %d has died\n", ctx.getTick(), e.getDtClass().getDtName(), e.getIndex()); }
entity = new Entity(engineType, entityIndex, serial, cls, true, state); entities[entityIndex] = entity; evCreated.raise(entity); throw new ClarityException("entity at index %d was not found for update.", entityIndex); cls = entity.getDtClass(); state = entity.getState(); int nChanged = fieldReader.readFields(stream, cls, state, debug); evUpdated.raise(entity, fieldReader.getFieldPaths(), nChanged); if (!entity.isActive()) { entity.setActive(true); evEntered.raise(entity); log.warn("entity at index %d was not found when ordered to leave.", entityIndex); } else { if (entity.isActive()) { entity.setActive(false); evLeft.raise(entity); if (entity != null) { log.debug("entity at index %d was ACTUALLY found when ordered to delete, tell the press!", entityIndex); if (entity.isActive()) { entity.setActive(false); evLeft.raise(entity);
private void clearCachedState(Entity e) { currentLifeState.remove(e.getIndex()); }
@OnEntityCreated @Order(1000) public void onEntityCreated(Entity e) { List<FieldPath> fieldPaths = e.getDtClass().collectFieldPaths(e.getState()); for (FieldPath fp : fieldPaths) { evPropertyChanged.raise(e, fp); } }
public Entity getByHandle(int handle) { Entity e = entities[engineType.indexForHandle(handle)]; return e == null || e.getSerial() != engineType.serialForHandle(handle) ? null : e; }
@OnMessage(S1NetMessages.CSVCMsg_TempEntities.class) public void onTempEntities(S1NetMessages.CSVCMsg_TempEntities message) { if (evTempEntity.isListenedTo()) { BitStream stream = BitStream.createBitStream(message.getEntityData()); S1DTClass cls = null; ReceiveProp[] receiveProps = null; int count = message.getNumEntries(); while (count-- > 0) { stream.readUBitInt(1); // seems to be always 0 if (stream.readBitFlag()) { cls = (S1DTClass) dtClasses.forClassId(stream.readUBitInt(dtClasses.getClassBits()) - 1); receiveProps = cls.getReceiveProps(); } Object[] state = new Object[receiveProps.length]; fieldReader.readFields(stream, cls, state, false); evTempEntity.raise(new Entity(engineType, 0, 0, cls, true, state)); } } }